2010-11-28 2 views
0

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

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 (с коэффициентом нескольких степеней десять). Любая помощь по ошибке оценивается!

+0

Возможно, это должно быть связано к некоторой числовой нестабильности, но очень сложно попытаться помочь вам без дополнительной информации, такой как функция, которая вводится в lsqcurvefit и набор данных, который вы пытаетесь поместить. Кроме того, не ясно, какова роль fsolve в фитинг. – 2010-11-29 08:14:04

ответ

0

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

0

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