作业帮 > 综合 > 作业

matlab为什么我这个程序不循环

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/18 02:12:53
matlab为什么我这个程序不循环
这个程序的思路是,首先产生一个2行1000列的矩阵,矩阵的每一列代表平面上的一个点的坐标,然后把满足要求的点挑出来,但是为什么我这个程序输入是那些点输出还是那些点根本没循环是怎么回事?
u=unifrnd(-0.4,0.4,2,1000);
s=size(u);
x=cell(2,1000);
y=cell2mat(x);
j=1;
for i=1:s(1,2)
ra=[-60 -60 -60;0 -17.32 17.32;20 -10 -10];
rb=[0 0 0;0 -47.63 47.63;55 -27.5 -27.5];
R1=[cos(u(1,i)) -sin(u(1,i)) 0;sin(u(1,i)) cos(u(1,i)) 0;0 0 1];
R2=[cos(u(2,i)) 0 sin(u(2,i));0 1 0;-sin(u(2,i)) 0 cos(u(2,i))];
R=R1*R2;
L=ra-R*rb;
c=[1;0;0];
f=R*c;%平面法向量
M1=[f(1) f(2) f(3);L(2) -L(1) 0;0 -L(3) L(2)];
N1=[f(1)*(-35);-60*L(2);-20*L(2)];
M2=[f(1) f(2) f(3);L(5) -L(4) 0;0 L(6) -L(5)];
N2=[f(1)*(-35);L(4)*17.32-60*L(5);L(5)*10-L(6)*17.32];
M3=[f(1) f(2) f(3);L(8) -L(7) 0;0 L(9) -L(8)];
N3=[f(1)*(-35);-L(7)*17.32-60*L(8);L(8)*10+L(9)*17.32];
a(:,1)=pinv(M1)*N1;
a(:,2)=pinv(M2)*N2;
a(:,3)=pinv(M3)*N3;
o=[-35;0;0];
r1=norm((a(:,1)-o));
r2=norm((a(:,2)-o));
r3=norm((a(:,3)-o));
if r1
不是没有循环,而是你的条件一直满足. 你把if那里加上else测试一下就知道了,如果用以下代码,什么显示都没有,但是把我的那句注释uncomment,你会看到很多个显示的,证明是你的判断条件有误: 代码:u=unifrnd(-0.4,0.4,2,1000);
s=size(u);
x=cell(2,1000);
y=cell2mat(x);
j=1;
for i=1:s(1,2)
    ra=[-60 -60 -60;0 -17.32 17.32;20 -10 -10];
    rb=[0 0 0;0 -47.63 47.63;55 -27.5 -27.5];
    R1=[cos(u(1,i)) -sin(u(1,i)) 0;sin(u(1,i)) cos(u(1,i)) 0;0 0 1];
    R2=[cos(u(2,i)) 0 sin(u(2,i));0 1 0;-sin(u(2,i)) 0 cos(u(2,i))];
    R=R1*R2;
    L=ra-R*rb;
    c=[1;0;0];
    f=R*c;%平面法向量
    M1=[f(1) f(2) f(3);L(2) -L(1) 0;0 -L(3) L(2)];
    N1=[f(1)*(-35);-60*L(2);-20*L(2)];
    M2=[f(1) f(2) f(3);L(5) -L(4) 0;0 L(6) -L(5)];
    N2=[f(1)*(-35);L(4)*17.32-60*L(5);L(5)*10-L(6)*17.32];
    M3=[f(1) f(2) f(3);L(8) -L(7) 0;0 L(9) -L(8)];
    N3=[f(1)*(-35);-L(7)*17.32-60*L(8);L(8)*10+L(9)*17.32];
    a(:,1)=pinv(M1)*N1;
    a(:,2)=pinv(M2)*N2;
    a(:,3)=pinv(M3)*N3;
    o=[-35;0;0];
    r1=norm((a(:,1)-o));
    r2=norm((a(:,2)-o));
    r3=norm((a(:,3)-o));
    if r1<65
        %disp('looped')
        if r2<65       
            if r3<65   
                y(:,j)=u(:,i);   
                j=j+1;
            else
                disp('fail')
            end
        else
            disp('fail')
        end
    else
        disp('fail')
    end
end