新手求助:急啊!如何将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 在matlab里查查ccode的帮助,或许有点儿用。
页:
[1]