%%牛顿法和牛顿下山法
% h=@(x) x.^3+x.^2-1;
% x = newton_eq(h,1,1000);
function result=newton_eq(h,x,n)
%x为初始值
%n为迭代次数
f = matlabFunction(h);%转化为句柄形式
f1=matlabFunction(diff(h));%weishixian
X(1)=x;
i=2;
while 1
X(i)=X(i-1)-lamda*f(X(i-1))/f1(X(i-1));
if abs(f(X(i)))<1e-6
result=X(i);
return;
end
if abs(f(X(i)))<abs(f(X(i+1)))
lamda=1;
else
lamda=lamda/2;
end
if i> n
result=X(i);
return;
end
i=i+1;
end
%%弦截法
h=@(x) x.^3+x.^2-1;
[x,tol] = xianjie(h,[1,2],1000);
function [result,to]=xianjie(f,x,n)
if nargout==1
flag=1;
elseif nargout==2
flag=2;
end
x1=x(1);
x2=x(2);
i=1;
while i < n
x3=x2-f(x2)*(x2-x1)/(f(x2)-f(x1));
if abs(f(x3))<1e-6
if flag==1
result=x3;
return;
elseif flag==2
result=x3;
to=abs(f(x3));
return;
end
end
x1=x2;
x2=x3;
i=i+1;
end
%%抛物线法
h=@(x) x.^3+x.^2-1;
[x,tol] = paowuxian(h,[-5,0,5]);
function [result,tol]=paowuxian(h,x)
if nargout==1||nargout==0
flag=1;
elseif nargout==2
flag=2;
end
f=h;
x1=x(1);
x2=x(2);
x3=x(3);
while 1
y1=f(x1);
y2=f(x2);
y3=f(x3);
f1=lagrange([x1,x2,x3],[y1,y2,y3]);
a=f1(1);b=f1(2);c=f1(3);
if b^2-4*a*c<=0
disp('初值不合适');
result=[];
tol=[];
return;
end
x4_1=(-b+sqrt(b^2-4*a*c))/(2*a);
x4_2=(-b-sqrt(b^2-4*a*c))/(2*a);
if abs(x1-x4_1)<abs(x2-x4_2)
x4=x4_1;
else
x4=x4_2;
end
if abs(f(x4))<1e-6
if flag==1||flag==0
result=x4;
return;
elseif flag==2
result=x4;
tol=abs(f(x4));
return;
end
end
x1=x2;
x2=x3;
x3=x4;
end
%% fzero
% 用法1
x1=fzero('x.^2-2',1);%根趋近于1
x2=fzero('x.^2-2',[0,3]);%根在【0,3】区间里
%用法二
x3=fzero(@myfun,2)
%新建一个脚本文件
% function y=myfun(x)
% y=x.^2-2+x.^3;
fun=@(x) x.^2-2+x.^3;
x4=fzero(fun,2);
options=optimset('Display','Final')%notify
fun=@(x) x.^2-2+x.^3;
x5=fz