[問題]matlab lsqcurvefit使用問題

看板MATLAB作者 (小羅)時間8年前 (2016/11/06 10:49), 8年前編輯推噓3(302)
留言5則, 1人參與, 最新討論串1/1
各位好 小弟最近在做實驗上遇到了一個使用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://www.ptt.cc/bbs/MATLAB/M.1478400569.A.518.html

11/06 10:57, , 1F
你要做euler rotation 嗎?為什麼不直接乘矩陣?
11/06 10:57, 1F
我要做座標的旋轉,我還不太熟悉MATLAB所以就直接都乘開了

11/06 11:23, , 2F
錯誤訊息的直譯是跑太多次找不到解,通常的原因是fun寫錯了
11/06 11:23, 2F

11/06 11:23, , 3F
或是initial guess太爛。我猜你的fun後面不該減px,另外為
11/06 11:23, 3F

11/06 11:24, , 4F
了確定fun沒寫錯,也建議改寫成matlab支援的矩陣乘法。
11/06 11:24, 4F
我的fun應該是沒錯的,我把px拿掉之後出現另一個問題是 Function value and YDATA sizes are not equal. ※ 編輯: as555120 (140.118.23.63), 11/06/2016 12:12:58

11/06 12:43, , 5F
就,fun 回傳的值無法與YDATA相減,是英文問題嗎?
11/06 12:43, 5F
文章代碼(AID): #1O7fevKO (MATLAB)
文章代碼(AID): #1O7fevKO (MATLAB)