作者as555120 (小罗)
看板MATLAB
标题[问题]matlab lsqcurvefit使用问题
时间Sun Nov 6 10:49:26 2016
各位好
小弟最近在做实验上遇到了一个使用lsqcurvefit的问题
希望版上的高手可以帮我看看怎麽解决
以下是我的程式码
X,Y,Z都是 1x130 的行向量 而px也是 1x130 的行向量
我想要用这些数据以及下列的方程式算出x(1)~x(11)的值
xdata=[X;Y;Z];
ydata=px;
x0=[0 0 0 0 0 0 0 0 0 0 0];
fun = @(x,xdata) (x(11)*x(4) + x(9)*x(1) + x(10)*x(3) +
xdata(3,:).*(x(1)*(sin(x(6))*sin(x(8)) + cos(x(6))*cos(x(8))*sin(x(7))) -
x(3)*(cos(x(8))*sin(x(6)) - cos(x(6))*sin(x(7))*sin(x(8))) +
x(4)*cos(x(6))*cos(x(7))) + xdata(2,:).*(x(3)*(cos(x(6))*cos(x(8)) +
sin(x(6))*sin(x(7))*sin(x(8))) - x(1)*(cos(x(6))*sin(x(8)) -
cos(x(8))*sin(x(6))*sin(x(7))) + x(4)*cos(x(7))*sin(x(6))) +
xdata(1,:).*(x(1)*cos(x(7))*cos(x(8)) - x(4)*sin(x(7)) +
x(3)*cos(x(7))*sin(x(8))))/(x(11) - xdata(1,:).*sin(x(7)) +
xdata(3,:).*cos(x(6))*cos(x(7)) + xdata(2,:).*cos(x(7))*sin(x(6)))-px;
x = lsqcurvefit(fun,x0,xdata,ydata)
但是跑完之後显示
Solver stopped prematurely.
lsqcurvefit stopped because it exceeded the function evaluation limit,
options.MaxFunEvals = 1100 (the default value).
想请问该怎麽解决这个问题
另外想问可以帮每一个要计算的值加上下限吗?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 140.118.23.63
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/MATLAB/M.1478400569.A.518.html
1F:推 sunev: 你要做euler rotation 吗?为什麽不直接乘矩阵? 11/06 10:57
我要做座标的旋转,我还不太熟悉MATLAB所以就直接都乘开了
2F:推 sunev: 错误讯息的直译是跑太多次找不到解,通常的原因是fun写错了 11/06 11:23
3F:→ sunev: 或是initial guess太烂。我猜你的fun後面不该减px,另外为 11/06 11:23
4F:→ sunev: 了确定fun没写错,也建议改写成matlab支援的矩阵乘法。 11/06 11:24
我的fun应该是没错的,我把px拿掉之後出现另一个问题是 Function value and YDATA
sizes are not equal.
※ 编辑: as555120 (140.118.23.63), 11/06/2016 12:12:58
5F:推 sunev: 就,fun 回传的值无法与YDATA相减,是英文问题吗? 11/06 12:43