Использование ошибки fminsearch - PullRequest
0 голосов
/ 06 декабря 2011

У меня есть функция:

function f=kriteriyLR3(a,w,ft)
ye=[0.5 1 2 3.5 4 3.8 2.9 2.5 1 0.3];
t=[0.2 0.3 0.35 1.6 1.78 1.8 2 2.3 2.5 3];
s=0;
for i=1:10
  s=s+(ye(i)-a*sin(w*t(i)+ft))^2;
end
f=s;

Я хочу минимизировать это, и я делаю следующее:

a=1;
w=1;
ft=1;
x = fminsearch('kriteriyLR3',[], a,w,ft);

Я получаю следующие ошибки:

>> mainLR3
Subscripted assignment dimension mismatch.

Error in fminsearch (line 191)
fv(:,1) = funfcn(x,varargin{:});

Error in mainLR3 (line 12)
x = fminsearch('kriteriyLR3',[], a,w,ft); 

Насколько я понимаю, несоответствие размеров, но я не знаю, как это исправить.Любая помощь?

Ответы [ 3 ]

2 голосов
/ 06 декабря 2011

fminsearch оптимизирует по одной переменной, но эта переменная может быть вектором. Вот соответствующий пример из справки:

     f = @(x,c) x(1).^2+c.*x(2).^2;  % The parameterized function.
     c = 1.5;                        % The parameter.
     X = fminsearch(@(x) f(x,c),[0.3;1])

fminsearch найдет минимум свыше x, сохраняя постоянным c на 1.5 и начиная с [0.3;1]. Вы должны решить, являются ли a, w или ft тем, что вы минимизируете, как упоминалось @woodchips. Использование анонимных функций с fminsearch действительно ценно - убедитесь, что вы понимаете простые примеры и как работают анонимные функции. Начните с вещей, которые работают, и медленно изменяйте их на своих собственных примерах, чтобы вы могли понять постепенные изменения. Удачи!

1 голос
/ 06 декабря 2011

Читали ли вы помощь для fminsearch?

Ваш синтаксис вызова неверен. Я думаю, что вы хотите:

x = fminsearch(@(x) kriteriyLR3(x(1),x(2),x(3)), [a,w,ft],[]);

Если вы посмотрите на используемый вами синтаксис, то увидите, что вы пытаетесь начать с [], что означает, что funfcn(x,varargin{:}) вернет [], что не соответствует ожидаемому размеру. .

1 голос
/ 06 декабря 2011

Вы минимизируете эту функцию как функцию какого параметра? Какая переменная должна изменяться в fminsearch? Каковы начальные значения? Прочитайте справку для fminsearch. Какой второй входной аргумент? Почему вы там проходите в пустых скобках?

Какой третий аргумент? ПРОЧИТАЙТЕ ПОМОЩЬ. Вы не можете просто передавать аргументы в произвольном или даже случайном порядке и ожидать, что fminsearch угадает то, что вы намереваетесь.

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