Matlab - Problema con integrales simbólicas y el comando Inline

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

Problema con integrales simbólicas y el comando Inline

Publicado por Christian (1 intervención) el 08/04/2021 16:06:10
Hola quisiera pedir ayuda sobre un problema que tengo, estoy desarrollando una guide para el calculo de varios parámetros de una función vectorial, entre ellos se encuentra la longitud de arco de una función vectorial, el calculo de estos valores se logra por medio de derivadas e integrales.
La función que introduce el usuario se obtiene desde el guide en forma de string, hice una función que calcula la longitud de arco llamada LongA la cual tiene la sintaxis de [Ec,L = LongA(I,J,K,A,B) donde:

Ec = Devuelve en string la función(ecuación) correspondiente para conocer la longitud de arco de un rango [b a]
L = Devuelve en string el valor de la longitud de arco de un rango dado por el usuario

I, J, K = Corresponden a las componentes de la función vectorial
A, B = Es el limite que quiere calcular el usuario

Necesito que esta función que me entregue la ecuación y el valor tal y como se muestra en la imagen:
GUI

El tema está en que por ejemplo en esa función [t.*sin(t), t.*cos(t), t.^2] todo funciona correctamente y se grafica sin problemas, pero cuando coloco una ecuación que contenga alguna exponencial, tal como aquí:

exp
Aparece un error que me impide seguir con la ejecución.

Hay una parte en la función en donde evaluó la ultima integral con ayuda del comando inline para la función que no me da problemas queda así:

sin

y para la función que contiene la exponencial queda de esta manera:

Error

Entiendo que el error consiste en que la función inline me pide tres parámetros y solo le paso dos, pero en el primer ejemplo la función inline ya me crea la función después de que la integra por eso es que solo me pide dos argumentos los cuales corresponden a los limites de evaluación para la integral, y en el segundo caso crea la función pero no realiza la integral y por eso es que me crea 3 parámetros.

Para conseguir la ultima integral realizo los cálculos correspondientes con variables simbólicas, me imagino que por ahí esta el error, ya que no se como evaluar la función que obtengo si no es con el comando inline, me gustaría que me pudieran apoyar con este problema y ver la manera de hacerlo de otra forma de modo que la guide trabaje correctamente con cualquier función que introduzca el usuario.

Les dejo la función que realiza todos los cálculos, si me quisieran ayudar y probar la función pueden sustituir los valores de I, J, K con funciones, y a las variables A y B con valores numéricos pero en forma de String, ya que la función se encarga de la conversión correspondiente ya que se obtienen en tipo String de la guide.
El condicional que se ve ahí es por que ocupo la función dos veces, la primera para calcular la ecuación de cualquier rango sin importar si el usuario a introducido o no los valores de los limites y la segunda ya evalúa los limites si esta marcada el checkbox correspondiente.

Las salidas también las convierte a string para que las muestre en el guide.

Cabe destacar que la ecuación para el calculo de la longitud de arco es: integral de b hasta a de: modulo de la primer derivada de la funcion vectorial respecto a t

integral de b hasta a de (sqrt((df/dt).^2 + (dg/dt).^2 + (dh/dt).^2)dt

Si no hay una forma para corregir el error, también estaría bien que el programa pudiera detectar cuando hay un error y se salte esa parte del código para que siga con los otros cálculos y ya simplemente mostraría que no se puede obtener la longitud de arco.

Muchas gracias.

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
function [Ec,L] = LongA(I,J,K,A,B)
    syms t a b
 
    x=str2sym(I);
    y=str2sym(J);
    z=str2sym(K);
 
    Dx=diff(str2sym(I));
    Dy=diff(str2sym(J));
    Dz=diff(str2sym(K));
 
    D2x=expand(Dx.^2);
    D2y=expand(Dy.^2);
    D2z=expand(Dz.^2);
 
    Sum=simplify(D2x+D2y+D2z);
    Mod=simplify(expand(sqrt(Sum)));
    Ec=char(simplify(int(Mod,b,a)));
 
    if size(A,2)==0 || size(B,2)==0
        L='Null';
    else
        ec=int(Mod,[b a]); %Linea funcional con ambos limites incluidos pero error en exp
 
        l=inline(ec)
        a=subs(str2sym(A)); %lineas funcionales
        b=subs(str2sym(B));
 
        L=strcat('[',char(abs(vpa(l(b,a)))),'] u');%linea funcional
    end
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