Matlab - runge kutta dos ecuaciones

 
Vista:
sin imagen de perfil
Val: 12
Ha aumentado su posición en 2 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

runge kutta dos ecuaciones

Publicado por jose madriz (8 intervenciones) el 08/04/2018 12:35:55
Necesito una ayuda a como meter las funciones f y g. ya que me arroja error
las ecuaciones que quiero poner seria
dx/dt=x´
dx'/dt=0.1*(1-x^2)*x´-x
que es la de van der pol, ya que necesito gratificarla pero sin usar el comando


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
%% runge kutta dos ecuaciones
x1=1
y1=0
h=0.05
t(1)=0;x(1)=x1;y(1)=y1
x(t)=x'
dx'=0.1*(1-x^2)*x'-x
f=j;
g=dw;
F=inline(f,'t','w','j');
G=inline(g,'t','w','j');
fprintf('%10.6f %10.6f %10.6f\n',t(1),w,j);
for i=1
    t(i+1)=t(1)+i*h
    k(1)=h*F(t(i),x(i),y(i));
    l(1)=h*G(t(i),x(i).y(i))
    k(2)=h*F(t(i)+h/2,x(i)+k(1)/2,y(i)+l(1)/2);
    l(2)=h*G(t(i)+h/2,x(i)+k(1)/2,y(i)+l(1)/2);
    k(3)=h*F(t(i)+h/2,x(i)+k(2)/2,y(i)+l(2)/2);
    l(3)=h*G(t(i)+h/2,x(i)+k(2)/2,y(i)+l(2)/2);
    k(4)=h*F(t(i)+h,x(i)+k(3),y(i)+l(3));
    l(4)=h*G(t(i)+h,x(i)+k(3),y(i)+l(3));
    x(i+1)=x(i)+(1/6)*(k(1)+x*k(2)+x*k(3)+k(4));
    y(i+1)=y(i)+(1/6)*(l(1)+2*l(2)+2*l(3)+l(4));
    fprintf('%10.6f %10.6f %10.6f/n',t(i+1),x(i+1),y(i+1));
end
plot(t,x,'r-',t,y,'b-')
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
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

runge kutta dos ecuaciones

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 19/10/2018 19:59:13
vander_pol

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
%% runge kutta dos ecuaciones
% Necesito una ayuda a como meter las funciones f y g. ya que me arroja error
% las ecuaciones que quiero poner seria
% dx'/dt=0.1*(1-x^2)*-x
% que es la de van der pol, ya que necesito gratificarla pero sin usar el comando
clear all
syms t x1 x2
f=x2;
g=0.1*(1-x1^2)*x2-x1;
t0=0; x0=1; y0=0; h=0.05;
t(1)=0; x(1)=x0; y(1)=y0;
a=x0; b=2;   n=(b-a)/h;
F=inline(f,'t','x1','x2');
G=inline(g,'t','x1','x2');
fprintf('%10.6  %10.6f %10.6f\n',t(1),x(1),y(1));
for i=1:n
    k(1)=h*F(t(i),x(i),y(i));
    l(1)=h*G(t(i),x(i),y(i));
 
    k(2)=h*F(t(i)+h/2,x(i)+k(1)/2,y(i)+l(1)/2);
    l(2)=h*G(t(i)+h/2,x(i)+k(1)/2,y(i)+l(1)/2);
 
    k(3)=h*F(t(i)+h/2,x(i)+k(2)/2,y(i)+l(2)/2);
    l(3)=h*G(t(i)+h/2,x(i)+k(2)/2,y(i)+l(2)/2);
 
    k(4)=h*F(t(i)+h,x(i)+k(3),y(i)+l(3));
    l(4)=h*G(t(i)+h,x(i)+k(3),y(i)+l(3));
 
    x(i+1)=x(i)+(1/6)*(k(1)+2*k(2)+2*k(3)+k(4));
    y(i+1)=y(i)+(1/6)*(l(1)+2*l(2)+2*l(3)+l(4));
     t(i+1)=t(i)+i*h;
    fprintf('%10.2f %10.6f %10.6f\n',t(i+1),x(i+1),y(i+1));
end
plot(t,x,'r-',t,y,'b-')

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
>> vander_pol_runge_kutta4_1
      0.05   0.998750  -0.049979
      0.15   0.995004  -0.099836
      0.30   0.988771  -0.149451
      0.50   0.980065  -0.198709
      0.75   0.968908  -0.247499
      1.05   0.955325  -0.295716
      1.40   0.939347  -0.343257
      1.80   0.921012  -0.390022
      2.25   0.900360  -0.435919
      2.75   0.877436  -0.480854
      3.30   0.852292  -0.524740
      3.90   0.824981  -0.567491
      4.55   0.795563  -0.609023
      5.25   0.764100  -0.649256
      6.00   0.730660  -0.688109
      6.80   0.695314  -0.725503
      7.65   0.658136  -0.761362
      8.55   0.619204  -0.795607
      9.50   0.578603  -0.828162
     10.50   0.536418  -0.858951

Saludos
JOSE JEREMIAS CABALLERO
Asesor de Proyectos con Matlab
Servicios de programación matlab


http://matlabcaballero.blogspot.com
https://www.facebook.com/matlabcaballero
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar