Matlab Newton Raphson

时间:2014-12-15 17:05:02

标签: matlab

我几周前曾就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

提前谢谢!

1 个答案:

答案 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轴上该次迭代的猜测。您可以跟踪每个起始值,看看会发生什么。

enter image description here

这是另一种可视化牛顿方法的方法。它显示了构造的切线,以及它通过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