exponenta event banner

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

Обзор

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

Связанные темы