骑单车的男孩
2009-08-06, 10:21
我做了一个程序,最后要求误差的分布,整个过程只有实数,应该没有复数产生,但运行
H(r)=norm(N(r,: ))*norm(NL);
Z(r)=abs(dot(N(r,: ),NL))/(H(r));
M(r)=acos(Z(r))*180/pi;
M(r)有时会产生复数
上段代码,我的意思理论上是向量N和向量NL点乘,然后除以两向量的模,再反cos就是两向量的夹角了,但为什么abs(dot(N,NL))/(norm(N)*norm(NL))会产生超出[-1,1]的数呢?我应该怎么改呀?谢谢
下面是程序:
%用蒙特卡洛方法测定调平装置的误差分布
%以平面2x+3y+6z-8=0为例,测定平面上点(c1,c2,c3)=(1,2,0)处的法向误差分布
H=[];
Z=[];
N=[];%计算法向量
M=[];%误差值
angle=20*pi/180;%传感头发射的激光与主轴的夹角
NL=[2,3,6];%平面2x+3y+6z+8=0的法向量
point=0;%计数点
s=unifrnd(-30*cos(angle),0,1,200);
%产生服从均匀分布U(-30cos20,0)的随机数200个
A1=[1/tan(angle),0,1;
2,3,6;
0,1,0];
A2=[-2*3^(1/2),-2,0;
0,4/tan(angle),2*3^(1/2);
2,3,6];
A3=[2*3^(1/2),-2,0;
0,4/tan(angle),-2*3^(1/2);
2,3,6];
%传感器1,2,3发射激光的光线方程与平面方程的联立的系数矩阵
for t=1:200
b1=[s(t)+1/tan(angle);8;2];
b2=[-2*3^(1/2)-4;8/tan(angle)+2*3^(1/2)*s(t);8];
b3=[2*3^(1/2)-4;8/tan(angle)-2*3^(1/2)*s(t);8];
x1=A1\b1;
x2=A2\b2;
x3=A3\b3;
%三束激光线与平面的焦点坐标
if (norm(x1'-[1,2,s(t)])<=30)&(norm(x2'-[1,2,s(t)])<=30)&(norm(x3'-[1,2,s(t)])<=30)
%判断是否超出测量范围
point=point+1;
h1=30-norm(x1'-[1,2,s(t)]);
h2=30-norm(x2'-[1,2,s(t)]);
h3=30-norm(x3'-[1,2,s(t)]);
L2=65;
T=95*sin(angle);
N(point,:)=[1/2*3^(1/2)*(2*T-(2*L2+h2+h3)*sin(angle))*(h2-h1)*cos(angle)-1/2*(h2-h3)*cos(angle)*3^(1/2)*(T-(L2+h2)*sin(angle)),(h2-h3)*cos(angle)*(-3/2*T+(3/2*L2+h1+1/2*h2)*sin(angle))-(1/2*h2-1/2*h3)*sin(angle)*(h2-h1)*cos(angle), 1/2*(1/2*h2-1/2*h3)*sin(angle)*3^(1/2)*(T-(L2+h2)*sin(angle))-1/2*3^(1/2)*(2*T-(2*L2+h2+h3)*sin(angle))*(-3/2*T+(3/2*L2+h1+1/2*h2)*sin(angle))];
%计算近似向量
if point==100
break;
end
end
end
for r=1:100
H(r)=norm(N(r,: ))*norm(NL);
Z(r)=abs(dot(N(r,: ),NL))/(H(r));
M(r)=acos(Z(r))*180/pi;%本次测量的误差
end
[h,p,j,cv]=jbtest(M)%判断是否为正态分布
[n,xout]=hist(M,25)
bar(xout,n)%绘制频率直方图
E=mean(M)%计算样本均值
sigma=std(M)%计算标准差
H(r)=norm(N(r,: ))*norm(NL);
Z(r)=abs(dot(N(r,: ),NL))/(H(r));
M(r)=acos(Z(r))*180/pi;
M(r)有时会产生复数
上段代码,我的意思理论上是向量N和向量NL点乘,然后除以两向量的模,再反cos就是两向量的夹角了,但为什么abs(dot(N,NL))/(norm(N)*norm(NL))会产生超出[-1,1]的数呢?我应该怎么改呀?谢谢
下面是程序:
%用蒙特卡洛方法测定调平装置的误差分布
%以平面2x+3y+6z-8=0为例,测定平面上点(c1,c2,c3)=(1,2,0)处的法向误差分布
H=[];
Z=[];
N=[];%计算法向量
M=[];%误差值
angle=20*pi/180;%传感头发射的激光与主轴的夹角
NL=[2,3,6];%平面2x+3y+6z+8=0的法向量
point=0;%计数点
s=unifrnd(-30*cos(angle),0,1,200);
%产生服从均匀分布U(-30cos20,0)的随机数200个
A1=[1/tan(angle),0,1;
2,3,6;
0,1,0];
A2=[-2*3^(1/2),-2,0;
0,4/tan(angle),2*3^(1/2);
2,3,6];
A3=[2*3^(1/2),-2,0;
0,4/tan(angle),-2*3^(1/2);
2,3,6];
%传感器1,2,3发射激光的光线方程与平面方程的联立的系数矩阵
for t=1:200
b1=[s(t)+1/tan(angle);8;2];
b2=[-2*3^(1/2)-4;8/tan(angle)+2*3^(1/2)*s(t);8];
b3=[2*3^(1/2)-4;8/tan(angle)-2*3^(1/2)*s(t);8];
x1=A1\b1;
x2=A2\b2;
x3=A3\b3;
%三束激光线与平面的焦点坐标
if (norm(x1'-[1,2,s(t)])<=30)&(norm(x2'-[1,2,s(t)])<=30)&(norm(x3'-[1,2,s(t)])<=30)
%判断是否超出测量范围
point=point+1;
h1=30-norm(x1'-[1,2,s(t)]);
h2=30-norm(x2'-[1,2,s(t)]);
h3=30-norm(x3'-[1,2,s(t)]);
L2=65;
T=95*sin(angle);
N(point,:)=[1/2*3^(1/2)*(2*T-(2*L2+h2+h3)*sin(angle))*(h2-h1)*cos(angle)-1/2*(h2-h3)*cos(angle)*3^(1/2)*(T-(L2+h2)*sin(angle)),(h2-h3)*cos(angle)*(-3/2*T+(3/2*L2+h1+1/2*h2)*sin(angle))-(1/2*h2-1/2*h3)*sin(angle)*(h2-h1)*cos(angle), 1/2*(1/2*h2-1/2*h3)*sin(angle)*3^(1/2)*(T-(L2+h2)*sin(angle))-1/2*3^(1/2)*(2*T-(2*L2+h2+h3)*sin(angle))*(-3/2*T+(3/2*L2+h1+1/2*h2)*sin(angle))];
%计算近似向量
if point==100
break;
end
end
end
for r=1:100
H(r)=norm(N(r,: ))*norm(NL);
Z(r)=abs(dot(N(r,: ),NL))/(H(r));
M(r)=acos(Z(r))*180/pi;%本次测量的误差
end
[h,p,j,cv]=jbtest(M)%判断是否为正态分布
[n,xout]=hist(M,25)
bar(xout,n)%绘制频率直方图
E=mean(M)%计算样本均值
sigma=std(M)%计算标准差