Параметризация функций

Обзор

Эта тема объясняет, как сохранить или получить доступ к дополнительным параметрам для математических функций, которые вы передаете MATLAB® function functions, такому как fzero или integral.

Функции функции MATLAB выполняют математические выражения в области значений значений. Они вызваны функциональные функции, потому что они - функции, которые принимают указатель на функцию (указатель на функцию) как вход. Каждая из этих функций ожидает, что ваша целевая функция имеет определенное количество входных переменных. Например, fzero и integral примите указатели на функции, которые имеют точно одну входную переменную.

Предположим, что вы хотите найти нуль кубического полинома x 3 + bx + c для различных значений коэффициентов b и c. Несмотря на то, что вы могли создать функцию, которая принимает три входных переменные (x, b и c), вы не можете передать указатель на функцию, который требует всех трех из тех входных параметров к fzero. Однако можно использовать в своих интересах свойства анонимных или вложенных функций задать значения для дополнительных входных параметров.

Параметризация Используя вложенные функции

Один подход для определения параметров должен использовать nested function — функция, полностью содержавшаяся в другой функции в программном файле. В данном примере создайте файл с именем 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

Параметризация Используя анонимные функции

Другой подход для доступа к дополнительным параметрам должен использовать anonymous function. Анонимные функции являются функциями, которые можно задать в одной команде, не создавая отдельный программный файл. Они могут использовать любые переменные, которые доступны в текущей рабочей области.

Например, создайте указатель на анонимную функцию, которая определяет кубический многочлен, и найдите нуль:

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

Похожие темы