Оценка частичной функции в MATLAB - PullRequest
20 голосов
/ 06 февраля 2012

Существует ли идиоматический способ связывания переменных в функции 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

Ответы [ 2 ]

22 голосов
/ 06 февраля 2012

Вы можете сделать это так:

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

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

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

0 голосов
/ 06 февраля 2012

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...