我几周前曾就Matlab任务寻求帮助,但因为我花了一些时间才解决这个问题。不幸的是,我仍有问题。
任务是:使用Newton-Raphson方法,使用至少3次迭代查找函数f(x)=tanh(x^2 - 9)
的实根。 x = 3.2以图形方式显示每次迭代。
在代码" pog"意味着最小化错误," br"是反击。
如果我没有放置一个计数器,它会立即给我" NaN",通过计数器,它会先写几个计算。
我的代码:
clc
clear all
x=3.2;
fx=tanh(x^2-9);
iter=5;
pog=0.01;
br=1;
while br<10;
xk= x-((tanh(x^2-9))/(-2*x*(tanh(x^2 - 9)^2 - 1)));
fprintf ('x=%g\txk=%g\t%g\n', x,xk, abs(xk-x))
if pog>abs(xk-x);
break
end
x=xk;
br=br+1;
end
提前谢谢!
答案 0 :(得分:1)
至于以图形方式显示迭代,这是我能做的最好的事情:
clc
clear all
close
G=zeros(20,10);
X=linspace(2.5,3.5,20)
G(:,1)=X;
for i=1:length(X)
x=X(i)
fx=tanh(x^2-9);
pog=0.0001;
br=1;
while br<10;
xk= x-((tanh(x^2-9))/(2*x*sech(9-x^2)^2));
G(i,br+1)=xk;
x=xk;
br=br+1;
end
end
I=tanh(G(:,end).^2-9)<1e-5;
X(I)
plot(G,1:10)
hold off
axis([2.5 3.5 0 5])
X(I)
是收敛到根的起始值列表,该图显示y轴上的迭代次数,以及x轴上该次迭代的猜测。您可以跟踪每个起始值,看看会发生什么。
这是另一种可视化牛顿方法的方法。它显示了构造的切线,以及它通过0的位置,它为您提供了新的x
值,垂直线从中为您提供了新的函数值,该值定义了下一次迭代的新切线。这可能有所帮助。
clc
clear all
close
G=zeros(20,10);
X=linspace(2.75,3.25,20)
G(:,1)=X;
x2=2:.01:4;f2=@(x) tanh(x.^2-9); %// to help with plotting
for i=1:length(X)
x=X(i)
fx=tanh(x^2-9);
pog=0.0001;
br=1;
xk=x;
while br<10;
%// Newton method step
dx=((tanh(x^2-9))/(2*x*sech(9-x^2)^2));
xk=x-dx;
%// plotting everything
G(i,br+1)=xk;
plot(x2,f2(x2))
hold all
plot(G(i,br:br+1),f2(G(i,br:br+1)),'.','MarkerSize',16)
plot(x2,f2(x)+(x2-x)./(xk-x).*(-f2(x)))
plot(xk,0,'.','MarkerSize',16)
plot(x2,(x2-xk)*(2*xk*sech(9-xk^2)^2)+f2(xk))
plot([xk xk],[-1 1])
plot([2 4],[0 0],'k')
axis([2 4 -1 1])
drawnow
pause
hold off
%// finishing Newton step
x=xk;
br=br+1;
end
hold off
end