matlab到c ++的转换

时间:2017-03-26 09:37:02

标签: c++ matlab converter

所以我有这个matlab代码,我试图用c ++转换它。问题是我对matlab知之甚少。有人可以向我解释一些事情。 这是我的代码

function [L,D]=ldlt(A)
%
%  Figure out the size of A.
%
n=size(A,1);
%
% The main loop.
%
L=zeros(n,n);
for j=1:n,
  if (j > 1),
    v(1:j-1)=L(j,1:j-1).*d(1:j-1);
    v(j)=A(j,j)-L(j,1:j-1)*v(1:j-1)';
    d(j)=v(j);
    if (j < n),
      L(j+1:n,j)=(A(j+1:n,j)-L(j+1:n,1:j-1)*v(1:j-1)')/v(j);
    end;
  else
    v(1)=A(1,1);
    d(1)=v(1);
    L(2:n,1)=A(2:n,1)/v(1);    
  end;
end;
%
%  Put d into a matrix.
%
D=diag(d);
%
%  Put ones on the diagonal of L.
%
L=L+eye(n);

例如,我如何在c ++中编写这一行

L(j+1:n,j)=(A(j+1:n,j)-L(j+1:n,1:j-1)*v(1:j-1)')/v(j);

感谢您的帮助。

2 个答案:

答案 0 :(得分:0)

以下内容可帮助您找出代码并将其转换为C或C ++:

  1. 如果i和j是整数,i:j是从i开始并向上移动到j的连续整数的向量。

  2. i:s:j是从i开始的向量,以s为步长最多到j。

  3. 如果v是一个向量,那么v(i:j)就是v元素的向量,从第i个索引开始,一直到第j个索引。

  4. 与C ++不同,Matlab索引从1开始。不能有负面指数。

  5. v = zeros(n,1)创建一个长度为n的(列)matlab向量,用0进行初始化

  6. L =零(n,n)创建一个初始化为0的(n x n)matlab矩阵。

  7. L(i:j,k:l)是由行i到j和列k到l的L形成的矩阵。

  8. 矩阵(和其他高维数组)以列主要形式存储(第一个索引是变化最快的索引)。

  9. 如果A和B是矩阵,A * B是A和B的矩阵乘积。

  10. A. * B是A和B的元素积。

  11. Matlab有一个“编码器”工具箱,可以将matlab代码(只要满足一些限制条件)直接转换为C.鉴于您粘贴的代码类型,它是直接转换的理想选择。

  12. 如果您不想自动转换,则必须实现编写循环所使用的所有二进制操作(或使用C ++矩阵库)。

  13. 您可以用C ++编写.mex文件,matlab可以在使用matlab mex命令编译后直接使用它们。您将需要安装C ++编译器并使用mex -setup进行设置。

答案 1 :(得分:-1)

使用此命令:

  
    

mcc -m name_of_file     mbuild -setup     你会在当前文件夹中找到.exe,如果你不知道你在哪里?     使用此命令     PWD