2015-11-07 7 views
2

В чем разница между использованием symfun и анонимной функцией в Matlab? Какой из них лучше, т.е. быстрее? Похоже, я могу использовать как символические, так и реальные числа.matlab symfun против анонимной функции

Here обсуждают разницу между встроенными и анонимными функциями, но не упоминают symfun.

ответ

4

Основные функциональные возможности MATLAB предназначены для численных расчетов, то есть для работы с числами с плавающей запятой. По умолчанию переменные и функции MATLAB являются числовыми, и поэтому в вашем связанном обсуждении сравниваются только встроенные и анонимные функции.

Однако, используя Symbolic Math Toolbox, можно использовать символические выражения и функции. Это может быть очень полезно для решения математических задач, таких как точное дифференцирование, интеграция, работа с арифметикой произвольной точности или решение уравнений. Тем не менее, символический движок спроектирован так, чтобы быть умным, а не быть быстрым (в конце концов, рано или поздно символический движок должен выполнить оценку функции, но MATLAB был , разработанный, чтобы быть эффективным с численными проблемами). Когда это возможно, следует предпочесть численные функции MATLAB, особенно те, которые часто могут быть расширены для работы в векторном виде, по массивам, чтобы обеспечить выход массива.

При столкновении смешанной задачи (нуждаясь символической математика, но и вычисление дорогой оценка результатов), это может быть наиболее практичной, чтобы решить вашу исходную задачу в параметрическом (символическом) способе раз, а затем использовать очень последний результат, превратив его в соответствующую числовую функцию. Вы должны посмотреть на функцию matlabFunction Symbolic Math Toolbox, которая выполняет именно это и работает достаточно хорошо для разумно масштабированных функций (но here's - контрпример).

Обратите внимание, что хотя вы можете определить анонимную функцию с помощью формулы, как в [email protected](x) 3*x^2-2, это фактически определит числовую функцию, которая возвращает значение для заданных числовых входов, например f(3). Если у вас есть формула в вашей руке, которую вы хотите вычислить, всегда используйте числовую функцию. Символическая математика должна быть зарезервирована для случаев, которые не могут быть решены точно с помощью основных численных признаков, таких как вычисление точного градиента многомерного скалярного поля.

+0

Отлично, спасибо! Еще одна вещь, что анонимные функции могут использоваться и для символических выражений, например, 'f (a)' дает '3 * a^2 - 2', поэтому он не является чисто цифровым, не так ли? Или почему? – vakker

+0

@vakker, для которого вы должны определить 'a' как переменную' sym'. Тогда выполнение '3 * a^2 - 2' будет иметь смысл как символическое выражение. В этом смысле, да, вы можете определить символическую функцию. Но это не настоящие символические функции в смысле 'symfun'. Рассмотрим функцию 'f (x, y) = a * x + b * y', содержащую 2 символьных параметра и 2 символьных входных переменных. Вы можете определить его как 'f1 = symfun (a * x + b * y, [x, y])', и вы можете создать что-то подобное, используя 'f2 = @ (x, y) a * x + b * y' , На первый взгляд они будут одинаковыми, но 'argnames (f1)' будет давать '[x, y]', а для другого это вызывает ошибку. –

+0

Я вижу. Спасибо за разъяснения. – vakker