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

Обзор

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

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

Предположим, вы хотите найти нуль кубического полинома x3 + <reservedrangesplaceholder1> <reservedrangesplaceholder0>  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);

Похожие темы