Autor |
Mensaje |
lavo
Nivel 6
Edad: 96
Registrado: 02 Nov 2007
Mensajes: 270
Carrera: Mecánica
|
|
Hola, cursé Computación con Burín, y la verdad es que no aprendí un carajo de Pascal y ahora me encuentro con el problema de tener que programar Runge Kutta de orden 4 para resolver una ec dif de seg orden, hasta ahora tengo esto....
http://webs.uolsinectis.com.ar/laureano2/num_rico.bmp
Haciendo el cambio de variables queda un sistema de primer orden. El enunciado del TP esta acá la primer parte ya la hice):
http://www.geocities.com/anfiubac4/tps/tp2.pdf
El problema es que no sé si puedo poner la función seno en el Pascal y otra cosa que no se es como hacer para definir esa F(x,v,t) que en mi caso sería un seno. Lo hago de tres variables, o eso sólo me expresa x depende de las otras dos variables??
Otra cosa que no se hacer es para el caso de L2 y L3, el paso de tiempo es h/2, y en el resto es h, entonces no podría hacer un repeat con "t:=t+h" siempre, no??
Como verán estoy bastante perdido, si alguien me puede dar una mano se lo agradezco
|
|
|
|
_________________ In poverta mia lieta scialo da gran signore
rimi ed inni d'amore.
Per sogni e per chimere e per castelli in aria
l'anima ho milionaria
|
|
|
|
|
Gualicho
Nivel 8
Edad: 35
Registrado: 18 Sep 2007
Mensajes: 715
Ubicación: En el templo de Momo...
Carrera: Informática
|
|
Buenas,
Para empezar, tranquilo con el tp... salir termina saliendo, aprovecha cada clase practica que puedas para ir a preguntar las dudas que te vayan surgiendo.
Existe una funcion que te calcula el seno en pascal: sin(X). Aca te dejo un ejemplo de como se usa. Prestale atencion a esto que alguien comenta en ese link:
Cita:
|
Pascal no trabaja con grados, sino con radianes
|
Respecto a lo demas, la verdad que no entiendo muy bien lo que preguntas... despues trato de leer con un poco mas de cuidado el enunciado y lo que escribiste. Por lo pronto te dejo el codigo de una funcion con la cual yo resolvia con R-K 4. Es en otro lenguaje y en otro paradigma, asi que no le prestes mucha atencion a la sintaxis, fijate principalmente los parametros que le paso... vos ademas de estos, tambien le vas a pasar los vectores que vayas a usar adentro de la funcion.
Código:
|
public void resolucionEcDiferencialRK4(int pasoTiempo, double valInicial, int cantidadPasos){
solucion[0]=valInicial;
double q1=0;
double q2=0;
double q3=0;
double q4=0;
for (int i=0;i<cantidadPasos-1;i++){
q1=pasoTiempo*((solucion[i]+this.excedente[i]) / this.respSistema);
q2=pasoTiempo*(((solucion[i]+q1*0.5)+this.excedente[i]) / this.respSistema);
q3=pasoTiempo*(((solucion[i]+q2*0.5)+this.excedente[i]) / this.respSistema);
q4=pasoTiempo*(((solucion[i]+q3)+this.excedente[i]) / this.respSistema);
solucion[i+1]=solucion[i]+ (1.0/6.0)*(q1+2.0*q2+2.0*q3+q4);
}
}
|
Vos vas a programar a la funcion para un paso de tiempo GENERICO.
Saludos, y mucha suerte.
|
|
|
|
_________________ "Por eso te pido (amigo desconocido), si ves a mi rock perdido, lo traigas por aqui!"
|
|
|
|
|
lavo
Nivel 6
Edad: 96
Registrado: 02 Nov 2007
Mensajes: 270
Carrera: Mecánica
|
|
Gualicho escribió:
|
Buenas,
Para empezar, tranquilo con el tp... salir termina saliendo, aprovecha cada clase practica que puedas para ir a preguntar las dudas que te vayan surgiendo.
Existe una funcion que te calcula el seno en pascal: sin(X). Aca te dejo un ejemplo de como se usa. Prestale atencion a esto que alguien comenta en ese link:
Cita:
|
Pascal no trabaja con grados, sino con radianes
|
Respecto a lo demas, la verdad que no entiendo muy bien lo que preguntas... despues trato de leer con un poco mas de cuidado el enunciado y lo que escribiste. Por lo pronto te dejo el codigo de una funcion con la cual yo resolvia con R-K 4. Es en otro lenguaje y en otro paradigma, asi que no le prestes mucha atencion a la sintaxis, fijate principalmente los parametros que le paso... vos ademas de estos, tambien le vas a pasar los vectores que vayas a usar adentro de la funcion.
Código:
|
public void resolucionEcDiferencialRK4(int pasoTiempo, double valInicial, int cantidadPasos){
solucion[0]=valInicial;
double q1=0;
double q2=0;
double q3=0;
double q4=0;
for (int i=0;i<cantidadPasos-1;i++){
q1=pasoTiempo*((solucion[i]+this.excedente[i]) / this.respSistema);
q2=pasoTiempo*(((solucion[i]+q1*0.5)+this.excedente[i]) / this.respSistema);
q3=pasoTiempo*(((solucion[i]+q2*0.5)+this.excedente[i]) / this.respSistema);
q4=pasoTiempo*(((solucion[i]+q3)+this.excedente[i]) / this.respSistema);
solucion[i+1]=solucion[i]+ (1.0/6.0)*(q1+2.0*q2+2.0*q3+q4);
}
}
|
Vos vas a programar a la funcion para un paso de tiempo GENERICO.
Saludos, y mucha suerte.
|
Lo que yo no entiendo es lo que dice en la foto que subí del método RK genérico para una F(x,v,t). Eso no lo puedo entender, porque en mi caso, la F es un seno, entonces cuando programo, no puedo poner
L1:= h*sin(x,v,t), no?? Porque el seno el Pascal lo toma como de una variable sola. Yo lo que no entiendo es la fórmula genérica que subí, es decir, al seno lo tengo que evaluar sólo en mi x, o pongo todo lo demás como me lo indica??
|
|
|
|
_________________ In poverta mia lieta scialo da gran signore
rimi ed inni d'amore.
Per sogni e per chimere e per castelli in aria
l'anima ho milionaria
|
|
|
|
|
Juan José
Nivel 8
Edad: 37
Registrado: 14 Ago 2007
Mensajes: 707
Ubicación: Boulogne
Carrera: Civil
|
|
lavo escribió:
|
Gualicho escribió:
|
Buenas,
Para empezar, tranquilo con el tp... salir termina saliendo, aprovecha cada clase practica que puedas para ir a preguntar las dudas que te vayan surgiendo.
Existe una funcion que te calcula el seno en pascal: sin(X). Aca te dejo un ejemplo de como se usa. Prestale atencion a esto que alguien comenta en ese link:
Cita:
|
Pascal no trabaja con grados, sino con radianes
|
Respecto a lo demas, la verdad que no entiendo muy bien lo que preguntas... despues trato de leer con un poco mas de cuidado el enunciado y lo que escribiste. Por lo pronto te dejo el codigo de una funcion con la cual yo resolvia con R-K 4. Es en otro lenguaje y en otro paradigma, asi que no le prestes mucha atencion a la sintaxis, fijate principalmente los parametros que le paso... vos ademas de estos, tambien le vas a pasar los vectores que vayas a usar adentro de la funcion.
Código:
|
public void resolucionEcDiferencialRK4(int pasoTiempo, double valInicial, int cantidadPasos){
solucion[0]=valInicial;
double q1=0;
double q2=0;
double q3=0;
double q4=0;
for (int i=0;i<cantidadPasos-1;i++){
q1=pasoTiempo*((solucion[i]+this.excedente[i]) / this.respSistema);
q2=pasoTiempo*(((solucion[i]+q1*0.5)+this.excedente[i]) / this.respSistema);
q3=pasoTiempo*(((solucion[i]+q2*0.5)+this.excedente[i]) / this.respSistema);
q4=pasoTiempo*(((solucion[i]+q3)+this.excedente[i]) / this.respSistema);
solucion[i+1]=solucion[i]+ (1.0/6.0)*(q1+2.0*q2+2.0*q3+q4);
}
}
|
Vos vas a programar a la funcion para un paso de tiempo GENERICO.
Saludos, y mucha suerte.
|
Lo que yo no entiendo es lo que dice en la foto que subí del método RK genérico para una F(x,v,t). Eso no lo puedo entender, porque en mi caso, la F es un seno, entonces cuando programo, no puedo poner
L1:= h*sin(x,v,t), no?? Porque el seno el Pascal lo toma como de una variable sola. Yo lo que no entiendo es la fórmula genérica que subí, es decir, al seno lo tengo que evaluar sólo en mi x, o pongo todo lo demás como me lo indica??
|
Claro, es la F evaluada. La idea de hacer eso es para obtener puntos, sin hacerlo de manera genérica. Después graficás con los puntos que obtuviste y de ahí calculás el período (que es el objetivo del ejercicio).
O al menos, así lo entiendo yo.
|
|
|
|
_________________ "No hay mejor fascista que un burgues resentido"
"Hay dos cosas infinitas: el universo y la estupidez. Aunque del Universo no estoy muy seguro" (Albert Einstein).
|
|
|
|
|
lavo
Nivel 6
Edad: 96
Registrado: 02 Nov 2007
Mensajes: 270
Carrera: Mecánica
|
|
Si, pero si fuese la F evaluada solamente en x, entonces, como hago que el tiempo transcurra, por ej en un FOR. O el tiempo lo hago transcurrir sumando h una y otra vez hasta llegar a un valor límite?
La verdad que no entiendo como funciona el método Runge Kutta en realidad...
|
|
|
|
_________________ In poverta mia lieta scialo da gran signore
rimi ed inni d'amore.
Per sogni e per chimere e per castelli in aria
l'anima ho milionaria
|
|
|
|
|
Juan José
Nivel 8
Edad: 37
Registrado: 14 Ago 2007
Mensajes: 707
Ubicación: Boulogne
Carrera: Civil
|
|
lavo escribió:
|
Si, pero si fuese la F evaluada solamente en x, entonces, como hago que el tiempo transcurra, por ej en un FOR. O el tiempo lo hago transcurrir sumando h una y otra vez hasta llegar a un valor límite?
La verdad que no entiendo como funciona el método Runge Kutta en realidad...
|
Creo que vas obteniendo puntos. ¿Cuando parar?, la verdad que no lo se (¿Cómo hiciste el primer ejercicio, cuando lo hiciste parar?).
Supongo que algo te tienen que decir en tu cátedra, en donde estoy yo (Cavaliere) directamente no explicaron el método y dijeron que el criterio de corte quedaba a criterio.
Ah, y creo que te conviene usar un Repeat, comenzando de un valor inicial (y hay que ver cuándo pararlo...) antes que un For.
|
|
|
|
_________________ "No hay mejor fascista que un burgues resentido"
"Hay dos cosas infinitas: el universo y la estupidez. Aunque del Universo no estoy muy seguro" (Albert Einstein).
|
|
|
|
|
Dx9
Moderador
Edad: 37
Registrado: 03 Ene 2007
Mensajes: 1552
Carrera: Informática
|
|
Es dificil este tp? Yo recien lo puedo comenzar a hacer el martes, y ni empeze a ver los temas despues del parcial
|
|
|
|
_________________ Biblioteca Apuntes
|
|
|
|
|
lavo
Nivel 6
Edad: 96
Registrado: 02 Nov 2007
Mensajes: 270
Carrera: Mecánica
|
|
Bue, veo que estamos en la misma...
La primer parte la hice con Romberg a "mano" como se pedía. El criterio de corte lo hice poniendo un error relativo menor al 1%, es decir,
(Ri,j - Ri, j-1)/Ri,j <0.01. Yo medio que me zarpé con el orden de Romberg y me dió un error relativo muy chico, pero no creo que haya problema...
Con respecto al método, en mi cátedra tampoco lo explicaron, asi que no estoy seguro que es lo que se varía, si voy incrementando el h de a poco o si solamente dejo todo como esta y voy haciendo las iteraciones sin tocar el h en cada paso.
Medio confuso todo.... más aún con Cavaliere en la teórica....
|
|
|
|
_________________ In poverta mia lieta scialo da gran signore
rimi ed inni d'amore.
Per sogni e per chimere e per castelli in aria
l'anima ho milionaria
|
|
|
|
|
lavo
Nivel 6
Edad: 96
Registrado: 02 Nov 2007
Mensajes: 270
Carrera: Mecánica
|
|
Dx9 escribió:
|
Es dificil este tp? Yo recien lo puedo comenzar a hacer el martes, y ni empeze a ver los temas despues del parcial
|
Para mi si, bah, soy un desastre programando, pero supongo que para un informatico debe salir con fritas.
PD: vos no te sentaste en el primer banco a la izq el lunes en la teórica???
|
|
|
|
_________________ In poverta mia lieta scialo da gran signore
rimi ed inni d'amore.
Per sogni e per chimere e per castelli in aria
l'anima ho milionaria
|
|
|
|
|
Dx9
Moderador
Edad: 37
Registrado: 03 Ene 2007
Mensajes: 1552
Carrera: Informática
|
|
lavo escribió:
|
PD: vos no te sentaste en el primer banco a la izq el lunes en la teórica???
|
Si, nos conocemos?
|
|
|
|
_________________ Biblioteca Apuntes
|
|
|
|
|
lavo
Nivel 6
Edad: 96
Registrado: 02 Nov 2007
Mensajes: 270
Carrera: Mecánica
|
|
Dx9 escribió:
|
lavo escribió:
|
PD: vos no te sentaste en el primer banco a la izq el lunes en la teórica???
|
Si, nos conocemos?
|
No, pero escuché que habías tomado (en el parcial de Física IIA) el ej. sobre el plano x,y. Y después ví en el foro que comentaste lo mismo, asi que tenía que ser mucha casualidad...
|
|
|
|
_________________ In poverta mia lieta scialo da gran signore
rimi ed inni d'amore.
Per sogni e per chimere e per castelli in aria
l'anima ho milionaria
|
|
|
|
|
yuafan2
Nivel 4
Edad: 36
Registrado: 06 Feb 2007
Mensajes: 69
Ubicación: San Miguel - Bs As.
Carrera: Informática
|
|
Alguien sabe como calcular el error relativo en runge kutta??? encontre q la cota es el valor real - el valor encontrado en modulo, el problema es q es imposible encontrar el valor real para cada tiempo..., y creo q no es la idea tampoco.
|
|
|
|
|
|
|
|
|
Gualicho
Nivel 8
Edad: 35
Registrado: 18 Sep 2007
Mensajes: 715
Ubicación: En el templo de Momo...
Carrera: Informática
|
|
yuafan2 escribió:
|
Alguien sabe como calcular el error relativo en runge kutta??? encontre q la cota es el valor real - el valor encontrado en modulo, el problema es q es imposible encontrar el valor real para cada tiempo..., y creo q no es la idea tampoco.
|
Hola Juan,
Al menos el cuatrimestre pasado, con el tema de los errores eran muy flexibles... No pretendian que usemos una formula en particular, sino que trates de pensar como podias plantear al error.
Una de las cosas que podias hacer es lo siguiente: usas un paso de tiempo muy chico y calculas la solucion. La resta entre esta solucion y la solucion del progrma general te sirve de cota para el error. Si la solucion es un vector, le calculas alguna norma y listo...
mi tp escribió:
|
Para poder calcular el error de discretizacion tendremos que analizar los resultados que obtendríamos si trabajáramos con un paso de tiempo menor. Como tenemos asegurada la convergencia, podemos afirmar que tenemos una cota del error de discretizacion mediante la siguiente formula:
En la formula, α representa al valor exacto (que no podemos calcular), representa al valor obtenido y representa al valor que obtendríamos si hubiéramos trabajado con un paso de tiempo menor.
|
Saludos.
|
|
|
|
_________________ "Por eso te pido (amigo desconocido), si ves a mi rock perdido, lo traigas por aqui!"
|
|
|
|
|
yuafan2
Nivel 4
Edad: 36
Registrado: 06 Feb 2007
Mensajes: 69
Ubicación: San Miguel - Bs As.
Carrera: Informática
|
|
si, pero el problema es q yo necesito una condicion de corte...., no me dicen los pasos, sino que tengo q iterar hasta volver al valor inicial... el problema es q no va a ser exacto..., Yo habia pensado como condicion de corte A+- 1% como corte...., en cuanto entre a ese rango corta,y el error lo calcularia como bien dijiste vos....
Peor no se si estara correcto
|
|
|
|
|
|
|
|
|
Gualicho
Nivel 8
Edad: 35
Registrado: 18 Sep 2007
Mensajes: 715
Ubicación: En el templo de Momo...
Carrera: Informática
|
|
yuafan2 escribió:
|
si, pero el problema es q yo necesito una condicion de corte...., no me dicen los pasos, sino que tengo q iterar hasta volver al valor inicial... el problema es q no va a ser exacto..., Yo habia pensado como condicion de corte A+- 1% como corte...., en cuanto entre a ese rango corta,y el error lo calcularia como bien dijiste vos....
Peor no se si estara correcto
|
Primero que nada, fijate que lo que te escribi yo es para el error absoluto, para calcular el relativo acordate de dividir por el valor representativo.
Usando el procedimiento que te explique en el otro post, tenes que encontrar un paso de tiempo para el cual se cumpla la condicion de un error relativo menor a 1%.
Gracias a esto, , va a estar garantizado que habra un error menor al 1% respecto de la solucion EXACTA.
|
|
|
|
_________________ "Por eso te pido (amigo desconocido), si ves a mi rock perdido, lo traigas por aqui!"
|
|
|
|
|
|
Ir a página 1, 2, 3 Siguiente
|
Ver tema siguiente
Ver tema anterior
Podés publicar nuevos temas en este foro No podés responder a temas en este foro No podés editar tus mensajes en este foro No podés borrar tus mensajes en este foro No podés votar en encuestas en este foro No Podéspostear archivos en este foro No Podés bajar archivos de este foro
|
Todas las horas son ART, ARST (GMT - 3, GMT - 2 Horas)
Protected by CBACK CrackerTracker365 Attacks blocked.
|