几周前,我向大家寻求有关Matlab任务的帮助,但是因为它花了我一些时间来解决,所以我把它删除了。不幸的是,我仍然有一个问题。
任务是:使用牛顿-拉夫森方法,使用至少3次迭代找到函数f(x)=tanh(x^2 - 9)的实际根。x= 3.2以图形方式显示每个迭代。
在代码中"pog“的意思是min。错了,"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提前谢谢你!
发布于 2014-12-15 23:46:25
就以图形方式显示迭代而言,这是我所能做的最好的:
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
endhttps://stackoverflow.com/questions/27489231
复制相似问题