Matlab Symfun против анонимной функции
В чем разница между использованием symfun и анонимной функции в Matlab? Какой из них лучше, т.е. быстрее? Кажется, я могу использовать как для символических, так и для реальных чисел.
Здесь они обсуждают разницу между встроенными и анонимными функциями, но не упоминают symfun.
1 ответ
Базовая функциональность MATLAB предназначена для численных расчетов, т.е. работы с числами с плавающей запятой. По умолчанию переменные и функции MATLAB являются числовыми, поэтому в вашем связанном обсуждении сравниваются только встроенные и анонимные функции.
Однако, используя Symbolic Math Toolbox, можно использовать символические выражения и функции. Это может быть очень полезно для решения математических задач, таких как точное дифференцирование, интегрирование, работа с арифметикой произвольной точности или решение уравнений. Тем не менее, символьный движок разработан для того, чтобы быть умным, а не быстрым (в конце концов, рано или поздно символический движок должен выполнить оценку функции, но MATLAB был разработан, чтобы быть эффективным с числовыми проблемами). Когда бы ни было возможно, следует отдавать предпочтение числовым функциям MATLAB, особенно те, которые часто могут быть расширены для работы в векторизованном виде вдоль входов массива для обеспечения вывода массива.
Когда сталкиваешься со смешанной проблемой (требующей символической математики, но также требующей больших затрат на вычисление результатов), может оказаться наиболее практичным один раз решить исходную задачу параметрическим (символическим) способом, а затем использовать самый последний результат, повернув его в соответствующую числовую функцию. Вы должны взглянуть на matlabFunction
функция Symbolic Math Toolbox, которая выполняет именно это и довольно хорошо работает для разумно масштабируемых функций (но вот контрпример).
Обратите внимание, что хотя вы можете определить анонимную функцию с помощью формулы, как в f=@(x) 3*x^2-2
это фактически определит числовую функцию, которая возвращает значение для заданных числовых входов, таких как f(3)
, Если у вас в руке есть формула, которую вы хотите вычислить, всегда используйте числовую функцию. Символическая математика должна быть зарезервирована для случаев, которые не могут быть точно решены с помощью базовых числовых функций, таких как вычисление точного градиента многомерного скалярного поля.