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