matlab中在几重循环下调用函数,而函数的返回值是一个数组,没办法预先定义,matlab跑不出来,怎么办呢
m=4000;arrA=zeros(m,3);arrB=zeros(m,3);arrC=zeros(m,3);A=[000];B=[000];C=[000];n=1;fo...
m=4000;
arrA=zeros(m,3);
arrB=zeros(m,3);
arrC=zeros(m,3);
A=[0 0 0]; B=[0 0 0]; C=[0 0 0];
n=1;
for i=1:m
for j=1:m
for k=1:m
A=point(i,:); B=point(j,:); C=point(k,:); %point是3列很多行的已知数组
if(ExitOrNot(A,B,C)==1)
arrA(n,:)=A;
arrB(n,:)=B;
arrC(n,:)=C;
n=n+1;
end
end
end
end
function p=ExitOrNot(A,B,C)
%如果这三个点构成边长为1的正三角形的话,返回1,否则返回0
a=sqrt((A(1)-B(1)).^2+(A(2)-B(2)).^2+(A(3)-B(3)).^2);
b=sqrt((A(1)-C(1)).^2+(A(2)-C(2)).^2+(A(3)-C(3)).^2);
c=sqrt((B(1)-C(1)).^2+(B(2)-C(2)).^2+(B(3)-C(3)).^2);
if(a==1&&b==1&&c==1)
p=1;
else
p=0;
end
end
这个函数值返回值我已经改成不是数组了,为什么还跑不出来啊 展开
arrA=zeros(m,3);
arrB=zeros(m,3);
arrC=zeros(m,3);
A=[0 0 0]; B=[0 0 0]; C=[0 0 0];
n=1;
for i=1:m
for j=1:m
for k=1:m
A=point(i,:); B=point(j,:); C=point(k,:); %point是3列很多行的已知数组
if(ExitOrNot(A,B,C)==1)
arrA(n,:)=A;
arrB(n,:)=B;
arrC(n,:)=C;
n=n+1;
end
end
end
end
function p=ExitOrNot(A,B,C)
%如果这三个点构成边长为1的正三角形的话,返回1,否则返回0
a=sqrt((A(1)-B(1)).^2+(A(2)-B(2)).^2+(A(3)-B(3)).^2);
b=sqrt((A(1)-C(1)).^2+(A(2)-C(2)).^2+(A(3)-C(3)).^2);
c=sqrt((B(1)-C(1)).^2+(B(2)-C(2)).^2+(B(3)-C(3)).^2);
if(a==1&&b==1&&c==1)
p=1;
else
p=0;
end
end
这个函数值返回值我已经改成不是数组了,为什么还跑不出来啊 展开
1个回答
展开全部
是错误还是busy?
三层循环嵌套,运算量太大了,耗时很长。function p=ExitOrNot(A,B,C)可以用一些数学关系进行简化,例如开方是没有必要的;再用算法简化,例如计算完a后若不为1立即return。
想知道为什么要进行这种计算
三层循环嵌套,运算量太大了,耗时很长。function p=ExitOrNot(A,B,C)可以用一些数学关系进行简化,例如开方是没有必要的;再用算法简化,例如计算完a后若不为1立即return。
想知道为什么要进行这种计算
追问
busy一直在算。
我想找出一个数组里面(point)4000个点(每一行)有哪些能否构成边长为一的等边三角形。
的确运算量实在是太大了,后来我改了下算法用两次嵌套判断一下,优化了很多。但还是用了很久才跑出来,一千多万次循环。。
追答
m=4000;
arrA=zeros(m,3);
arrB=zeros(m,3);
arrC=zeros(m,3);
A=[0 0 0]; B=[0 0 0]; C=[0 0 0];
n=1;
for i=1:m
for j=i:m
for k=j:m
%避免ABC的排列重复出现,计算量降为原来的 1/6
A=point(i,:); B=point(j,:); C=point(k,:); %point是3列很多行的已知数组
if(ExitOrNot(A,B,C))
arrA(n,:)=A;
arrB(n,:)=B;
arrC(n,:)=C;
n=n+1;
end
end
end
end
function p=ExitOrNot(A,B,C)
%如果这三个点构成边长为1的正三角形的话,返回1,否则返回0
a=sum((A-B).^2);
if(a==1)
b=sum((A-C).^2);
if(b==1)
c=sum((B-C).^2);
if(c==1)
p=1;
else
p=0;
end
else
p=0;
end
else
p=0;
end
end
就这样了吧~
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询