Roots of a function: Difference between revisions

m (oct...)
Line 474:
 
x += step</lang>
 
=={{header|Tcl}}==
This simple brute force iteration marks all results, with a leading "~", as approximate.
<lang Tcl>
proc froots {lambda {start -3} {end 3} {step 0.0001}} {
set res {}
set lastsign [sgn [apply $lambda $start]]
for {set x $start} {$x <= $end} {set x [expr {$x + $step}]} {
set sign [sgn [apply $lambda $x]]
if {$sign ne $lastsign} {lappend res [format ~%.11f $x]}
set lastsign $sign
}
return $res
}
proc sgn x {expr {($x>0) - ($x<0)}}
 
froots {x {expr {$x**3 - 3*$x**2 + 2*$x}}}
</lang>
Result and timing:
<pre/Tcl $ time ./froots.tcl
~0.00000000000 ~1.00000000000 ~2.00000000000
 
real 0m0.368s
user 0m0.062s
sys 0m0.030s</pre>
Anonymous user