MATLAB基础篇——数值分析篇
1.solve求解方程/方程组(不涉及微积分运算)
格式:
syms 符号变量(要求解的变量)
solve(方程左边==方程右边,符号变量)
例子:
(1)求解方程
x
2
−
x
−
6
=
0
x^2-x-6=0
x2−x−6=0
(2)求方程组
y
2
+
x
−
6
=
0
,
x
2
+
y
−
6
=
0
y^2+x-6=0,x^2+y-6=0
y2+x−6=0,x2+y−6=0的解
clear
clc
%T1
syms x
x=solve(x^2-x-6==0,x)
clear
syms x y
[x,y]=solve(x^2+y-6==0,y^2+x-6==0,x,y)
%结果:
x =
-2
3
x =
2
-3
21^(1/2)/2 + 1/2
1/2 - 21^(1/2)/2
y =
2
-3
1/2 - 21^(1/2)/2
21^(1/2)/2 + 1/2
2.fsolve/fzero求解非线性方程/方程组
fsolve(fun,x0),fun为待求方程(组),x0为初始值,fzero类似
例子:
(1)求方程
x
−
e
−
x
=
0
x-e^{-x}=0
x−e−x=0
(2)求方程组
x
1
−
0.5
s
i
n
x
1
−
0.3
c
o
s
x
2
=
0
,
x
2
−
0.5
c
o
s
x
1
+
0.3
s
i
n
x
2
=
0
x_1-0.5sinx_1-0.3cosx_2=0,x_2-0.5cosx_1+0.3sinx_2=0
x1−0.5sinx1−0.3cosx2=0,x2−0.5cosx1+0.3sinx2=0
(3)求解
x
2
e
−
x
2
=
0.2
x^2e^{-x^2}=0.2
x2e−x2=0.2
clear
clc
%T1
x=fsolve(@(x) x-exp(-x),0)
%T2
clear
x=fsolve(@fun,[0.1,0.1])
function f=fun(x)
f(1)=x(1)-0.5*sin(x(1))-0.3*cos(x(2));
f(2)=x(2)-0.5*cos(x(1))+0.3*sin(x(2));
end
%T3
x=fzero(@(x) x^2*exp(-x^2)-0.2,0)
%结果
%T1
x =
0.5671
%T2
x =
0.5414 0.3310
x =
-0.5091
3.常微分方程的数值解
ode函数,常用的求解函数
ode45(@fun,自变量的取值范围,初值)
ode15s(@fun,自变量的取值范围,初值)
function f=f(x,y)
f表示dy/dx
常微分方程组求解则是将因变量y和导函数f当作向量处理即可;涉及高阶导,则需要化成一阶微分方程组求解
例子
%第一题
ode45(@(x,y) 8-3*y,[0,1],2)
%第二题
ode15s(@fun,[0,1],[1,3])
function f=fun(x,y)
d1y=y(2);
d2y=2.*x.*d1y./(1+x.^2);
f=[d1y;d2y];
end
%第三题
ode45(@fun,[0,1],[1,2,3,4])
function f=fun(x,y)
d1y=y(2);
d2y=y(3);
d3y=y(4);
d4y=2*d3y-d2y;
f=[d1y;d2y;d3y;d4y];
end
%第四题
ode15s(@fun,[0,1],[3/2,0])
function f=fun(t,y)
d1y=-3*y(1)-y(2);
d2y=exp(t)+3*y(2)+2*y(1)
f=[d1y;d2y];
end