我想了解和學習C語言,因爲我用Matlab中的工作,我想知道這是如何的代碼將被轉換成C.轉換Matlab代碼爲C代碼
for j=1:n
v=A(:,j);
for i=1:j-1
R(i,j)=Q(:,i)'*A(:,j);
v=v-R(i,j)*Q(:,i);
end
R(j,j)=norm(v);
Q(:,j)=v/R(j,j);
end
我想了解和學習C語言,因爲我用Matlab中的工作,我想知道這是如何的代碼將被轉換成C.轉換Matlab代碼爲C代碼
for j=1:n
v=A(:,j);
for i=1:j-1
R(i,j)=Q(:,i)'*A(:,j);
v=v-R(i,j)*Q(:,i);
end
R(j,j)=norm(v);
Q(:,j)=v/R(j,j);
end
您是否知道Matlab Coder? Matlab可以爲你自動生成c/C++代碼。它有其侷限性,但是如果試圖從Matlab學習c,使用編碼器應該是您填充許多示例的最佳方式。
數組聲明,像這樣訪問:
const int N = 10; // needs to be a constant
double v[N]; // 1-d
double A[N][N]; // 2-d
v[0] = A[1][2]; // indexing starts at 0, not 1
C沒有做自動矢量像Matlab,所以你必須做手動for循環。取而代之的R(i,j)=Q(:,i)'*A(:,j)
,
for (int k = 0; k < N; ++k) {
R[i][j] += Q[k][i] * A[k][j];
}
這最後一塊還演示了什麼for循環看起來像 - 的「爲」第一「的說法」是索引變量k的初始化,第二組的情況下,其for循環繼續,第三個增量k。要在循環中執行的代碼用大括號{}括起來。
主要邏輯不同的是,你必須做的一切元素乘元素C.
的重要補充,在C值一般不會被初始化爲零。另外,我認爲你的for循環的內部應該是R [i] [j] + = Q [k] [i] * A [k] [j]'。此外,人們通常使用矩陣的簡單數組,然後進行索引映射 - 'double A [N * N]'和A(i,j)變成'A [i * N + j]'。 – dantswain 2012-03-01 23:21:07
@dantswain,感謝您的更正和附加信息。 – Matt 2012-03-02 15:40:45