本文主要介绍在matlab中,常微分方程初值解,常微分方程组通解,二元非线性方程组,多元线性方程组的求解。
先补充一点,我们知道一个方程的解在不同的域,其解也不一样,更有甚者我们不知道方程的系数,但要求结果用变量表示。
所以我们要定义变量的符号如下
syms x y z a b c x1 x2 x3 x4;
A_shishu=solve(x^4==81,x,'real',true)%在实数域的解
solve(x^4==81,x,'real',true)表示求解x^4=81在R上的解,如果没有'real',true那么结果将会有3i和-3i
A_bianliang=solve(a*x^2+b*x+c,x)
solve(a*x^2+b*x+c,x)则表示x为变量a b c为系数求解x
下面正式求解二元非线性方程组
zu= [x^2-x*y+y==3,x^2-4*x+3==0];
bianliang= [x y];
[x,y]=solve(zu,bianliang)%%二元非线性方程组
首先定义方程组 然后再定义方程组中的变量最后通过算式[x,y]=solve(,)算出,值得注意的是括号里必须先方程组 然后再是变量的名称顺序不能换
zu1=[x1-2*x2+3*x3-4*x4==4,x2-x3+x4==-3,x1+3*x2+x4==1,-7*x2+3*x3+x4==-3];
bianliang1= [x1 x2 x3 x4];
[x1,x2,x3,x4]=solve(zu1,bianliang1)%%多元线性方程组
这个算法与上面同理,但是补充一点,本人用的2021年的matlab,这个算法是近几年更新的,以前算法这两种方程组需要分类。2021的matlab 有些功能升级了导致跟老版本的不一致,比如代数方程求解部分,以前就是线性的不加‘‘,非线性的就需要加‘‘。还有解多元方程组用矩阵的方法,现在都可以用统一的这种函数形式了
y=dsolve('D2y-4*Dy+29*y=0','y(0)=0','D1y(0)=15','x')%%常微分方程初值
其中D2y表示y的二阶导,D必须要是大写后面,最后的x表示以x为蚕食,如果不填那么matlab默认参数为t
[x,y,z]=dsolve('2*x-3*y+3*z-Dx=0','Dy=4*x-5*y+3*z','Dz=4*x-4*y+2*z','t')%%常微分方程组通解
最后结果如下
A_shishu =
-3
3
A_bianliang =
-(b + (b^2 - 4*a*c)^(1/2))/(2*a)
-(b - (b^2 - 4*a*c)^(1/2))/(2*a)
x =
3
y =
3
x1 =
-8
x2 =
3
x3 =
6
x4 =
0
y =
3*sin(5*x)*exp(2*x)
x =
C1*exp(-t) + C3*exp(2*t)
y =
C1*exp(-t) + C2*exp(-2*t) + C3*exp(2*t)
z =
C2*exp(-2*t) + C3*exp(2*t)