[讨论] 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