[討論] fsolve解非線性聯立方程組

看板MATLAB作者 (saniao)時間10年前 (2015/08/12 14:22), 編輯推噓0(000)
留言0則, 0人參與, 最新討論串1/1
各位好 小弟手上目前有一聯立方程組(12條方程式) 欲求未知數有9個 方程組如下 f=@(x)([C(1,1)*x(1)+C(1,2)*x(4)+C(1,3)*x(7);... C(2,1)*x(2)+C(2,2)*x(5)+C(2,3)*x(8);... C(3,1)*x(3)+C(3,2)*x(6)+C(3,3)*x(9);... x(1)*x(4)+x(2)*x(5)+x(3)*x(6);... x(1)*x(7)+x(2)*x(8)+x(3)*x(9);... x(4)*x(7)+x(5)*x(8)+x(6)*x(9);... C(1,1)*x(2)+C(1,2)*x(5)+C(1,3)*x(8)+C(2,1)*x(1)+C(2,2)*x(4)+C(2,3)*x(7);... C(1,1)*x(3)+C(1,2)*x(6)+C(1,3)*x(9)+C(3,1)*x(1)+C(3,2)*x(4)+C(3,3)*x(7);... C(2,1)*x(3)+C(2,2)*x(6)+C(2,3)*x(9)+C(3,1)*x(2)+C(3,2)*x(5)+C(3,3)*x(8)]); % x(1).^2+x(2).^2+x(3).^2-1;... % x(4).^2+x(5).^2+x(6).^2-1;... % x(7).^2+x(8).^2+x(9).^2-1]); 因為所求僅9個未知數 x(1)~x(9) 因此我從12條方程式中選取9條來計算 其中C是一個矩陣(為常數) 使用方法為fsovle 程式碼如下 options1 = optimset('fmincon'); options1 = optimset(options1,'Algorithm','levenberg-marquardt','TolCon',1e-3,'TolFun',1e-3,'MaxFunEvals',3000,'MaxIter',1000,'Display','iter','Diagnostics','on'); x0=[1 1 1 1 1 1 1 1 1]; x=fsolve(f,x0,options1); 想請問要解這樣的方程組該使用那些參數呢(因為非這方面專家 很努力想看懂相關參數 可是還是非常吃力) 打開options一看可調整參數超級多... 感謝大大看到這裡 不過其實這是運算的第一部分 當我求出九個未知數 (這些未知數其實是另一個方程組的已知值) 程式碼如下 g=@(y)([cosd(y(2))*cosd(y(3))-x(1);... sind(y(1))*sind(y(2))*cosd(y(3))+cosd(y(1))*sind(y(3))-x(2);... -cosd(y(1))*sind(y(2))*cosd(y(3))+sind(y(1))*sind(y(3))-x(3);... -cosd(y(2))*sind(y(3))-x(4);... -sind(y(1))*sind(y(2))*sind(y(3))+cosd(y(1))*cosd(y(3))-x(5);... cosd(y(1))*sind(y(2))*sind(y(3))+sind(y(1))*cosd(y(3))-x(6);... sind(y(2))-x(7);... -sind(y(1))*cosd(y(2))-x(8);... cosd(y(1))*cosd(y(2))-x(9)]); options2 = optimset('fmincon'); options2 = optimset(options2,'MaxFunEvals',5000,'MaxIter',3000); y0=[50 80 40]; y=fsolve(g,y0,options2); 不過這個方程組就不像上個方程組能夠順利求得解 不知道是不是初始值給定不好 (但是其實我已經給真值了 也就是正確答案) 不知道問題出在哪裡 問題有點繁雜 還請版上神手賜教 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.47.32 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1439360544.A.778.html
文章代碼(AID): #1LokOWTu (MATLAB)
文章代碼(AID): #1LokOWTu (MATLAB)