目录
多项式求根
poly
p = poly(r)
p = poly(A)
r是多项式的跟,返回的p是多项式系数。
A是方阵,返回的p是特征多项式的系数。
例如已知某多项式的跟为1,2,求该多项式。
poly([1 2])
ans =1 -3 2
则该多项式为。
结果不太好看??
那么我们可以用poly2sym函数来进行
poly2sym([1 -3 2])
再如,求方阵的特征多项式。
这是比较简单的矩阵,可以手算
当矩阵比较复杂时建议用代码实现
A=[1 2;1 2];
poly([A])
ans =1 -3 0
即
来个复杂的矩阵B=[4 6 0;-3 -5 0;-3 -6 1]
roots
我们知道上一题中特征多项式为=0;
那么假如我们想求特征值(根),可以用roots命令来做
保留上面的B矩阵并赋值r.
roots也可用于多项式
例如求(题目来源高代三导从书第一章例1.15)
的根。
太复杂?好的,咱们来道简单题
求的根
函数求根
solve
S = solve(eqn,var)
eqn为方程组或者单个方程,var为需要求的方程的变量。
比如求单变量方程,求n的值。
syms n;
y=(n-100)*(n-300)/20000+0.4;
y1=solve(y==0,n);
vpa(y1,4)%精确四位小数
再如求多变量方程组
clear
syms x y
eq=[x^2+y^2==1,x+y==1];
vars=[x,y];
[x,y]=solve(eq,vars)
即x=0,1.y=1,0
fzero(非线性函数)
x = fzero(fun,x0)
fun - 求解的函数
函数句柄(标识符@(x)) | 函数名称(变成字符串形式)
x0 - 初始值
标量 | 二元素向量
x0是初始猜测值,或者猜测的范围。
标准形式f(x)=0
标识符写法
fun=@(x)x^3-2*x-5;
fzero(fun,1)
%fzero(fun,[-5,5])
字符串写法
fun='x^3-2*x-5';
fzero(fun,1)
%fzero(fun,[-5,5])
fsolve(非线性方程组)
例如用fsolve求下非线性方程组。
先编写m函数文件
function F=c(x)
F=[2*x(1)-x(2)-exp(-x(1));
-x(1)+2*x(2)-exp(-x(2))
];
记得保存,然后在命令行引用c编写好的函数。
x=fsolve('c',[-5,-5])
求解微分方程
1.符号解
(1)线性和部分非线性
a.线性
求的通解
y1=dsolve('Dy=2*a*x','x')
求的特解
满足初始值y'(0)=0,y(0)=1
y2=dsolve('3*D2y+4*Dy+5*y=exp(x)','Dy(0)=0','y(0)=1','x');
simplify(y2)
b.部分非线性
求方程特解,y(1)=2.
clear
y3=dsolve('Dy=x/y+y/x','y(1)=2','x')
(2)非线性
需要自己手动调用x,y
clear
S=dsolve('Dx=y+1','Dy=x+1','x(0)=-2','y(0)=0','t');
x=S.x
y=S.y
经过2023版本测试,可以不需要自己手动调用,即最后两行可不要。2014可能需要调用。
2.数值解
(1)龙格-库塔
(2)欧拉方法
这两个方法由于内容较多,我会下主页下一篇文章中详细展开来讲