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

这个函数值返回值我已经改成不是数组了,为什么还跑不出来啊
展开
 我来答
Ghcost
2012-02-08 · TA获得超过262个赞
知道小有建树答主
回答量:75
采纳率:100%
帮助的人:68.1万
展开全部
是错误还是busy?
三层循环嵌套,运算量太大了,耗时很长。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

就这样了吧~
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式