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

作者: saniao (saniao)   2015-08-12 14:22:22
各位好
小弟手上目前有一聯立方程組(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);
不過這個方程組就不像上個方程組能夠順利求得解
不知道是不是初始值給定不好
(但是其實我已經給真值了 也就是正確答案)
不知道問題出在哪裡
問題有點繁雜
還請版上神手賜教

Links booklink

Contact Us: admin [ a t ] ucptt.com