求解方程MATLAB

MATLAB是什么想必大家都知道,MATLAB是怎么一回事呢?
解方程想必大家都知道,解方程是怎么回事呢?就是这样。
Bisection, Fixpoint, Newton分别是二分法、不动点迭代、牛顿法的函数。
二分法

function Bisection(fun,a,b,e)
%二分法。fun为表达式,a为区间左端点,b为区间右端点,e为终止条件的近似解之差。
t = 0;  %计算迭代次数
if fun(a) * fun(b) > 0
    sprintf("方程的解不在所给区间内。")
else
    while (abs(a-b) >= e)
        mid = (a+b)/2;
        if fun(mid) == 0
            a = mid;b = mid;  %mid即为所求方程的解
        elseif fun(a) * fun(mid) < 0
            b = mid;
        else
            a = mid;
        end
    end
    t = t + 1;
end
sprintf("二分法求得方程的解为%f,解的区间为(%f,%f)。迭代了%d次。",mid,a,b,t)
end

不动点迭代

function Fixpoint(fun,x0,e)
%不动点迭代。fun为迭代公式,x0为迭代初值,e为终止条件的近似解之差。
x1 = fun(x0);  %1次迭代
t = 1;  %计算迭代次数
while (abs(x1 - x0) >= e)
    x0 = x1;
    x1 = fun(x0);
    t = t + 1;
end
sprintf("不动点迭代求得方程的解为%f。迭代了%d次。",x1,t)
end

牛顿法

function Newton(fun1,fun2,x0,e)
%牛顿法。fun1为表达式,fun2为一阶导数,x0为初始估计值,e为终止条件的近似解之差。
x1 = x0 - fun1(x0) / fun2(x0);  %1次迭代
t = 1;  %计算迭代次数
while (abs(x1 - x0) >= e)
    x0 = x1;
    x1 = x0 - fun1(x0) / fun2(x0);
    t = t + 1;
end
sprintf("牛顿法求得方程的解为%f。迭代了%d次。",x1,t)
end

如何使用MATLAB求解方程,以sinx = 6x + 5为例。
对于每种方法给定公式、起点,然后交给电脑(不是)。

%(1)sinx = 6x + 5
clc;
clear;
e = 10^-3;  %终止条件:前后两次近似解之差小于103

%二分法
fun = @(x) 6*x + 5 - sin(x);  %表达式
a = -1;  %区间左端点
b = 0;  %区间右端点
Bisection(fun,a,b,e)

%不动点迭代
fun2 = @(x) sin(x) / 6 - 5/6;  %迭代公式
x0 = -1;
Fixpoint(fun2,x0,e)

%牛顿法
fun3 = @(x) 6 - cos(x);  %一阶导数
Newton(fun,fun3,x0,e)

以e^x + x = 7为例
二分法 表达式 fun =@(x) exp(x) + x - 7;
不动点迭代 迭代公式 fun2 = @(x) log(7-x);
牛顿法 一阶导数 fun3 = @(x) exp(x) + 1;

以lnx + x² = 3为例
二分法 表达式 fun =@(x) log(x) + x^2 - 3;
不动点迭代 迭代公式 fun2 = @(x) (3-log(x))^0.5;
牛顿法 一阶导数 fun3 = @(x) 1/x + 2*x;

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值