Roots of a function: Difference between revisions
Content added Content deleted
m (oct...) |
(→{{header|Python}}: + Tcl) |
||
Line 474: | Line 474: | ||
x += step</lang> |
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> |