所以我有这个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);
感谢您的帮助。
答案 0 :(得分:0)
以下内容可帮助您找出代码并将其转换为C或C ++:
如果i和j是整数,i:j是从i开始并向上移动到j的连续整数的向量。
i:s:j是从i开始的向量,以s为步长最多到j。
如果v是一个向量,那么v(i:j)就是v元素的向量,从第i个索引开始,一直到第j个索引。
与C ++不同,Matlab索引从1开始。不能有负面指数。
v = zeros(n,1)创建一个长度为n的(列)matlab向量,用0进行初始化
L =零(n,n)创建一个初始化为0的(n x n)matlab矩阵。
L(i:j,k:l)是由行i到j和列k到l的L形成的矩阵。
矩阵(和其他高维数组)以列主要形式存储(第一个索引是变化最快的索引)。
如果A和B是矩阵,A * B是A和B的矩阵乘积。
A. * B是A和B的元素积。
Matlab有一个“编码器”工具箱,可以将matlab代码(只要满足一些限制条件)直接转换为C.鉴于您粘贴的代码类型,它是直接转换的理想选择。
如果您不想自动转换,则必须实现编写循环所使用的所有二进制操作(或使用C ++矩阵库)。
您可以用C ++编写.mex文件,matlab可以在使用matlab mex命令编译后直接使用它们。您将需要安装C ++编译器并使用mex -setup进行设置。
答案 1 :(得分:-1)
使用此命令:
mcc -m name_of_file mbuild -setup 你会在当前文件夹中找到.exe,如果你不知道你在哪里? 使用此命令 PWD