Matlab lsqcurvefit работает несколько итераций, а затем останавливается на ошибке - PullRequest
0 голосов
/ 29 ноября 2010

Я пытаюсь найти оптимизированные параметры для модели, определенной неявной функцией, чтобы соответствовать набору данных, используя fsolve и lsqcurvefit. Я определил 3 функции в отдельных m-файлах: первая - определение неявной функции по 4 параметрам, вторая - fsolve для поиска корней определенной неявной функции, а третья - lsqcurvefit для поиска оптимизированных значений. для четырех параметров. Мне, естественно, нужно определить достаточно хорошие начальные значения для параметров, но, попробовав различные разумные комбинации, lsqcurvefit всегда работает в течение примерно 20-30 итераций (matlab выводит векторные значения, рассчитанные с помощью решения, найденного fsolve после каждой итерации), а затем печатает

No solution found.

fsolve stopped because the problem appears regular as measured by the gradient,
but the vector of function values is not near zero as measured by the
default value of the function tolerance.

<stopping criteria details>

??? Error using ==> lsqcurvefit at 253
Function value and YDATA sizes are incommensurate.

Error in ==> optimointi at 5
z = lsqcurvefit('laske_i',parametrit,V_vektori,I_vektori_mitattu,[],[],options);

Я не вижу, как «Значение функции и размеры YDATA несопоставимы». неожиданно, так как итерация сначала запускается 20-30 раз. Значения, напечатанные после каждой итерации, в значительной степени заполнены нулями (хорошо подходят), но последние несколько «взрываются» от 0 до 1 (с коэффициентом в несколько степеней, равным десяти). Любая помощь по ошибке приветствуется!

Ответы [ 2 ]

0 голосов
/ 12 ноября 2015

В моем случае ошибка в lsqcurvefit, которая гласила: «Значение функции и размеры YDATA несоизмеримы» была вызвана вектором, который я использовал в качестве Ydata, на самом деле это было довольно глупо.Вектор должен быть в форме столбца y = [1; 2; 3], а не как y = [1 2 3]. Это вызывало проблему в lsqcurvefit, потому что xdata тоже были похожи на столбцы

0 голосов
/ 29 ноября 2010

Ошибка заключается в том, как работает fsolve.На самом деле работал fsolve, но мне пришлось добавить цикл for, чтобы результат fsolve для каждого элемента вектора домена также был вектором.Вот почему значение функции и YDATA действительно были несопоставимы.

...