Matlab - RESOLVER 2 ECUACIONES DIFERENCIALES ORDINARIAS SIMULTÁNEAMENTE POR EL MÉTODO DE RUNGE KUTTA 3 Y 4TO

 
Vista:
sin imagen de perfil

RESOLVER 2 ECUACIONES DIFERENCIALES ORDINARIAS SIMULTÁNEAMENTE POR EL MÉTODO DE RUNGE KUTTA 3 Y 4TO

Publicado por daniel (1 intervención) el 15/12/2015 05:36:36
Buenas noches!

Una ayuda, tengo 2 ecuaciones diferenciales ordinarias que quiero resolver simultáneamente (porque dependen mutuamente), tengo el algoritmo del método de Runge Kutta pero esta codificado para introducir 1 ecuación, me podrían ayudar a introducir la otra ecuación al programa? De manera que resulte como salida el intervalo de tiempo y las 2 alturas (correspondientes a las 2 ecuaciones diferenciales) (problema adjunto).

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
function dydt=odet(t,y,param)
    %Descripción breve del contenido de la función...
    dydt=-0.002395882181697;
end
 
 
function ynew=runkuta2(t,y,h,param)
%% Algoritmo de Runge-Kutta de 2° Orden 
% Este programa es una implementación del método explícito de R-K 2er orden
% ...
%
% Llamada inicial de la EDO en los argumentos iniciales (t0,y0);
%
f0=feval('odet',t,y,param);
neq=length(y);  %Número de EDOs de 1er orden...
%
%% Se inicializan los parámetros del método:
%
A=[1;1];
B=zeros(3,2);
B(1,1)=1; B(1:2,2)=[1/2;1/2];
f=zeros(neq,3);
f(:,1)=f0;
hA=h*A;
hB=h*B;
f(:,2)=feval('odet',t+hA(1),y+f*hB(:,1),param);
%f(:,3)=...
tnew=t+hA(2);
ynew=y+f*hB(:,2);
f(:,3)=feval('odet',tnew,ynew,param);
end
 
 
 
% Simulación de un sistema de EDOs
%Inicializando el programa
%Inicializando:
clc,clear
%Datos y parámetros del sistema: 
t0=0;
yinic=15; %Hi, iniciales, en mts.
y=yinic;
%Parámetros de la simulación:
t=t0;
%tinic=t;
tmax=2520; %Tiempo total de simulación, en seg.
dt=360;  %Incremento de tiempo, en seg.
ndt=ceil((tmax-t0)/dt);
int=0;
tsim=zeros(1,ndt+1);
%Solución numérica de las EDOs: 
while int<ndt
    yy=runkuta2(t,y,dt,param); %Se aplica método de R-K 2do orden...
    tsim(int+2)=t+dt;
    ysim(:,int+2)=yy;
    t=tsim(int+2);
    y=yy;
    int=int+1;
end
tsim(1,1)=t0;
ysim(:,1)=yinic;
res=[tsim', ysim'];
%Resultados de la simulación:
format short g
disp(res)
%Salida de resultados a una tabla con descripción de contenido o enviar los
%resultados a una hoja de excel...
T = table(tsim',ysim', 'VariableNames', {'Tiempo','Alturadelnivel'});
T.Properties.Description = 'Variación del nivel del tanque cónico a través del tiempo';
T.Properties.VariableUnits =  {'segundos'  'metros'};
disp(T)
disp(T.Properties)



Las 2 ecuaciones diferenciales que quiero introducir es:

1
dH1/dt= - ((H1-H2)/423.624024)^0.5*(1/78.539846)

y

1
dH2/dt=((H1-H2)/423.624024)^0.5*(1/78.539846)

Las condiciones iniciales son:

H1= 15m

H2= 0m

el intervalo de tiempo es 360seg (hasta 2520segundos)

Gracias de antemano!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder