2012-03-01 158 views
0

我想了解和學習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 

回答

3

您是否知道Matlab Coder? Matlab可以爲你自動生成c/C++代碼。它有其侷限性,但是如果試圖從Matlab學習c,使用編碼器應該是您填充許多示例的最佳方式。

2

數組聲明,像這樣訪問:

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.

+2

的重要補充,在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

+0

@dantswain,感謝您的更正和附加信息。 – Matt 2012-03-02 15:40:45