19 lines
456 B
Text
19 lines
456 B
Text
secant_root(ff,a,b)={
|
|
e = eps() * 2;
|
|
aval=ff(a);
|
|
bval=ff(b);
|
|
while (abs(bval) > e,
|
|
oldb = b;
|
|
b = b - (b - a)/(bval - aval) * bval;
|
|
aval = bval;
|
|
bval = ff(b);
|
|
a = oldb
|
|
);
|
|
b
|
|
};
|
|
addhelp(secant_root, "secant_root(ff,a,b): Finds a root of ff between a and b using the secant method.");
|
|
|
|
eps()={
|
|
precision(2. >> (32 * ceil(default(realprecision) * 38539962 / 371253907)), 9)
|
|
};
|
|
addhelp(eps,"Returns machine epsilon for the current precision.");
|