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