Matlab解方程或方程组方法总结

本文总结了Matlab中解方程的各种方法,包括使用roots函数解多项式方程,fzero求解非线性方程,solve函数获取符号解,vpasolve进行数值求解,fsolve处理非线性方程组,以及直接用矩阵运算解决线性方程组。这些工具覆盖了从简单到复杂的各类方程求解需求。
摘要由CSDN通过智能技术生成

Matlab解方程或者方程组的方法总结

1. 多项式求根函数roots
r = roots(p) 
  1. 向量p表示多项式,p为n阶多项式从高阶到低阶的系数向量,长度为n+1
  2. r为所求所有根

例:

p = [1, -8, 5, 9]; % 即多项式 *x^3 - 8*x^2 + 5*x + 9
roots(p)
ans =

    7.1203
    1.6471
   -0.7674
2. 单变量非线性方程求根函数fzero
[x,fval] = fzero(fun, x0) % 求初始点x0附近的根
  1. fun为所求的非线性方程,用一个M文件保存或者使用匿名函数
  2. x0为迭代求根的初始点,也即求这个初始点附近的根
  3. x为求出的根
  4. fval为在所求根处的fun函数值——即0

例:

f = @(x) x^2 + 3*x + 1;
x = fzero(f, 0) 
x =

   -0.3820
3. 使用solve函数求解符号解
sol = solve(prob)
sol = solve(prob, x0)
  1. prob为方程或者方程组
  2. x0为初值
  3. sol为所求根

例1:

% 解方程
syms x;
sol = solve(x^2 - 3*x + 1, x);
ans =

 3/2 - 5^(1/2)/2
 5^(1/2)/2 + 3/2

例2:

% 解方程组
syms u v a;
y = [2*u + v == a, u - v == 1]; % 方程组
[res_u, res_v] = solve(y, [u, v]); % 要求解的变量是u和v
res_u
res_v
res_u =
 
a/3 + 1/3
 
 
res_v =
 
a/3 - 2/3
4. 使用vpasolve函数,以数字方式求解符号方程
S = vpasolve(eqn,var,init_param)
  1. eqn为求解函数
  2. var为求解变量
  3. init_param为搜索范围

例1:

% 解方程
syms x;
equation = sin(x) == x^2 - 1;
vpasolve(equation1, x, [0, 2])  % 求在[0, 2]中的解
ans =
 
1.4096240040025962492355939705895

例2:

%解方程组
syms x y;
eqn = [x^2 - 2*x - 3*x*y == 10, y^4 == exp(-2*x/3)];
[res_x, res_y] = vpasolve(eqn, [x, y])
res_x =
 
-1.393259627845404026653388391876
 
 
res_y =
 
1.261384513542676943005039668231

注:vpasolve函数对多项式方程求解才会给出所有的解,其他类型只会返回一个解,可以通过以下形式,多次运行可求得非多项式方程的多个解

[res_x, res_y] = vpasolve(eqn, [x, y], 'random', true)
5. 使用fsolve函数
x = fsolve(fun,x0)
  1. fun为求解方程或者方程组,以匿名函数或者M文件方式存在
  2. x0为求解搜索初值
  3. x为所求根

例:

% 求解非线性方程组
f = @(x) [exp(-exp(-(x(1) + x(2)))) - x(2)*(1+x(1)^2),  x(1)*cos(x(2)) + x(2)*sin(x(1)) - 0.5 ];
fsolve(f, [0, 0], optimset('Display', 'off'))
ans =

    0.3532    0.6061
6. 线性方程组可直接由Matlab矩阵运算求解
% 线性方程组:
%  2*x1 + 3*x2 - x3 = 10
%  2*x2 + x3 = -5
%  2*x1 + x2 = 6
c = [2, 3, -1; 
       0, 2, 3;
       2, 1, 0];
b = [10, -5, 6]';
x = c \ b
x =

    2.5625
    0.8750
   -2.2500
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值