声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1643|回复: 1

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

[复制链接]
发表于 2009-4-5 16:03 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
各位高手,有谁能帮忙指点迷津啊。小弟要生成一个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=[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
回复
分享到:

使用道具 举报

发表于 2009-4-5 22:46 | 显示全部楼层
在matlab里查查ccode的帮助,或许有点儿用。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-5-13 13:18 , Processed in 0.073175 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表