matlab 解方程
1、 代数方程
(1)单个变量的方程:solve(f,t)——对f 中的符号变量t 解方程f=0(t 缺省值为x 或最接近x 的字母)
(2)多个变量的方程:
第一步:定义变量syms x y z …;
第二步:求解[x,y,z,...]=solve(‘eqn1′,’eqn2′,…,’eqnN’,'var1′,’var2′,…’varN’);
第三步:求出n位有效数字的数值解x=vpa(x,n);y=vpa(y,n);z=vpa(z,n);…。
例1:
syms a b x c
f=a*x^2+b*x+c
s=solve(f)
ss=solve(f,b)
f =a*x^2+b*x+c
s =
[ 1/2/a*(-b+(b^2-4*a*c)^(1/2))]
[ 1/2/a*(-b-(b^2-4*a*c)^(1/2))]
ss =-(a*x^2+c)/x
注:求解形如f(x)=q(x)形式的方程,则需要用单引号把方程括起来。
例:
s=solve(‘cos(2*x)+sin(x)=1′)
s =
[ 0]
[ pi]
[ 1/6*pi]
[ 5/6*pi]
例:求解方程组
[x,y]=solve(‘x^2+x*y+y=3′,’x^2-4*x+3=0′)
x =
[ 1]
[ 3]
y =
[ 1]
[ -3/2]
即解为(1,1)和(3,-3/2)
例2 :
二元二次方程组,共4个实数根;
还有的同学问,如何用matlab解高次方程组(非符号方程组)?举个例子好吗?
解答如下:
基本方法是:solve(s1,s2,…,sn,v1,v2,…,vn),即求表达式s1,s2,…,sn组成的方程组,求解变量分别v1,v2,…,vn。
具体例子如下:
x^2 + x*y + y = 3
x^2 – 4*x + 3 = 0
解法:
>> [x,y] = solve(‘x^2 + x*y + y = 3′,’x^2 – 4*x + 3 = 0′)
运行结果为
x =
1 3
y =
1 -3/2
即x等于1和3;y等于1和-1.5
或
>> [x,y] = solve(‘x^2 + x*y + y = 3′,’x^2 – 4*x + 3= 0′,’x',’y')
x =
1 3
y =
1 -3/2
结果一样,二元二方程都是4个实根。
(matlab 解方程)
2、 微分方程
dsolve(‘S’,'s1′,’s2′,…,’x')
其中S为方程,s1,s1,s3,…为初始条件,x 为自变量。方程S中用D表示求导数,D2,D3,…表示二阶、三阶等高阶导数;初始条件缺省时,给出带任意常数C1,C2,..的通解;自变量缺省值为t 。也可求解微分方程组。
例:
dsolve(‘Dy=1+y^2′)
ans =tan(t+C1)
y=dsolve(‘Dy=1+y^2′,’y(0)=1′,’x')
y =tan(x+1/4*pi)
x=dsolve(‘D2x+2*D1x+2*x=exp(t)’,'x(0)=1′,’Dx(0)=0′)
x =1/5*exp(t)+3/5*exp(-t)*sin(t)+4/5*exp(-t)*cos(t)
S=dsolve(‘Df=3*f+4*g’,'Dg=-4*f+3*g’) %解微分方程组
S =
f: [1x1 sym]
g: [1x1 sym]
计算结果返回在一个结构S中,为了看到其中 f,g的值,有如下指令
f=S.f
g=S.g
f =exp(3*t)*(cos(4*t)*C1+sin(4*t)*C2)
g =-exp(3*t)*(sin(4*t)*C1-cos(4*t)*C2)