Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 使用带公差的割线法进行迭代_Loops_Iteration_Maple_Numerical Analysis_Fixed Point Iteration - Fatal编程技术网

Loops 使用带公差的割线法进行迭代

Loops 使用带公差的割线法进行迭代,loops,iteration,maple,numerical-analysis,fixed-point-iteration,Loops,Iteration,Maple,Numerical Analysis,Fixed Point Iteration,我试图找出在maple中运行割线迭代到某个公差时需要多少次迭代。但是,我收到了一个错误代码,因此如果有人能指出我代码中的错误,我将非常感激 亲切的问候 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 > ab

我试图找出在maple中运行割线迭代到某个公差时需要多少次迭代。但是,我收到了一个错误代码,因此如果有人能指出我代码中的错误,我将非常感激

亲切的问候

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
,这样,对于一个不收敛的示例,它不会永远消失

检查它以了解它是如何工作的/为什么工作的,以及我是否犯了任何错误


再次感谢宏碁,这是你第二次帮助我,我真的很感激。看看我和你的代码,我犯了一些语法错误,并且使用了不同的返回函数。。非常感谢,不客气。我还可以补充一点,条件测试被更改为使用
abs(x[k-1]-x[k-2])
,而不是
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 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.6810954056, 0.6318451478,
    0.6257917558, 0.6256275429, 0.6256270427]