求解方程MATLAB

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

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


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部