C Matlab高效代码生成

C Matlab高效代码生成,c,matlab,matlab-deployment,C,Matlab,Matlab Deployment,我从Matlab编码器生成C代码。 我有一个函数如下 function C = foo( A, B ) %#codegen for j=1:100, C = C+A(j); end end 此函数在c中的代码是 void foo(float A[100],B,float* C){ for(j=0;j<100;j++){ *C+=A[j]; } } void foo(浮点A[100],B,浮点*C){ 对于(j=0;j我不理解整个故事,但是

我从Matlab编码器生成C代码。 我有一个函数如下

function C = foo( A, B ) %#codegen
    for j=1:100,
    C = C+A(j);
    end
end
此函数在c中的代码是

void foo(float A[100],B,float* C){
    for(j=0;j<100;j++){
    *C+=A[j];
    }
}
void foo(浮点A[100],B,浮点*C){

对于(j=0;j我不理解整个故事,但是为什么不把你的matlab代码改成实际使用
B
作为开始,然后告诉我们接下来会发生什么,比如

function C = foo( A, B ) %#codegen
    for j=1:B,
        C = C+A(j);
    end
end

我猜Matlab编码器需要矢量化代码:

请重试此选项:

function C = foo( A, B ) %#codegen
    C = sum(A(1:100));
end

你可能需要优化你的Matlab代码,使之更像你在C中想要的。Matlab代码在A中访问100个元素;这就是生成的C正在复制的元素。如果你只想让它进入
B
,那么你必须在Matlab中进行

% MATLAB
function C = foo( A, B ) %#codegen
  for j=1:B,
  C = C+A(j);
  end
end

我相信您的MATLAB代码将返回错误,因为C变量未定义。如何从MATLAB生成C代码?在OP的示例中,
C
是标量的…似乎他想要
C=sum(A(1:B));
% MATLAB
function C = foo( A, B ) %#codegen
  for j=1:B,
  C = C+A(j);
  end
end