Оценка частичной функции в MATLAB - программирование
Подтвердить что ты не робот

Оценка частичной функции в MATLAB

Существует ли идиоматический способ привязки переменных в функции MATLAB? Похоже, что было бы довольно часто создавать функцию, связывать несколько аргументов, а затем передавать новую функцию в какой-то оптимизатор (в моем случае - решатель Ньютона). Это не похоже на то, что правила переменной видимости допускают решение с вложенными или встроенными функциями. Должен ли я просто создать класс? Кажется, MATLAB не имеет первоклассных объектов функции, это правильно? Мой поиск кунг-фу близок. Спасибо!

В качестве примера предположим, что я хочу найти корни f (c, x) = x ^ 3 + cx ^ 2 + 2x + 3 при различных значениях параметра c. У меня есть метод решения Ньютона, который выполняет функцию одной переменной, а не двух. Поэтому я перебираю различные значения c, а затем передаю связанную функцию решателю.

for c=1:10
  g=f(c); % somehow bind value of c
  seed=1.1; % my guess for the root of the equation
  root=newton(g,seed); % compute the actual root
end
4b9b3361

Ответ 1

Вы можете сделать это следующим образом:

f = @(c,x)( @(x)(x^3+c*x^2+2*x+3) );

for c=1:10
    g=f(c); % g is @(x)(x^3+c*x^2+2*x+3) for that c
    ....
end

Ключ - это первая строка: это функция, которая возвращает функцию.

I.e., он возвращает @(x)(x^3+c*x^2+2*x+3) со значением c, связанным в.

Ответ 2

Я уверен, что вложенную функцию можно использовать с fminsearch. Я не знаю конкретно о методе Ньютонов, но я предполагаю, что проблем нет.