Autor |
Mensaje |
rama_qac
Nivel 5
Edad: 35
Registrado: 26 Jul 2008
Mensajes: 142
|
|
si eso fue lo que hice al final, se lo mande como me salio, se que tiene cosas mal..gracias por la ayuda!
|
|
|
|
_________________ Rama!
|
|
|
|
|
rama_qac
Nivel 5
Edad: 35
Registrado: 26 Jul 2008
Mensajes: 142
|
|
alguien q lo haya hecho en matlab me podria dar una manoo con loa RK?? manden mp cualquier cosa, gracias!!
|
|
|
|
_________________ Rama!
|
|
|
|
|
Amintoros
Nivel 8
Registrado: 20 Mar 2008
Mensajes: 533
Carrera: Química
|
|
yo lo hice en matlab, el tema es que recién el Miércoles me lo devuelven corregido, no sé si habré implementado bien esos métodos. Qué dudas tenés?
EDIT: soy un nabo
|
|
|
|
_________________
Elmo Lesto escribió:
|
Bistek escribió:
|
por qué pasa que a veces entro al foro y esta todo en aleman?
|
Ahí aplicaron la transformada de Führer
|
cuando la yerba mate
Última edición por Amintoros el Sab Jun 19, 2010 11:09 pm, editado 2 veces
|
|
|
|
|
rama_qac
Nivel 5
Edad: 35
Registrado: 26 Jul 2008
Mensajes: 142
|
|
los RK no me dan como deberian, el de orden 2 me da igual q Euler, y para q alcanzar la tolerancia con el de orden 4 tengo q disminuir el paso mas q en los otros dos metodos, evidentemente esta mal..
para el RK 2 use este algoritmo:
for i=1:d
R=1+h*i;
ua(i+1)=u(i)+h*v(i);
va(i+1)=v(i)-h*v(i)/R;
u(i+1)=u(i)+h*(v(i)+va(i+1))/2;
v(i+1)=v(i)-h*(v(i)+va(i+1))/(2*R);
end
desp lo modifique a ver si funcionaba y me daba lo mismo:
for i=1:d
R=1+h*i;
ua(i+1)=u(i)+h*v(i);
va(i+1)=v(i)-h*v(i)/(R+h);
u(i+1)=u(i)+h*(v(i)+v(i)-h*v(i)/(R+h))/2;
v(i+1)=v(i)-h*((v(i)/R)+(v(i)-h*v(i)/(R+h))/(R+h))/2;
end
este lo hice como ultimo recurso pero bue..
u=T y v=dT/dr
decime q hiciste algo parecido y no estoy tan errado jaja
|
|
|
|
_________________ Rama!
|
|
|
|
|
Amintoros
Nivel 8
Registrado: 20 Mar 2008
Mensajes: 533
Carrera: Química
|
|
No debería ser así?
for i=1:d
R=1+h*i;
ua(i+1)=u(i)+h*u(i) ;
va(i+1)=v(i)-h*v(i)/(R+h);
u(i+1)=u(i)+h*(u(i)+ua(i+1))/2;
v(i+1)=v(i)-h*((v(i)/R)+(v(i)-h*v(i)/(R+h))/(R+h))/2;
end
Nunca usé euler modificado como RK2, por eso pregunto. Fijate si cambiando eso anda, sino te paso lo que hice (programé RK2 en la forma que usa las constantes q1,q2, que es un poco más extensa, pero menos confusa).
|
|
|
|
_________________
Elmo Lesto escribió:
|
Bistek escribió:
|
por qué pasa que a veces entro al foro y esta todo en aleman?
|
Ahí aplicaron la transformada de Führer
|
cuando la yerba mate
|
|
|
|
|
rama_qac
Nivel 5
Edad: 35
Registrado: 26 Jul 2008
Mensajes: 142
|
|
no de esa manera va aumentando en lugar de disminuir la u, por favor pasame la de las constantes a ver si me funciona con eso, con el euler modificado voy para atras jeje gracias!
|
|
|
|
_________________ Rama!
|
|
|
|
|
Amintoros
Nivel 8
Registrado: 20 Mar 2008
Mensajes: 533
Carrera: Química
|
|
ahí te mandé un mp, saludos
|
|
|
|
_________________
Elmo Lesto escribió:
|
Bistek escribió:
|
por qué pasa que a veces entro al foro y esta todo en aleman?
|
Ahí aplicaron la transformada de Führer
|
cuando la yerba mate
|
|
|
|
|
TanoInf
Nivel 2
Edad: 36
Registrado: 14 Oct 2006
Mensajes: 18
Carrera: Informática
|
|
Gente como les va? Tengo un problema con el RK4, con el tema de la precisión. No me da 4 cuando hago las diferencias:
|un(tn) - Tn(tn)| = C.h^p
|un(tn) - Tn(tn)| = C.(h/2)^p
un(tn) es el resultado de mi descritizacion para un tn.
Tn(tn) es la solucion exacta del problema para tn.
C es una constante.
h es el paso.
p es el orden.
cuando hago el cociente de estas ecuaciones, y despejando p deberia obtener el orden, osea 4.. pero con el RK4 no lo consigo...
Alguna idea?
El algoritmo utilizado es similar al q posteo algun otro, esta echo en C. Lo adjunto por las dudas:
q1_u=k*vn;
q1_v=k*((-vn)/tn);
q2_u=k*(vn+(q1_v/2));
q2_v=k*(-(vn+(q1_v/2))/(tn+(k/2)));
q3_u=k*(vn+(q2_v/2));
q3_v=k*(-(vn+(q2_v/2))/(tn+(k/2)));
q4_u=k*(vn+q3_v);
q4_v=k*(-(vn+q3_v)/(tn+k));
*un = *un + ((q1_u+(2*q2_u)+(2*q3_u)+q4_u)/6);
vn = vn + ((q1_v+(2*q2_v)+(2*q3_v)+q4_v)/6);
tn += k;
Gracias! Saludos..!
TanoINF
|
|
|
|
|
|
|
|
|
Amintoros
Nivel 8
Registrado: 20 Mar 2008
Mensajes: 533
Carrera: Química
|
|
Pudiste solucionar el problema? no veo errores en el algoritmo, salvo la forma en que actualizás tn (seguro es un error al escribirlo acá, o es algo de C, de lo que entiendo una goma)
Usé el mismo algoritmo que vos, solo que mi u es tu v:
y
las condiciones iniciales u0 = 1 y v0 = 0 son las del tiro no trivial.
Si el algoritmo está bien, y también lo está el método de tiro, lo que puede hacer que de cualquier cosa es el error de redondeo, si h es pequeño. Por ese motivo no usé todos los valores de h que había usado con el método de Euler, sino los primeros 3 o 4, porque los errores con RK4 son muy chicos.
Espero que lo hayas podido solucionar, cualquier cosa avisá. Saludos
|
|
|
|
_________________
Elmo Lesto escribió:
|
Bistek escribió:
|
por qué pasa que a veces entro al foro y esta todo en aleman?
|
Ahí aplicaron la transformada de Führer
|
cuando la yerba mate
|
|
|
|
|
TanoInf
Nivel 2
Edad: 36
Registrado: 14 Oct 2006
Mensajes: 18
Carrera: Informática
|
|
Gracias lo pude solucionar, ya ni me acuerdo como, sé q tenia un error en algoritmo acerca de los q_u y q_v que los organizaba mal.. pero en el q postie estan bien. Asi q no me acuerdo cual fue el toque final, pero ya esta aprobado, gracias de todos modos.
el:
tn += k;
se usa para incrementar en C, es una asignacion con suma... Saludos!
|
|
|
|
|
|
|
|
|
|