如何解决使用正割方法进行公差迭代
我试图找出在运行割线迭代直至达到枫木中的特定公差时需要进行多少次迭代。但是,我收到一个错误代码,因此如果有人指出我的代码中的错误位置,我将非常感激。
亲切的问候。
x0 = 1.22,x1 = 0.8843478306,公差1 * e-6> abs(x1-x0)在达到公差之前要进行多少次迭代?
restart;
secant:=proc(f,x0,x1)
local k,x;
x[0]:=x0;
x[1]:=x1;
print(0,x[0]);
print(1,x[1]);
for k from 2 to 1e-6 > abs(x1-x0) do
x[k]:=x[k-1]-f(x[k-1])*(x[k-1]-x[k-2])/(f(x[k-1])-f(x[k-2]));
print(k,x[k]);
end do;
return x;
end proc;
f1:= x -> 3.0*exp(-1.0*x)-(4.1)*x^2;
y := secant(f1,1.22,0.8843478306)
Error,(in secant) final value in for loop must be numeric or character
解决方法
我将您的条件(再次测试公差)放在while
条件测试中。我还为k
循环索引添加了一个硬编码的上限值,即20
,这样对于一个不收敛的示例,它就不会永远消失。
检查一下以了解其工作原理/原因以及我是否犯了任何错误。
restart;
secant:=proc(f,x0,x1)
local k,x;
x[0]:=x0;
x[1]:=x1;
print(0,x[0]);
print(1,x[1]);
for k from 2 to 20 while abs(x[k-1]-x[k-2]) > 1e-6 do
x[k]:=x[k-1]
-f(x[k-1])*(x[k-1]-x[k-2])/(f(x[k-1])-f(x[k-2]));
print(k,x[k],abs(x[k]-x[k-1]));
end do;
return convert(x,list);
end proc:
f1:= x -> 3.0*exp(-1.0*x)-(4.1)*x^2:
secant(f1,1.22,0.8843478306);
0,1.22
1,0.8843478306
2,0.6810954056,0.2032524250
3,0.6318451478,0.0492502578
4,0.6257917558,0.0060533920
5,0.6256275429,0.0001642129
-7
6,0.6256270427,5.002 10
[1.22,0.8843478306,0.6256270427]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。