我正在尝试理解和学习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
答案 0 :(得分:3)
你知道Matlab Coder吗? Matlab可以为您自动生成c / c ++代码。它有其局限性,但如果试图从Matlab学习c,使用编码器应该是填充许多例子的最佳方式。
答案 1 :(得分: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循环的样子 - “for”的第一个“参数”是索引变量k的初始化,第二个设置for循环继续的条件,第三个增量k。要在循环中执行的代码用大括号{}。
括起来主要的逻辑区别是你必须在C中逐个元素地完成所有事情。