Tabla de contenido
1. Una única ecuación diferencial ordinaria de orden superior
2. Ecuaciones diferenciales ordinarias de orden superior
3. Ecuaciones diferenciales rígidas
4. Ecuaciones diferenciales implícitas
1. Una única ecuación diferencial ordinaria de orden superior
La forma general de una ecuación diferencial ordinaria de orden superior es la siguiente:
El valor inicial de cada derivada de la variable de salida y(t) es el siguiente:
Seleccione un conjunto de variables de estado de la siguiente manera:
El modelo original de ecuación diferencial ordinaria de alto orden se puede transformar de la siguiente manera:
El valor inicial se convierte de la siguiente manera:
Ejemplo 1
Los valores límite conocidos son los siguientes:
Encuentre la solución numérica de la ecuación de Van der Pol, de la siguiente manera:
desatar:
Primero haz una pequeña transformación:
La descripción de la función de la ecuación de van der Pole es la siguiente:
function y=vdp_eq(t,x,flag,mu)
y=[x(2);-mu*(x(1)^2-1)*x(2)-x(1)];
clc;clear;
x0=[-0.2,-0.7];
t_final=20;
mu=1;
[t1,y1]=ode45('vdp_eq',[0,t_final],x0,[],mu);
mu=2;
[t2,y2]=ode45('vdp_eq',[0,t_final],x0,[],mu);
plot(t1,y1,t2,y2,':')
figure;
plot(y1(:,1),y1(:,2),y2(:,1),y2(:,2),':')
resultado de la operación:
De hecho, dado que el tamaño de paso adoptado por la variable es demasiado pequeño, lleva mucho tiempo, lo que hará que la matriz y de salida sea demasiado grande, lo que excederá la capacidad de almacenamiento de la computadora. En este momento, no es adecuado usar la función ode45 () para resolverlo, y se puede usar el algoritmo de solución de ecuaciones rígidas ode15s () .
2. Ecuaciones diferenciales ordinarias de orden superior
La fórmula general para ecuaciones diferenciales ordinarias de orden superior es la siguiente:
Seleccione la variable de estado de la siguiente manera:
Entonces, el sistema de ecuaciones original se puede transformar a la siguiente forma:
La idea principal de este proceso es cambiar el orden superior al primer orden para facilitar el uso de la función oda 45 .
Ejemplo 2
desatar:
Seleccione un conjunto de variables de estado, de la siguiente manera:
Esto conduce a un sistema de ecuaciones diferenciales ordinarias de primer orden, como sigue:
Hay dos archivos en MATLAB para esta pregunta.
(1) archivo de función
function dx=apolloeq(t,x)
mu=1/82.45;
mu1=1-mu;
r1=sqrt((x(1)+mu)^2+x(3)^2);
r2=sqrt((x(1)-mu1)^2+x(3)^2);
dx=[x(2);
2*x(4)+x(1)-mu1*(x(1)+mu)/r1^3-mu*(x(1)-mu1)/r2^3;
x(4);
-2*x(2)+x(3)-mu1*x(3)/r1^3-mu*x(3)/r2^3];
(2) Archivo principal en ejecución
clc;clear;
x0=[1.2;0;0;-1.04935751];
options=odeset;options.RelTol=1e-6;
[t1,y1]=ode45('apolloeq',[0,20],x0,options);
plot(y1(:,1),y1(:,3))
resultado de la operación:
3. Ecuaciones diferenciales rígidas
Las ecuaciones diferenciales rígidas son una clase especial de ecuaciones diferenciales ordinarias en las que algunas soluciones cambian lentamente, mientras que otras cambian rápidamente y la diferencia entre las dos es muy grande. En este momento, la función ode15s () se puede usar para resolverlo, y el formato de llamada de esta función es exactamente el mismo que el de ode45 (). como sigue:
[t,x]=ode15s(Fun,[t0,tf],x0,options,p1,p2,···)
Ejemplo 3
Solución numérica de la ecuación de Van der Pol al resolver .
desatar:
Hay dos archivos para esta pregunta.
(1) Archivo de descripción diferencial
function y=vdp_eq(t,x,flag,mu)
y=[x(2);-mu*(x(1)^2-1)*x(2)-x(1)];
(2) Archivo principal en ejecución
clc;clear;
%计算范德坡方程
h_opt=odeset;h_opt.RelTol=1e-6;
x0=[2;0];
t_final=3000;
mu=1000;
[t,y]=ode15s('vdp_eq',[0,t_final],x0,h_opt,mu);
plot(t,y(:,1));
figure,
plot(t,y(:,2))
resultado de la operación:
La primera curva cambia más suavemente y la segunda curva cambia más rápido en algunos puntos.
Ejemplo 4
Para encontrar la solución numérica de este problema, el valor inicial es el siguiente:
El intervalo de cálculo es
La ecuación diferencial original es la siguiente:
desatar:
(1) archivo de función
%定义函数
function dy=c7exstf(t,y)
dy=[0.04*(1-y(1))-(1-y(2))*y(1)+0.0001*(1-y(2))^2;...
-10^4*y(1)+3000*(1-y(2))^2];
(2) Archivo principal en ejecución
clc;clear;
%方法一
[t2,y2]=ode45('c7exstf',[0,100],[0;1]);
plot(t2,y2)
format long
step1=[min(diff(t2)),max(diff(t2))] %步长分析
figure,
plot(t2(1:end-1),diff(t2))
%方法二:用ode15s()代替ode45()
opt=odeset;opt.RelTol=1e-6;
[t1,y1]=ode15s('c7exstf',[0,100],[0;1],opt);
figure,
plot(t1,y1)
figure,
plot(t1(1:end-1),diff(t1))
Resultado de ejecución:
paso 1 = 0,000222206938844 0,002149717871840
4. Ecuaciones diferenciales implícitas
Las ecuaciones diferenciales implícitas son ecuaciones que no se pueden transformar en ecuaciones diferenciales ordinarias explícitas.
Ejemplo 5
Conocida , encuentre la solución numérica de la siguiente ecuación.
desatar:
Reescribamos la ecuación original como:
Entre ellos, A (x) y B (x) son los siguientes:
B(x) es el término de la derecha.
(1) archivo de función
function dx=c7ximp(t,x)
A=[sin(x(1)) cos(x(2));-cos(x(2)) sin(x(1))];
B=[1-x(1);-x(2)];
dx=inv(A)*B;
(2) Archivo principal en ejecución
clc;clear;
%求解
opt=odeset;opt.RelTol=1e-6;
[t,x]=ode45('c7ximp',[0,10],[0;0],opt);
plot(t,x) %变步长
resultado de la operación: