matlab 到 c++ 的转换

matlab to c++ conversion

所以我有这个 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);

感谢您的帮助。

使用这个命令:

mcc -m name_of_file mbuild -setup you will find the .exe in the current folder, if you dont know where you are ?? use this command pwd

以下应该可以帮助您找出代码并将其转换为 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 = zeros(n,n) 创建一个初始化为 0 的 (n x n) matlab 矩阵。

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

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

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

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

  11. Matlab 有一个 "Coder" 工具箱,可以将 matlab 代码(前提是它满足一些限制)直接转换成 C。鉴于你粘贴的代码类型,它是一个很好的候选者直接转换。

  12. 如果你不想自动转换,你将不得不实现所有用于编写循环(或使用C++矩阵库)的二元运算。

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