📄 improvednewton.m
字号:
%f(x)= 10*x.^3+80*x.^2+6*x+a0时,
[improvednewton1.m]
function sa = improvednewton1(x0,epsilon,max)
% IMPROVEDNEWTON1 calculate the improvednewton method approximation
% x0 is the initial value
% epsilon is the tolerance for x0
% max is the maximum number of iterations
syms x;
syms pstar;
q=1000;
pstar=rand(1,q) % p*
step=zeros(1,q); %迭代步数
order=zeros(3,q); %收敛阶数
g=inline('-10*x^3-80*x^2-6*x');
df=inline('1-((10*x^3+80*x^2+6*x+a0)*(60*x+160))/((30*x^2+160*x+6)^2)');
U=zeros(1,max);
U(1)=x0;
for i=1:q
a0=feval(g,pstar(i));
f=inline('(10*x.^3+80*x.^2+6*x+a0)/(30*x.^2+160*x+6)');
for j=1:max
x1=x0-feval(f,a0,x0)/feval(df,a0,x0);
U(j+1)=x1;
err=abs(x1-x0);
x0=x1;
if err<epsilon
break;
end
end
for k=1:j
Us(k)=log(abs(U(k)-pstar(i)));
end
X=Us(1:j-1);
Y=Us(2:j);
if j==max %不收敛
step(i)=0;
order(:,i)=0;
q=q-1;
else if j==2 %收敛
X=Us(1:j);
Y=Us(2:j+1);
else %收敛
step(i)=j;
xmean=mean(X);
ymean=mean(Y);
Gs=X-xmean;
G=zeros(1,j-1);
for h=1:3
for d=1:j-1
G(d)=Gs(d)*(d^(h-1));
end
sumx2=G*(X-xmean)';
sumxy=(Y-ymean)*G';
order(h,i)=sumxy/sumx2;
end
end
end
end
q
v=zeros(1,3);
v=sum((order)');
averagesteps=sum(step)/q
averageorder1=v(1)/q
averageorder2=v(2)/q
averageorder3=v(3)/q
(b).
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -