function [outputArg1] = division(fun,left,right)
%DIVISION 此处显示有关此函数的摘要
% 此处显示详细说明
mid=(left+right)/2;
while (abs(left-right)>10^(-3))
if fun(mid)*fun(right)<=0
left=mid;
else
right=mid;
end
mid=(left+right)/2;
end
outputArg1 = mid;
disp(outputArg1)
end
//main
fun1=@(x)6*x+5-sin(x);
division(fun1,-1,0);
不动点迭代
function [outputArg1] = fixedpoint(fun,x0)
%FIXEDPOINT 此处显示有关此函数的摘要
% 此处显示详细说明
x0=fun(x0);
while(abs(fun(x0)-x0)>10^(-3))
x0=fun(x0)
end
outputArg1 = x0;
disp(x0)
end
//main
fun1=@(x)6*x+5-sin(x);
g1=@(x)(sin(x)-5)/6;
fixedpoint(g1,-0.9712);
牛顿法
function [outputArg1] = Newton(fun,dfun,x0)
%NEWTON 此处显示有关此函数的摘要
% 此处显示详细说明
x1=x0-fun(x0)/dfun(x0);
while (abs(x1-x0)>10^(-3))
x0=x1;
x1=x0-fun(x0)/dfun(x0);
end
outputArg1 = x1;
disp(outputArg1)
end
//main
fun1=@(x)6*x+5-sin(x);
dfun1=@(x)6-cos(x);
Newton(fun1,dfun1,-0.9709);
牛顿下山法
function [x,k]=newton(x0,fun1,fun2,error) %fun1是原函数,fun2是导函数,error是收敛误差,x0是迭代初始点
x=x0;
y=fun1(x);
k=1; %标记迭代了多少次
while abs(y)>error
d=1;
x2=x-d*y/fun2(x);
while abs(fun1(x2))>abs(fun1(x))
d=d/2;
x2=x-d*y/(fun2(x));
end
x=x2;
y=fun1(x);
k=k+1;
end
//main
f1=@(x)sin(10*x)+2*cos(x)-x-3;
f2=@(x)10*cos(10*x)-2*sin(x)-1;
[x,k]=newton_xia(-1,f1,f2,1e-4)