Matlab中使用solve命令出现sym问题

问题描述:

Matlab中使用solve命令出现sym问题
在相机成像的模型中
需要用matlab解算一个方程组:
S=solve('Xw1*r11+Yw1*r12+A(1)*Xw1*r31+A(1)*Yw1*r32+t1+A(1)*t3=0',...
'Xw1*r21+Yw1*r22+B(1)*Xw1*r31+B(1)*Yw1*r32+t2+B(1)*t3=0',...
'Xw2*r11+Yw2*r12+A(2)*Xw2*r31+A(2)*Yw2*r32+t1+A(2)*t3=0',...
'Xw2*r21+Yw2*r22+B(2)*Xw2*r31+B(2)*Yw2*r32+t2+B(2)*t3=0',...
'Xw3*r11+Yw3*r12+A(3)*Xw3*r31+A(3)*Yw3*r32+t1+A(3)*t3=0',...
'Xw3*r21+Yw3*r22+B(3)*Xw3*r31+B(3)*Yw3*r32+t2+B(3)*t3=0',...
'Xw4*r11+Yw4*r12+A(4)*Xw4*r31+A(4)*Yw4*r32+t1+A(4)*t3=0',...
'Xw4*r21+Yw4*r22+B(4)*Xw4*r31+B(4)*Yw4*r32+t2+B(4)*t3=0',...
'r11^2+r21^2+r31^2=1',...
'r21^2+r22^2+r32^2=1',...
'r11*r12+r21*r22+r31*r32=0');
其中向量A=[0.2252 0.2453 -0.1968 -0.1834]
B=[0.1665 -0.1506 -0.1757 0.0798]
Xw1=0;Xw2=0;Xw3=1;Xw4=1;
Yw1=0.6;Yw2=0;Yw3=0;Yw4=0.6; 这些都为已知量
需要通过8个一次线性方程和3个二次方程共11个方程来解算9个未知量:r11 r12 r21 r22 r31 r32 t1 t2 t3
而直接使用solve命令解算11个方程 CPU%100很长时间都没算出来
如果只用前8个一次线性方程解算 出现了 带sym的解
1个回答 分类:综合 2014-12-03

问题解答:

我来补答
function y=func_nonlinear(x)
A=[0.2252 0.2453 -0.1968 -0.1834];
B=[0.1665 -0.1506 -0.1757 0.0798];
Xw1=0;Xw2=0;Xw3=1;Xw4=1;
Yw1=0.6;Yw2=0;Yw3=0;Yw4=0.6;
%S=solve('Xw1*r11+Yw1*r12+A(1)*Xw1*r31+A(1)*Yw1*r32+t1+A(1)*t3=0',...
%'Xw1*r21+Yw1*r22+B(1)*Xw1*r31+B(1)*Yw1*r32+t2+B(1)*t3=0',...
%'Xw2*r11+Yw2*r12+A(2)*Xw2*r31+A(2)*Yw2*r32+t1+A(2)*t3=0',...
%'Xw2*r21+Yw2*r22+B(2)*Xw2*r31+B(2)*Yw2*r32+t2+B(2)*t3=0',...
%'Xw3*r11+Yw3*r12+A(3)*Xw3*r31+A(3)*Yw3*r32+t1+A(3)*t3=0',...
%'Xw3*r21+Yw3*r22+B(3)*Xw3*r31+B(3)*Yw3*r32+t2+B(3)*t3=0',...
%'Xw4*r11+Yw4*r12+A(4)*Xw4*r31+A(4)*Yw4*r32+t1+A(4)*t3=0',...
%'Xw4*r21+Yw4*r22+B(4)*Xw4*r31+B(4)*Yw4*r32+t2+B(4)*t3=0',...
%'r11^2+r21^2+r31^2=1',...
%'r21^2+r22^2+r32^2=1',...
%'r11*r12+r21*r22+r31*r32=0');
%r11 r12 r21 r22 r31 r32 t1 t2 t3
%分别为x(1),x(2),x(3),x(4),x(5),x(6),x(7),x(8),x(9)
y(1)=Xw1*x(1)+Yw1*x(2)+A(1)*Xw1*x(5)+A(1)*Yw1*x(6)+x(7)+A(1)*x(9);
y(2)=Xw1*x(3)+Yw1*x(4)+B(1)*Xw1*x(5)+B(1)*Yw1*x(6)+x(8)+B(1)*x(9);
y(3)=Xw2*x(1)+Yw2*x(2)+A(2)*Xw2*x(5)+A(2)*Yw2*x(6)+x(7)+A(2)*x(9);
y(4)=Xw2*x(3)+Yw2*x(4)+B(2)*Xw2*x(5)+B(2)*Yw2*x(6)+x(8)+B(2)*x(9);
y(5)=Xw3*x(1)+Yw3*x(2)+A(3)*Xw3*x(5)+A(3)*Yw3*x(6)+x(7)+A(3)*x(9);
y(6)=Xw3*x(3)+Yw3*x(4)+B(3)*Xw3*x(5)+B(3)*Yw3*x(6)+x(8)+B(3)*x(9);
y(7)=Xw4*x(1)+Yw4*x(2)+A(4)*Xw4*x(5)+A(4)*Yw4*x(6)+x(7)+A(4)*x(9);
y(8)=Xw4*x(3)+Yw4*x(4)+B(4)*Xw4*x(5)+B(4)*Yw4*x(6)+x(8)+B(4)*x(9);
y(9)=x(1)^2+x(3)^2+x(5)^2-1;
y(10)=x(3)^2+x(4)^2+x(6)^2-1;
y(11)=x(1)*x(2)+x(3)*x(4)+x(5)*x(6);
将该函数保存成M文件,文件名为func_nonlinear.m
在命令窗口中输入:
x0=[0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5 0.5];
fsolve(@func_nonlinear,x0)
显示结果为
ans =
Columns 1 through 8
0.8617 -0.0013 0.1270 -0.9599 0.4908 0.2509 -0.4245 0.2616
Column 9
1.7325
这就是9个变量的迭代数值解.
我的matlab版本是7.1的,不知道是否适合其他版本,
 
 
展开全文阅读
剩余:2000
上一页:不是奥数题