Как я могу сделать функцию из символического выражения? Например, у меня есть следующее:
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
и такие вложенные выражения?
У вас есть пара опций...
Если у вас есть версия 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)
Так как Вы уже написали набор символьных уравнений, Вы можете просто вырезать и вставить часть этого кода в функцию. Вот как будет выглядеть Ваш приведенный выше пример:
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');
Если Вас интересует только ответ на это конкретное уравнение, попробуйте Wolfram Alpha, который даст Вам такие ответы, как:
Если Вы хотите решить этот тип уравнения программно, Вам, вероятно, необходимо использовать некоторые пакеты программ для символической алгебры, например, 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}
Кто-то пометил этот вопрос с MATLAB, поэтому я предполагаю, что вас связаны с решением уравнения с MatLab. Если у вас есть копия символического инструментального ящика MATLAB, вы сможете решить его напрямую, так как предложил предыдущий респондент.
Если нет, то я предлагаю вам написать MATLAB M-файл для оценки вашей функции f (). Псевдо-код, который вы уже написаны, переведут почти непосредственно в строки MATLAB. Поскольку я прочитал, ваша функция f () - это функция только из вариабельной бета-версии, поскольку указываете, что N1, N2, M и A - все константы. Я предлагаю вам построить значения F (бета) для ряда значений. График будет указывать, где 0s функции, и вы можете легко сменить пережижение или аналогичный алгоритм, чтобы дать вам свои значения в нужную степень точности.