目录
一.solve()方法
(1)单变量方程 f(x)=0
solve()方法可以求解较为简单的方程和方程组。
1)符号方程
所谓符号方程就是求得方程的解的解析式而不是具体的数值解,比如当参数未知时求得的解。
eg:ax2 + bx + c = 0
syms a b c x;
f = a*x^2+b*x+c;
solve(f,x) %求解结果如下
%结果
ans =
-(b + (b^2 - 4*a*c)^(1/2))/(2*a)
-(b - (b^2 - 4*a*c)^(1/2))/(2*a)
注意: 将solve()方法的第二个参数表示以该字母作为变量
solve(f,a) %求解结果如下
%结果
ans =
-(c + b*x)/x^2
2)数值方程
系数都为常数,最终求得数值解。
eg:x3 + 2x2 = x - 1
syms x;
f = x^3+2*x^2-x+1;
s = solve(f); %求解结果如下
double(s)
%结果
ans =
0.2734 - 0.5638i
0.2734 + 0.5638i
-2.5468 + 0.0000i
3)超越方程
带有三角函数、指数对数等的一些函数方程式
eg:tan(x)-sin(x)=0
syms x;
f = tan(x)-sin(x);
s = solve(f) %求解结果如下
%结果
s =
0
注意: 使用solve求解超越函数只能得到一个解!
(2)方程组
如果有多个变量将多个变量放入一个中括号内接受返回结果
eg:
x2 + y2 - 1 = 0
0.75*x3 - y +0.9=0
syms x y;
f1 = x^2 + y^2 - 1;
f2 = 0.75*x^3 - y + 0.9;
[x,y] = solve(f1,f2); %求解结果如下
x = double(x)
y = double(y)
%结果
x =
-0.9817 + 0.0000i
0.3570 + 0.0000i
-0.5540 - 0.3547i
-0.5540 + 0.3547i
0.8663 - 1.2154i
0.8663 + 1.2154i
y =
0.1904 + 0.0000i
0.9341 + 0.0000i
0.9293 - 0.2114i
0.9293 + 0.2114i
-1.4916 - 0.7059i
-1.4916 + 0.7059i
二.fsolve()方法
(1)数值求解
需要建立方程组的m函数文件,也可以使用匿名函数(比较方便),该方法需要给出初值,然后进行迭代求解!
eg:
2x1 - x2 = e-x1
-x1 + 2x2 = e-x2
%函数m文件
function eq = func(x)
eq(1) = 2*x(1) - x(2) - exp(-x(1));
eq(2) = -x(1) + 2*x(2) - exp(-x(2));
end
%在命令行窗口输入
[x,fv] = fsolve(@func,[0,0])
%x为方程组的解,fv为解对应的函数值
%结果
x =
0.5671 0.5671
fv =
1.0e-06 *
-0.1965 -0.1965
三.fzero()方法
(1)求解方程
该方法需要给出变量的范围
eg:x3 - 3x + 1 = 0, (-2<=x<=0)
在这里插入代码片syms x ;
f = inline('x^3 - 3*x + 1');
fzero(f,[-2,0]) %求解结果如下
%结果
ans =
-1.8794
四.roots()方法
(1) 求解多项式方程
eg: x9 + x8 +1 = 0
p=[1,1,0,0,0,0,0,0,0,1]; %括号里的数为多项式对应的系数
roots(p)
%结果
ans =
-1.2131 + 0.0000i
-0.9017 + 0.5753i
-0.9017 - 0.5753i
-0.2694 + 0.9406i
-0.2694 - 0.9406i
0.4168 + 0.8419i
0.4168 - 0.8419i
0.8608 + 0.3344i
0.8608 - 0.3344i
注意: roots方法可以找出全部的根
五.求解线性方程组
AX = b, A是m×n阶矩阵,b是m维向量
eg:AX = b
%方法一
A = [1 2 11;
4 5 13;
7 8 9];
b = [6; 14; -3];
x=A\b
%方法2
x=inv(a)*b
%结果
x =
39.6111
-39.7222
4.1667
注意: 只能求得一个特解