要保证变量x为一个符号变量
syms x
多项式合并 (x + 3x − 5x)x/4
(x+3*x-5*x)*x/4
return: $-\frac{x^2}{4}$
方程 ax2 + bx + c = 0
syms a b c
solve(a*x^2+b*x+c, x);
第一个参数为求解的目标方程,第二个参数为求解变量
y = a*x^2+b*x+c;
solve(y, x);
方程 2x − x2 = e − x
y = a*x - x^2 - exp(-x);solve(y, x);
方程组 $\begin{cases} x+by=5\\ax-y=x\end{cases}$
syms a b x y
y1 = x + b*y - 5;
y2 = a*x - y - x;
result = solve(y1, y2, x, y);
result.x;
result.t;
solve返回的结果是一个结构体,通过访问结构体内部的元素展示结果
方程组 $\begin{cases}e^{-e^{-x_1-x_2}}=x_2(1+x^2_1)\\x_1cos(x_2)+x_2sin(x_1)=\frac{1}{2}\end{cases}$
syms x1 x2
y1 = exp(-exp(-x1-x2)) - x2*(1+x1^2);
y2 = x1*cos(x2) + x2*sin(x1)-1/2;
result = solve(yi, y2, x1, x2);
result.x1;
result.x2;
用牛顿迭代法求近似解
方程 2x − x2 = e − x
f = @(x)2*x-x^2-exp(-x);fsolve(f, 0);
第二个参数为初值
方程组 $\begin{cases} x+by=5\\ax-y=x\end{cases}$
a = 3;
b = 5;
f = @(x)funs(x, a, b);
fsolve(f, [0, 0])
function y = funs(x, a, b) % x =[x, y]
y(1) = x(1) + b*x(2) - 5;
y(2) = a*x(1) - x(2) - x(1);
end
方程组 $\begin{cases}e^{-e^{-x_1-x_2}}=x_2(1+x^2_1)\\x_1cos(x_2)+x_2sin(x_1)=\frac{1}{2}\end{cases}$
f = @fun;fsolve(f, [0,0]);
function y = fun(x) % x = [x1, x2]
y(1) = exp(-exp(-x(1)-x(2))) - x(2)*(1+x(1)^2);
y(2) = x(1)*cox(x(2)) + x(2)*sin(x(1))- 1/2;
end
方程:y′ = 2x, 初值y(0) = 1
syms y(x)
desolve(diff(y) == 2*x, y(0) == 1)
方程:y″ = μ(1 − y2)y′ + y, 初值y(0) = 1, y′(0) = 0
syms y(x) mu
eqn = diff(y, 2) == mu*(1-y^2)*diff(y)+y
cond1 = y(0) == 1;
Dy = diff(y);
cond2 = Dy(0) == 0;
desolve(eqn, cond1, cond2)
方程组 $\begin{cases}y_1'=y_2\\y_2'=-y_1\end{cases},初值\begin{cases}y_1(0)=1\\y_2(0)=1\end{cases}$
syms y1(x) y2(x)
eqn1 = diff(y1) == y2;
eqn1 = diff(y2) == -y1;
cond1 = y1(0) == 1;
cond2 = y2(0) == 1;
result = desolve(eqn1, eqn2, cond1, cond2);
方程组 $\begin{cases}y_1'=a-(b+1)y_1+y_1^2y_2\\y_2'=by_1-y_1^2y_2\end{cases},初值\begin{cases}y_1(0)=3\\y_2(0)=4\end{cases}$
syms y1(x) y2(x) a b
eqn1 = diff == a-(b+1)*y1+y1^2*t2;
eqn2 = diff(y2) == b*y1 = y1^2*y2;
desolve(eqn1, eqn2);
有许多常微分方程,从理论上讲解存在,但无法求出其解析解,此时,需要寻求数值解。
基本思想:y′ = 2x,可以转化为 $\frac{y[n]-y[n-1]}{\Delta x}=2x\Rightarrow y[n]=y[n-1]+ax\Delta x,$然后通过迭代的方式来求解 $y_0$. 也因此,数值解法必须提供初值。
方程:y′ = 2x, 初值y(0) = 10, 积分区间[0, 10]
f = @(x, y)2*x;tspan = [0, 10];y0 = 10;[x, y] = ode45(f, tspan, y0);
匿名函数必须同时接受两个输入(x,y),即使其中一个输入未使用也是如此
方程:y″ = μ(1 − y2)y′ + y, 初值y(0) = 1, y′(0) = 0, 积分区间[0, 20]
首先先转化为MATLAB标准形式:令y1 = y, y2 = y′
则转化为: $\begin{cases}y'=y_2\\y_2'=\mu(1-y_1^2)y_2+y_1\end{cases}$,其中M(x,y)对应的是单位矩阵,y′对应的是导数矩阵[y′, y2′]。F(x, y),对应的是函数矩阵
mu = 1;
f = @(×,y)fun(y,mu)
tspan = [0, 20];
y0 = [1 0];
[x, y] = ode45(f, tspan, y0);
plot(x,y(:,1), "r", x, y(:,2),"g");
function ydot = fun(y, mu)
ydot = [y(2); mu*(1-y(1)2)*y(2)+y(1)];
end
方程组 $\begin{cases}y_1'=a-(b+1)y_1+y_1^2y_2\\y_2'=by_1-y_1^2y_2\end{cases},初值\begin{cases}y_1(0)=3\\y_2(0)=4\end{cases},积分区间[0, 10]$
a= 100;
b = 50;
f =@(x,y)fun(y,a,b);
tspan = [e 10];
ye = [3 4];
[x,y] =ode45(f,tspan,ye);
plot(x, y(:,1),"r", x, y(:,2),"g")
function ydot = fun(y, a, b)
ydot = [a - (b+1)*y(1) + y(1)2*y(2);b*y(1)-y(1)2*y(2)];
end