Matlab - Integracion doble con raices

 
Vista:

Integracion doble con raices

Publicado por Fran (5 intervenciones) el 12/07/2017 23:19:10
Hola buenas llevo todo el día rebanandome los sesos pensando en como solucionar un problema.

Os pongo en situación: Quiero poder resolver (casi cualquier) problema de masa, momentos de inercia y centro de masas EN GENERAL, nada muy complicado por supuesto.

(Solo uso variables x e y, de momento al menos para no complicarme mucho)

Cuando realizo una integral doble sin raíces y sencillita no da problemas, resuelve el problema en 5 segundos y me da todos los resultados, el problema viene cuando es una integral doble con raíces ya que matlab no hace cambio de variable automáticamente y me hace solo la primera integral y me da el resultado como:

int(log(g(x)+log(q(x)+...,x,0,2).

La primera idea que pensé fue en cambiar el orden de integración pero la deseché en seguida por que la ultima integral no debe llevar variables, así que recurrí al plan B:

Pedir una ecuación. Pedir si hace falta o no cambio de variable. Con un if hacer que haga una integral simple si dice que no y si dice que sí hacer por cambio de variable.

El problema viene ahora, para realizar el cambio de variable hay que hacerlo de forma manual es decir Sqrt(4-x^2) cambiar x por 2*sin(a) y así en cualquier caso distinto, por el contrario usando jacobiano tendría que pedir los puntos de corte nuevos y preferiría que fuera lo mas automatizado posible.

Sería de gran ayuda algún aporte sobre algo que se me haya pasado. ^.^
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 JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Integracion doble con raices

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 12/07/2017 23:36:29
si deseas resolver ejercicios con cualquier ecuación EN GENERAL te recomiendo entonces que uses métodos numéricos para que obtengas respuestas numéricas muy eficaces, porque hay ecuaciones que analíticamente son difíciles de resolver, si deseas hacer el cambio de variable que mencionas debes convertir tu variable simbólica a string detectar donde está la raíz o cualquier tipo de potenciación , así detectar que tipo de sustitución trigonométrica es, si es seno si es tangente o si es secante y eso solo hablando de que tengas estos tipos de sustitución porque puedes tener otros métodos como integración por partes, otros cambio de variables, etc, y los métodos numéricos obtienen respuestas con muchas cifras significativas suficientes para el problema


saludos
https://www.facebook.com/royethmatlab/
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

Integracion doble con raices

Publicado por Fran (5 intervenciones) el 13/07/2017 18:11:26
Estoy en primero de carrera y no he cursado medio cuatrimestre de matlab de optativa y el profesor apenas sabia explicar, de hecho ni hemos visto integrales hemos hecho más enfocado a la estadística con interpolación y demás. Me lo he estado mirando en mathematicas que si lo he visto durante todo el año durante las prácticas de mates I pero el problema es que no puedes hacer un programa, simplemente es como una calculadora que pones la integral y los datos y te lo hace todo por lo que he visto. Pero a mi me gustaría hacerlo de manera lo mas automática posible. Mi objetivo es que la gente que este empezando a hacer integrales enfocadas a la física como masa, momentos de inercia, etc, pueda poner los datos del problema (en general) y le de el resultado. He empezado con esto pero me gustaría hacerlo con la mayoría de los problemas tanto de física como de mates que tenga en la UNI.

Ya te digo que no quiero hacer un programa que los resuelva TODOS y que sea totalmente automático pero si que pueda resolver la mayoría.

A lo que iba (que me enrollo xD) te paso el código que llevo de momento por que no se a que te refieres con numéricas (supongo que te referirás a que los limites de integración sean valores numéricos sólo, pero entonces no podría resolver casi ningún problema que te he comentado anteriormente)

No lo he acabado y lo tengo por partes para saber si cada parte esta bien diseñada.

%Integracion
fprintf('Vamos a calcular: La masa, el momento de inercia y el centro de masas\n\n')
syms x y k z radio alfa
den=input('define la densidad(x,y): ');
%hace falta cambio de variable?
z=input('Hace falta cambio de variable?\nSI=1\nNO=0\nRespuesta:')
if z=0
a=input('desde(x): ');
b=input('hasta(x): ');
c=input('desde(y): ');
d=input('hasta(y): ');
%En este caso los limites son numéricos por ejemplo y el matlab calcula perfectamente la doble integral
sol=int(int(den,y,c,d),x,a,b);
fprintf('La masa es: %f',sol)
end
if z=1
a=input('desde(x): ');
b=input('hasta(x): ');
c=input('desde(y): ');
d=input('hasta(y): ');
k=input('define k (escriba k para dejarla como variable): ');
x=radio*cos(alfa);
y=radio*sin(alfa);
s=jacobian([radio*cos(x), radio*sin(x)], [radio,x]);
jac=abs(det(s));
int(int(k*den*jac,x,a,b),y,c,d)
end

De momento esto es lo que tengo a falta de retoques y solucionar los fallos.

PD: Me he basado un poco en como usábamos el dev C++ a la hora de programar, e incluso había pensado en poner las funciones proporcionan los limites de integración y encontrar los puntos de corte pero solo he conseguido pedir las funciones (creo que hay que dejar pensar un poco al que use el programa xD)

%Volumen acotado
fprintf('Vamos a calcular: El Volumen\n\n')
syms x y
A=1;B=0;C=0;
fprintf('Vamos a definir la base\n(Defina las rectas o curvas (x,y) que delimitan la base, pulsa 0 para dejar de definir\n\n')
while(B<10)
test=input('defina base: ');
if test~=0
eval(sprintf('F%d=test',A));
A=A+1;
end
if test==0
break
end

Con esto me guardaba las funciones en F1,F2, etc pero no se como encontrar los puntos de corte.
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

Integracion doble con raices

Publicado por Fran (5 intervenciones) el 13/07/2017 18:29:32
1
2
3
4
5
6
7
8
9
10
11
12
a=input('desde(Radio): ');
b=input('hasta(Radio): ');
c=input('desde(Alfa): ');
d=input('hasta(Alfa): ');
k=input('define k (escriba k para dejarla como variable): ');
x=radio*cos(alfa);
y=radio*sin(alfa);
s=jacobian([radio*cos(alfa), radio*sin(alfa)], [radio,alfa]);
jac=abs(det(s));
jac2=simplify(jac);
masa=int(int(k*F*jac2,radio,a,b),alfa,c,d);
fprintf('La masa es: %f',masa)

El problema es que solo sirve para simetría cilíndrica, esférica o circular, por lo que yo se.

"debes convertir tu variable simbólica a string detectar donde está la raíz o cualquier tipo de potenciación , así detectar que tipo de sustitución trigonométrica es" me interesaría que me explicaras esta parte si pudieras, creo que con lo que has dicho sería mucho más fácil resolver las integrales.
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
Imágen de perfil de JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Integracion doble con raices

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 13/07/2017 22:12:28
eso lo coloqué por los cambios de variables que hacen que las integrales reduzcan su complejidad con el uso de identidades trigonométricas, por ejemplo cuando tienes un denominador 1 / (1+x^2) un cambio de variable de x=tangente (teta) haría que el denominador se convirtiera en secante cuadrado de teta y el dx en secante cuadrado de teta por lo que la integral se transforma en la integral de 1 con respecto a un dteta que es tu nueva variable y esto hace que ejercicios complejos sean transformados en formas menos complejas o directamente fáciles de resolver entonces por esa razón te expuse el tema, pero el problema es que para esto debes tener algo de conocimiento de cálculo integral, y diferencial, en fin, si lo que deseas es resolver integrales de manera simbólica entonces esto te ayudará en los casos que el programa no te esté dando una respuesta explícita.

Te voy a colocar un ejemplo bien bestial :

integral

la Integral de la izquierda es complicada, si la colocas en matlab no te la resuelve explícitamente, en cambio si ingresas la segunda que obtuve producto de un cambio de variable trigonométrico (teta=atan(x)) te da una respuesta explícita :

1
2
3
4
5
syms x teta
I1=x*exp(atan(x))/(1+x^2)^(3/2);
I2=exp(teta)*sin(teta);
R1=int(I1) %respuesta no explícita
R2=int(I2) %respuesta explícita 


R1 =

int((x*exp(atan(x)))/(x^2 + 1)^(3/2), x)


R2 =

-(exp(teta)*(cos(teta) - sin(teta)))/2



y para comprobarte que son lo mismo la podemos evaluar en algún intervalo y en cifras significativas de una calculadora es lo mismo :


1
2
valor1=vpa(int(I1,2,5))
valor2=vpa(int(I2,atan(2),atan(5)))%recordando que teta=atan(x)

ans =

0.87225848543688


ans =

0.87225848543688



entonces la idea es que un programa que resuelva Integrales de forma simbólica debe reconocer automáticamente algún tipo de cambio de variable o simplificación que le facilite el proceso para darte una respuesta explícita, a eso era lo que me refería

Un saludo
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

Integracion doble con raices

Publicado por Fran (5 intervenciones) el 14/07/2017 18:43:13
Si eso ya lo sabia, me refería a como implementar en matlab algún comando en el que reconozca las función y que encuentra una forma de simplificarla con nuevas variables, lo malo de esto es que tendría que encontrar los nuevos limites de integración.

Existe alguna forma de que todo esto lo haga el propio matlab y que no haya que hacerlo de manera manual todo?


(ten en cuenta que no puedo hacer un programa que solo haga la sustitucion de una determinada función sólo, ya que la estoy pidiendo al principio del programa, y sería raro que coincidieran.

Podría hacerlo simple y obligar al que pone los datos a hacer el cambio de variable y los limites de integración el mismo pero entonces o tendría gracia el programa.

Lo que no comprendo es como una simple pagina web como symbolab puede realizar todo este tipo de compresiones en 10 segundos y realizarte integrales mucho mas complicadas (de forma explícita me refiero) (la mayoria de las veces xD) y el propio matlab te lo deje de forma implícita.
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
Imágen de perfil de JESUS DAVID ARIZA ROYETH
Val: 3.309
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Integracion doble con raices

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 15/07/2017 00:50:38
Matlab está más enfocado al Cálculo Numérico, Al procesamiento de señales Digitales como audios, vídeos, imágenes, análisis estadístico, es un gran software para el desarrollo de Inteligencia Artificial que incluye Redes Neuronales, Clasificación, Clustering, Algoritmos Genéticos, Lógica difusa, muy utilizado en Bioinformática, puedes analizar un genoma y hasta simular proteínas, puedes diseñar sistemas de control reales y conectarlos para mantener procesos y plantas industriales controladas , tiene herramientas de análisis financiero , simulaciones en 3d , simuladores de moléculas en biología , herramientas creadoras de software, herramienta de optimización para resolver problemas numéricos complejos , tiene herramientas para la Ingeniería Telemática y una gran cantidad de aplicaciones en álgebra lineal tiene un potencial numérico para trabajar con matrices de dimensiones muy grandes, etc etc etc

Entonces la gran mayoría de lo que escribí aquí y de lo que me faltó seguramente no requiere de resolver algo de forma analítica sino tener un gran potencial en cálculo numérico y muchas herramientas de análisis de datos que sirvan para resolver problemas prácticos, que pueda resolver problemas analíticos en el ámbito académico yo lo consideraría un Extra, de hecho este cálculo simbólico es realmente realizado por un software que se llama MUPAD no lo hace el propio MATLAB

entonces la página que mencionas está enfocada a eso, seguramente tiene un servidor que ha sido desarrollado y en constante mejoramiento para resolver estos problemas comúnmente del ámbito académico, por eso acá no hay un comando automático, si deseas desarrollarlo entonces debes implementar tus propios métodos de simplificación
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar

Integracion doble con raices

Publicado por Fran (5 intervenciones) el 15/07/2017 12:58:23
Bueno saberlo, gracias por todo de todas formas ^.^

Si me surge algun otro problema ya se donde preguntar
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