generate:: C

Сгенерируйте отформатированную строку C

Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.

Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.

Синтаксис

generate::C(e, <NoWarning>)

Описание

generate::C(e) генерирует код С для выражения MuPAD® e.

generate::C возвращает отформатированную строку C, представляющую выражение, уравнение, список уравнений или матрицы.

Уравнение представляет присвоение в коде С. Типом присвоения является double.

При генерации кода С для матрицы генератор присваивает только ненулевые элементы. Смотрите Пример 3.

Чтобы распечатать выводимую строку к файлу, используйте функцию fprint. Используйте параметр печати Unquoted, чтобы удалить кавычки и расширить специальные символы как разрывы строки и вкладки.

Используйте функцию generate::optimize, чтобы оптимизировать код MuPAD прежде, чем преобразовать его в код С. Смотрите Пример 5.

Опция NoWarning позволяет вам отключить предупреждения. Смотрите Пример 6.

Примеры

Пример 1

Генератор кода преобразовывает список уравнений к последовательности присвоений:

generate::C([x1 = y2^2*(y1 + sin(z)), x2 = tan(x1^4)]):
print(Unquoted, %)
  x1 = (y2*y2)*(y1+sin(z));
  x2 = tan(x1*x1*x1*x1);

Пример 2

Индексирование матриц MuPAD и индексация массива отличаются от индексации массива C. По умолчанию индексы массива MuPAD запускаются с 1, и индексы массива C запускаются с 0. Чтобы создать код, совместимый с индексацией значения по умолчанию в C, функция generate::C постепенно уменьшает каждый индекс одним:

A:= matrix([[1,2],[3,4]]):
generate::C(A)."\n".
  generate::C(hold(Determinante = A[1,1]*A[2,2] - A[1,2]*A[2,1])):
print(Unquoted, %)
  A[0][0] = 1.0;
  A[0][1] = 2.0;
  A[1][0] = 3.0;
  A[1][1] = 4.0;

  Determinante = A[0][0]*A[1][1]-A[0][1]*A[1][0];

Пример 3

Сгенерированный код C не включает присвоения для нулевых элементов матрицы:

A:= matrix([[1, 0, 0],[0, 0, 1]]):
print(Unquoted, generate::C(A))
  A[0][0] = 1.0;
  A[1][2] = 1.0;

Пример 4

Если первый индекс массива не 1, функция generate::C выдает предупреждение:

A:= array(1..2, 2..3, [[1,2],[3,4]]):
print(Unquoted, generate::C(A))
Warning: Array index 'A[1..2, 2..3]' out of range 1..n.
  A[0][1] = 1.0;
  A[0][2] = 2.0;
  A[1][1] = 3.0;
  A[1][2] = 4.0;

Пример 5

Функция generate::C не оптимизирует ваш код:

print(Unquoted,
      generate::C([x = a + b, y = (a + b)^2])):
  x = a+b;
  y = pow(a+b,2.0);

Можно использовать функцию generate::optimize прежде, чем преобразовать выражение MuPAD в код С. Например, эта функция может сократить количество операций путем нахождения общих подвыражений:

print(Unquoted,
      generate::C(
          generate::optimize([x = a + b, y = (a + b)^2])
      )):
  x = a+b;
  y = x*x;

Пример 6

По умолчанию функция generate::C может предупреждения о проблемах:

print(Unquoted, generate::C(f(x)))
Warning: Function 'f' not verified to be a valid C function.
  t0 = f(x);

Если вы начали использовать generate::C недавно, предупреждения могут помочь вам идентифицировать потенциальные проблемы в конвертированном коде. Если вы хотите отключить предупреждения, используйте опцию NoWarning:

print(Unquoted, generate::C(f(x), NoWarning))
  t0 = f(x);

Параметры

e

Выражение, уравнение, список уравнений или матрица

Опции

NoWarning

Отключить предупреждения.

Возвращаемые значения

generate::C возвращает код С строки, содержащей.

Смотрите также

Функции MuPAD