Question

Comment puis-je faire fonction d'une expression symbolique? Par exemple, je donne les résultats suivants:

syms beta
n1,n2,m,aa= Constants
u = sqrt(n2-beta^2);
w = sqrt(beta^2-n1);
a = tan(u)/w+tanh(w)/u;
b = tanh(u)/w;
f = (a+b)*cos(aa*u+m*pi)+a-b*sin(aa*u+m*pi);  %# The main expression

Si je veux utiliser f dans un programme spécial pour trouver ses zéros, comment puis-je convertir f à une fonction? Ou, que dois-je faire pour trouver les zéros de f et ces expressions imbriquées?

Était-ce utile?

La solution

Vous avez deux options ...

Option 1: Générer automatiquement une fonction

Si vous avez version 4.9 (version 2007b +) ou plus tard du Boîte à outils symbolique vous pouvez convertir une expression symbolique à une fonction anonyme ou un fichier de M-fonction en utilisant le matlabFunction fonction. Un exemple de la documentation:

>> syms x y
>> r = sqrt(x^2 + y^2);
>> ht = matlabFunction(sin(r)/r)

ht = 

     @(x,y)sin(sqrt(x.^2+y.^2)).*1./sqrt(x.^2+y.^2)

Option n ° 2: Générer une fonction main

Puisque vous avez déjà écrit un ensemble d'équations symboliques, vous pouvez simplement couper et coller une partie de ce code dans une fonction. Voici ce que votre exemple ci-dessus ressemblerait à ceci:

function output = f(beta,n1,n2,m,aa)
  u = sqrt(n2-beta.^2);
  w = sqrt(beta.^2-n1);
  a = tan(u)./w+tanh(w)./u;
  b = tanh(u)./w;
  output = (a+b).*cos(aa.*u+m.*pi)+(a-b).*sin(aa.*u+m.*pi);
end

Lorsque vous appelez cette fonction f vous devez saisir les valeurs de beta et les 4 constantes et il renvoie le résultat de l'évaluation de votre expression principale.


Remarque: Puisque vous avez mentionné vouloir trouver des zéros de f, vous pouvez essayer d'utiliser la balise RÉSOUDRE fonction de votre équation symbolique:

zeroValues = solve(f,'beta');

Autres conseils

Quelqu'un a marqué cette question avec Matlab donc je suppose que vous êtes concernés par la résolution de l'équation avec Matlab. Si vous avez une copie de la boîte à outils symbolique Matlab vous devriez être en mesure de le résoudre directement comme répondant précédent a suggéré.

Dans le cas contraire, je vous suggère d'écrire un m-fichier Matlab pour évaluer votre fonction f (). Le pseudo-code que vous êtes déjà écrit traduira presque directement dans les lignes de Matlab. Comme je l'ai lu votre fonction f () est une fonction uniquement de la bêta variables puisque vous indiquez que n1, n2, m et sont toutes les constantes. Je vous suggère de tracer les valeurs de f (bêta) pour une plage de valeurs. Le graphique indique où les 0s de la fonction sont et vous pouvez coder facilement un algorithme de bissection ou similaire à vous donner leurs valeurs à votre degré de précision souhaité.

Si vous l'intention générale est d'avoir des valeurs numériques de certaines expressions symboliques que vous avez, par exemple, vous avez un programme plus vaste qui génère des expressions symboliques et que vous voulez utiliser ces expressions à des fins numériques, vous pouvez simplement les évaluer en utilisant eval ». Si leurs paramètres ont des valeurs numériques dans l'espace de travail, il suffit d'utiliser eval sur votre expression. Par exemple,

syms beta
%n1,n2,m,aa= Constants
% values to exemplify
n1 = 1; n2 = 3; m = 1; aa = 5;
u = sqrt(n2-beta^2);
w = sqrt(beta^2-n1);
a = tan(u)/w+tanh(w)/u;
b = tanh(u)/w;
f = (a+b)*cos(aa*u+m*pi)+a-b*sin(aa*u+m*pi);  %# The main expression

Si beta a une valeur

beta = 1.5;
eval(beta)

calcule la valeur de f pour un beta particulier. Son utilisation en fonction. Cette solution vous convient dans le scénario d'utiliser automatiquement générés expressions symboliques et intéressant pour les tests rapides avec eux. Si vous écrivez un programme pour trouver des zéros, il suffira à l'aide eval(f) lorsque vous devez évaluer la fonction. Lorsque vous utilisez une fonction Matlab pour trouver des zéros en utilisant la fonction anonyme sera mieux, mais vous pouvez aussi envelopper la eval(f) dans un m-fichier.

Si vous êtes intéressé avec juste la réponse à cette équation spécifique, essayez Wolfram Alpha , qui vous donnera des réponses comme:

texte alt http://www4c.wolframalpha.com / Calculer / MSP / MSP642199013hbefb463a9000051gi6f4heeebfa7f? MSPStoreType = image / gif & s = 15

Si vous voulez résoudre ce type d'équation programatically, vous avez probablement besoin d'utiliser certains logiciels pour l'algèbre symbolique, comme sympy python.

la documentation officielle :

>>> from sympy import I, solve
>>> from sympy.abc import x, y

Résoudre une équation polynomiale:

>>> solve(x**4-1, x)
[1, -1, -I, I]

résoudre un système linéaire:

>>> solve((x+5*y-2, -3*x+6*y-15), x, y)
{x: -3, y: 1}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top