一段画牛顿迭代收敛域的matlab程序,求解释

一段画牛顿迭代收敛域的matlab程序,求解释,第1张

%% set para 

d=6

tol=1e-5

maxIter=100

r=-2:0.01:2      漏明  %实部虚部的范围

[x y]=meshgrid(r)  %产生实部虚部二维网格

Z=x+1i*y           %Z对应网格的虚平面

%% Define fuction

f=@(x,d) (x.^d)-1

fprime=@(x,d) d*(x.^(d-1))

%% Perform Newton iterations

for k=1:maxIter

     Z=Z-(f(Z,d)./fprime(Z,d))

end

%% Find d roots of unity, and the  mask

renderMat=0

for j=1:d  

        root=exp(2*pi*1i/d)^j     % the jth root

        Mj=abs(Z-root)  %  distance  Z中每点都这个根的距离

        % Each root gets a unique number in [1,d]

        mask=(Mj<=tol)*j  %Mj<=tol返回满足误差的逻辑矩阵

        唯或%满足误差部分为1*j,不满足部分为0

 指搜伍       renderMat=renderMat+mask

        %加起来之后renderMat中收敛于第j个根的区域数据都是j

        %那么收敛于第j个根的区域都是同一种颜色

end

colormap(hsv(d+1))     % Set the color map

imagesc(r,r,renderMat) % Render the fractal

xlabel('Re(Z)')ylabel('Im(Z)')

h=colorbar

set(h,'ytick',(2*(0:d)+1)*d/(d+1)/2)

str=arrayfun(@(x)num2str(x,'%.2f'),exp(2*pi*1i/d).^(1:d),'uniformoutput',false)

set(h,'yticklabel',[{'未收敛'},str])

一种是设定一个容忍度tol,例扰悔如10^-6,范数| |,例如2范数,无穷范数,一个迭代最大次耐李羡数NMAX

初始化x(0),x(1)

n_iter=1

while(n_iter<NMAX)

if (|x(n+1)-x(n)|/|x(n)|<tol | |x(n+1)-x(n)|<tol)

收敛

break

else

n_iter=n_iter+1

x(n)=x(n+1)

x(n+1)=f(x(n+1)) % f表示迭代步骤

end

end

看是输出收敛昌拍,没有输出即发散

收敛和极限存在是等价的。你可以通过判断序列极限是否存在来判断是否收段键敛。

比如我想判断1/n^2这个序列是否收敛,可以求其极限:冲燃游

syms n

f = 1/n^2

symsum(f,n,1,inf)

ans =

pi^2/6

由于极限存散销在,所以1/n^2 n=1,2,3...序列收敛


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12518130.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-26
下一篇 2023-05-26

发表评论

登录后才能评论

评论列表(0条)

保存