[問題]matlab lsqcurvefit使用問題

作者: as555120 (小羅)   2016-11-06 10:49:26
各位好
小弟最近在做實驗上遇到了一個使用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).
想請問該怎麼解決這個問題
另外想問可以幫每一個要計算的值加上下限嗎?
作者: sunev (Veritas)   2016-11-06 10:57:00
你要做euler rotation 嗎?為什麼不直接乘矩陣?錯誤訊息的直譯是跑太多次找不到解,通常的原因是fun寫錯了或是initial guess太爛。我猜你的fun後面不該減px,另外為了確定fun沒寫錯,也建議改寫成matlab支援的矩陣乘法。就,fun 回傳的值無法與YDATA相減,是英文問題嗎?

Links booklink

Contact Us: admin [ a t ] ucptt.com