В этом разделе объясняется, как сохранить или получить доступ к дополнительным параметрам математических функций, передаваемых функциональным функциям MATLAB ®, таким как fzero или integral.
Функции функции MATLAB оценивают математические выражения в диапазоне значений. Они называются функциональными функциями, поскольку являются функциями, принимающими дескриптор функции (указатель на функцию) в качестве входных данных. Каждая из этих функций ожидает, что целевая функция имеет определенное количество входных переменных. Например, fzero и integral принимать дескрипторы к функциям, имеющим только одну входную переменную.
Предположим, вы хотите найти ноль кубического многочлена x3 + основной обмен + c для различных значений коэффициентов b и C. Хотя вы можете создать функцию, которая принимает три входные переменные (x, b и c), вы не можете передать дескриптор функции, который требует, чтобы все три из этих входных значений fzero. Однако для определения значений дополнительных входных данных можно воспользоваться свойствами анонимных или вложенных функций.
Одним из подходов для определения параметров является использование вложенной функции - функции, полностью содержащейся в другой функции в файле программы. Для этого примера создайте файл с именемfindzero.m который содержит родительскую функцию findzero и вложенная функция poly:
function y = findzero(b,c,x0) y = fzero(@poly,x0); function y = poly(x) y = x^3 + b*x + c; end end
Вложенная функция определяет кубический многочлен с одной входной переменной, x. Родительская функция принимает параметры b и c в качестве входных значений. Причина гнездиться poly в findzero - вложенные функции совместно используют рабочую область родительских функций. Следовательно, poly функция может обращаться к значениям b и c которые вы передаете findzero.
Чтобы найти ноль многочлена с b = 2 и c = 3.5, используя начальную точку x0 = 0, вы можете позвонить findzero из командной строки:
x = findzero(2,3.5,0)
x = -1.0945
Другой подход к доступу к дополнительным параметрам заключается в использовании анонимной функции. Анонимные функции - это функции, которые можно определить в одной команде без создания отдельного файла программы. Они могут использовать любые переменные, доступные в текущей рабочей области.
Например, создайте дескриптор анонимной функции, описывающей кубический многочлен, и найдите ноль:
b = 2; c = 3.5; cubicpoly = @(x) x^3 + b*x + c; x = fzero(cubicpoly,0)
x = -1.0945
Переменная cubicpoly - дескриптор функции для анонимной функции, имеющей один вход, x. Входные данные для анонимных функций появляются в скобках сразу после @ символ, создающий дескриптор функции. Поскольку b и c находятся в рабочем пространстве при создании cubicpolyанонимная функция не требует входных данных для этих коэффициентов.
Создавать промежуточную переменную не требуется, cubicpoly, для анонимной функции. Вместо этого можно включить все определение дескриптора функции в вызов fzero:
b = 2; c = 3.5; x = fzero(@(x) x^3 + b*x + c,0)
x = -1.0945
Можно также использовать анонимные функции для вызова более сложных объективных функций, определенных в файле функций. Например, предположим, что у вас есть файл с именем cubicpoly.m с этим определением функции:
function y = cubicpoly(x,b,c) y = x^3 + b*x + c; end
В командной строке определите b и c, а затем позвоните fzero с анонимной функцией, вызывающей cubicpoly:
b = 2; c = 3.5; x = fzero(@(x) cubicpoly(x,b,c),0)
x = -1.0945
Примечание
Для изменения значений параметров необходимо создать новую анонимную функцию. Например:
b = 10; c = 25; x = fzero(@(x) x^3 + b*x + c,0);