Можно переформулировать проблему для lsqcurvefit , но почему бы не использовать lsqnonlin напрямую, поскольку lsqcurvefit - всего лишь оболочка для lsqnonlin?
Скажем, у вас есть массивы xx
, yy
, zz
, которые определяют вашу 2D-поверхность, так что surf(xx,yy,zz)
наносит на поверхность поверхность.
Затем вы создаете функцию objectiveFunction(params,xx,yy,zz)
, которая оценивает zz
для каждой координаты, определенной в xx
и yy
, с параметрами, определенными в params
, и которая возвращает вектор разности между zz
и функция вывода.
Наконец, вы присваиваете массиву initialGuess
начальное предположение для параметров и вызываете lsqnonlin
следующим образом:
estimatedParameters = lsqnonlin(@(params)objectiveFunction(params,xx,yy,zz),initialGuess)