luda 发表于 2009-4-5 16:03

新手求助:急啊!如何将matlab里的循环放到C++里run,然后返回结果啊?

各位高手,有谁能帮忙指点迷津啊。小弟要生成一个large-scale的矩阵,有四层循环(中间会调用一个简单的函数)。放在matlab里做慢到要死,听说放到c或c++里会快很多,不知道有没有什么快捷的方法能将matlab里编的循环转换到上述语言里run,然后返回矩阵啊? 十万火急,哪位大侠帮帮忙啊?(其实循环不难,就是矩阵的规模太大。)
附上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=;
               beq=;            
            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=;
            beq=;
      end
    end
end
for i=1:1:n
    c=;
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=;
                     b=;
                     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=;
                     b=;
                     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=;
                     b=;
                     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=;
                     b=;
                  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

sogooda 发表于 2009-4-5 22:46

在matlab里查查ccode的帮助,或许有点儿用。
页: [1]
查看完整版本: 新手求助:急啊!如何将matlab里的循环放到C++里run,然后返回结果啊?