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

Обзор

Эта тема объясняет, как сохранить или получить доступ к дополнительным параметрам для математических функций, которые вы передаете функциям функции 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);

Похожие темы

Была ли эта тема полезной?