| 
各位高手,有谁能帮忙指点迷津啊。小弟要生成一个large-scale的矩阵,有四层循环(中间会调用一个简单的函数)。放在matlab里做慢到要死,听说放到c或c++里会快很多,不知道有没有什么快捷的方法能将matlab里编的循环转换到上述语言里run,然后返回矩阵啊? 十万火急,哪位大侠帮帮忙啊?(其实循环不难,就是矩阵的规模太大。)
x
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。您需要 登录 才可以下载或查看,没有账号?我要加入 
  附上code
 小弟在这先谢大家了!!!!!!!!!!!!
 c=[];
 Aeq=[];
 beq=[];
 A=[];
 b=[];
 M=0;
 n=30;
 var=zeros(n,(n-1)*(n-2));
 for i=1:1:n
 for j=i+1:1:n
 M=M+cost(i,j)*0.5*(l(i)+l(j));
 for k=1:1:n
 if k==i||k==j
 continue;
 else
 temp1=zeros(1,n*(n-1)*(n-2));
 cl=locate(i,j,k,n);
 var(i,cl)=cost(i,j)*l(k);
 temp1((n-1)*(n-2)*(i-1)+cl)=1;
 cl=locate(j,i,k,n);
 temp1((n-1)*(n-2)*(j-1)+cl)=-1;
 Aeq=[Aeq;temp1];
 beq=[beq;0];
 end
 end
 end
 end
 for i=1:1:n
 for j=i+1:1:n
 for k=j+1:1:n
 temp2=zeros(1,n*(n-1)*(n-2));
 cl=locate(i,j,k,n);
 temp2((n-1)*(n-2)*(i-1)+cl)=1;
 cl=locate(i,k,j,n);
 temp2((n-1)*(n-2)*(i-1)+cl)=1;
 cl=locate(j,k,i,n);
 temp2((n-1)*(n-2)*(j-1)+cl)=1;
 Aeq=[Aeq;temp2];
 beq=[beq;1];
 end
 end
 end
 for i=1:1:n
 c=[c var(i,:)];
 end
 c=c';
 for i=1:1:n;
 for j=i+1:1:n
 for k=1:1:n
 if k==i||k==j
 continue
 else
 for d=1:1:n
 if d==i||d==j||d==k
 continue
 else
 temp=zeros(1,n*(n-1)*(n-2));
 cl1=locate(i,j,d,n);
 cl2=locate(j,k,d,n);
 cl3=locate(i,k,d,n);
 temp((n-1)*(n-2)*(i-1)+cl1)=1;
 temp((n-1)*(n-2)*(j-1)+cl2)=-1;
 temp((n-1)*(n-2)*(i-1)+cl3)=-1;
 A=[A;temp];
 b=[b;0];
 temp=zeros(1,n*(n-1)*(n-2));
 temp((n-1)*(n-2)*(i-1)+cl1)=-1;
 temp((n-1)*(n-2)*(j-1)+cl2)=-1;
 temp((n-1)*(n-2)*(i-1)+cl3)=1;
 A=[A;temp];
 b=[b;0];
 temp=zeros(1,n*(n-1)*(n-2));
 temp((n-1)*(n-2)*(i-1)+cl1)=-1;
 temp((n-1)*(n-2)*(j-1)+cl2)=1;
 temp((n-1)*(n-2)*(i-1)+cl3)=-1;
 A=[A;temp];
 b=[b;0];
 temp=zeros(1,n*(n-1)*(n-2));
 temp((n-1)*(n-2)*(i-1)+cl1)=1;
 temp((n-1)*(n-2)*(j-1)+cl2)=1;
 temp((n-1)*(n-2)*(i-1)+cl3)=1;
 A=[A;temp];
 b=[b;2];
 end
 end
 end
 end
 end
 end
 
 被调用的函数:
 function cl=locate(i,j,k,n)
 if j<i
 if k<j
 cl=(j-1)*(n-2)+k;
 elseif k<i;
 cl=(j-1)*(n-2)+k-1;
 else
 cl=(j-1)*(n-2)+k-2;
 end
 else
 if k<i
 cl=(j-2)*(n-2)+k;
 elseif k<j
 cl=(j-2)*(n-2)+k-1;
 else
 cl=(j-2)*(n-2)+k-2;
 end
 end
 end
 |