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

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.12031.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)/25^(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/3res_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.393259627845404026653388391876res_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.56250.8750-2.2500


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

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部