преобразовать код Matlab в код C - PullRequest
0 голосов
/ 01 марта 2012

Я пытаюсь понять и выучить язык Си, и так как я работал в 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

Ответы [ 2 ]

3 голосов
/ 01 марта 2012

Знаете ли вы о Matlab Coder ? Matlab может автоматически генерировать код на c / c ++ для вас. У него есть свои ограничения, но если вы пытаетесь научиться c с Matlab, использование кодера должно быть лучшим способом для вас, чтобы заполнить множество примеров.

2 голосов
/ 02 марта 2012

Массивы объявляются и доступны следующим образом:

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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...