一个matlab程序困惑,不难,但是不知问题出在哪里,请高手解答,高分回报!
求怎么样的情况下,5个向量的合成向量的模最小。分别是什么角度。
程序如下:
%定义5个以原点为起始端的向量x1=10;y1=10;x2=-10;y2=20;x3=10;y3=10;x4=20;y4=10;x5=-10;y5=10;
%计算每个向量的模p1=sqrt(x1^2+y1^2);p2=sqrt(x2^2+y2^2);p3=sqrt(x3^2+y3^2);p4=sqrt(x4^2+y4^2);p5=sqrt(x5^2+y5^2);
%定义旋转角度(0 45 90 135 180 225 270 315)即每隔45度旋转angle=0:pi/4:2*pi-pi/4;n=8;%8个旋转选择M=10;%定义一个常数用于后面的比较
%循环开始,5层for j1=1:n for j2=1:n for j3=1:n for j4=1:n for j5=1:n %旋转后,合成向量的x,y x=p1*sin(angle(j1))+p2*sin(angle(j2))+p3*sin(angle(j3))+p4*sin(angle(j4))+p5*sin(angle(j5)); y=p1*cos(angle(j1))+p2*cos(angle(j2))+p3*cos(angle(j3))+p4*cos(angle(j4))+p5*cos(angle(j5)); L=sqrt(x^2+y^2);%计算合成后的模 if L<=M%如果模小于M M=L;%则M=L ans=[L angle(j1)*180/pi angle(j2)*180/pi angle(j3)*180/pi angle(j4)*180/pi angle(j5)*180/pi] a1=j1;%记录找到的较小的模的旋转角 a2=j2; a3=j3; a4=j4; a5=j5; end end end end endend%计算各向量旋转后的坐标xx1=x1.*cos(angle(a1))-y1.*sin(angle(a1));yy1=x1.*sin(angle(a1))+y1.*cos(angle(a1));xx2=x2.*cos(angle(a2))-y2.*sin(angle(a2));yy2=x2.*sin(angle(a2))+y2.*cos(angle(a2));xx3=x3.*cos(angle(a3))-y3.*sin(angle(a3));yy3=x3.*sin(angle(a3))+y3.*cos(angle(a3));xx4=x4.*cos(angle(a4))-y4.*sin(angle(a4));yy4=x4.*sin(angle(a4))+y4.*cos(angle(a4));xx5=x5.*cos(angle(a5))-y5.*sin(angle(a5));yy5=x5.*sin(angle(a5))+y5.*cos(angle(a5));%画出各向量line([0,xx1],[0,yy1],'color','r');hold online([0,xx2],[0,yy2],'color','g');hold online([0,xx3],[0,yy3],'color','c');hold online([0,xx4],[0,yy4],'color','m');hold online([0,xx5],[0,yy5],'color','k');hold on%验证计算的结果x_sum=sum(xx1+xx2+xx3+xx4+xx5);y_sum=sum(yy1+yy2+yy3+yy4+yy5);L=sqrt(x_sum^2+y_sum^2)%画出合成向量plot(x_sum,y_sum,'o','MarkerFaceColor','r');%axis([-30 30 -30 30]);axis equalhold on
每次运行的结果都有很大偏差,实际合成的向量大的离谱,有的还好。
请高人指点! 展开
你好,
我用MATLAB运行你的代码,每次的结果都一样,合成的向量都在原点附近,不过你的代码中计算合成向量的x和y的坐标的时候不能用模值旋转,应该用你计算旋转后的向量坐标的公式来计算,即:
x=x1*cos(angle(j1))-y1*sin(angle(j1))+x2*cos(angle(j2))-y2*sin(angle(j2))+x3*cos(angle(j3))-y3*sin(angle(j3))+x4*cos(angle(j4))-y4*sin(angle(j4))+x5*cos(angle(j5))-y5*sin(angle(j5));
y=y1*cos(angle(j1))+x1*sin(angle(j1))+y2*cos(angle(j2))+x2*sin(angle(j2))+y3*cos(angle(j3))+x3*sin(angle(j3))+y4*cos(angle(j4))+x4*sin(angle(j4))+y5*cos(angle(j5))+x5*sin(angle(j5));
其它的不变,那可以得到正确的结果。
得到的结果如下:
ans =
0.0000 270.0000 90.0000 0 90.0000 180.0000
如果有帮助,请采纳,谢谢