数值计算迭代解方程

二分法

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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值