注意点运算。
需要lsqcurvefit函数进行非线性曲线拟合,其中已知函数的形式是
,然后在m文件中写的函数形式是这样的:
example3=@(a, x) a(1)*(x^2+a(2)*x+a(3))/(x^4+a(4)*x^3+a(5)*x^2+a(6)*x+a(7));
这个函数的x就是S(f)函数式子中的f,a(1)、a(2)、a(3)、a(4)、a(5)、a(6)、a(7)S(f)函数式子中的A、B、C、D、E、F、G这7个未知数,运行出现错误。于是参考
http://zhidao.baidu.com/link?url=hU_3NNTgLa_tx8R61muiVoX9FH4gJbbu_5EnxQJqKcR4ZrfR0alVK4EJ8Fk4Xew05_ntLyzzlbMpfuKTFYhgZq
这个链接中的回答,将m文件中写的函数形式改成了这样的:
example3=@(a, x) a(1)*(x.^2+a(2)*x+a(3))/(x.^4+a(4)*x.^3+a(5)*x.^2+a(6)*x+a(7));
运行出现下面这样的错误:
??? Error using ==> lsqcurvefit at 253
Function value and YDATA sizes are incommensurate.
在这个错误中一直找了将近一周的时间,终于参考
http://www.matlabsky.com/thread-35127-1-1.html
这个链接中的回答,将 / 改为 ./ ,即将函数形式改成了这样的:
example3=@(a, x) a(1)*(x.^2+a(2)*x+a(3))./(x.^4+a(4)*x.^3+a(5)*x.^2+a(6)*x+a(7));
程序终于正常运行了。
总结:出现“ ??? Error using ==> lsqcurvefit at 253 Function value and YDATA sizes are incommensurate.”这样的错误,有一些确实是因为拟合时的xdata和ydata长度不一样,但是也一定要注意点运算!
再次感谢上面两个链接中的回答者。