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 nf = 1/n^2
symsum(f,n,1,inf)
ans =
pi^2/6
由于极限存散销在,所以1/n^2 n=1,2,3...序列收敛
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)