Как я делаю функцию из символического выражения в MATLAB?

Как я могу сделать функцию из символического выражения? Например, у меня есть следующее:

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

Если я хочу использовать f в специальной программе, чтобы найти ее ноли, как я могу преобразовать f к функции? Или, что я должен сделать, чтобы найти ноли f и такие вложенные выражения?

7
задан Alireza 3 January 2010 в 19:50
поделиться

3 ответа

У вас есть пара опций...

Опция #1: Автоматическая генерация функции

Если у вас есть версия 4.9 (R2007b+) или более поздняя из Symbolic Toolbox, вы можете преобразовать символическое выражение в анонимную функцию или функцию M-файла, используя функцию matlabFunction . Пример из документации:

>> 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)

Вариант #2: Generate a function by hand

Так как Вы уже написали набор символьных уравнений, Вы можете просто вырезать и вставить часть этого кода в функцию. Вот как будет выглядеть Ваш приведенный выше пример:

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

При вызове этой функции f Вы должны ввести значения beta и 4 константы, и она вернёт результат вычисления Вашего основного выражения.


ПРИМЕЧАНИЕ: Поскольку Вы также упомянули, что хотите найти нули f, Вы можете попробовать использовать функцию SOLVE в символическом уравнении:

zeroValues = solve(f,'beta');
11
ответ дан 6 December 2019 в 23:06
поделиться

Если Вас интересует только ответ на это конкретное уравнение, попробуйте Wolfram Alpha, который даст Вам такие ответы, как:

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

Если Вы хотите решить этот тип уравнения программно, Вам, вероятно, необходимо использовать некоторые пакеты программ для символической алгебры, например, SymPy для питона.

цитируя официальную документацию:

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

Решить уравнение многочленов:

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

Решить линейную систему:

>>> solve((x+5*y-2, -3*x+6*y-15), x, y)
{x: -3, y: 1}
-1
ответ дан 6 December 2019 в 23:06
поделиться

Кто-то пометил этот вопрос с MATLAB, поэтому я предполагаю, что вас связаны с решением уравнения с MatLab. Если у вас есть копия символического инструментального ящика MATLAB, вы сможете решить его напрямую, так как предложил предыдущий респондент.

Если нет, то я предлагаю вам написать MATLAB M-файл для оценки вашей функции f (). Псевдо-код, который вы уже написаны, переведут почти непосредственно в строки MATLAB. Поскольку я прочитал, ваша функция f () - это функция только из вариабельной бета-версии, поскольку указываете, что N1, N2, M и A - все константы. Я предлагаю вам построить значения F (бета) для ряда значений. График будет указывать, где 0s функции, и вы можете легко сменить пережижение или аналогичный алгоритм, чтобы дать вам свои значения в нужную степень точности.

1
ответ дан 6 December 2019 в 23:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: