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.
Генератор кода преобразовывает список уравнений к последовательности присвоений:
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);
Индексирование матриц 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];
Сгенерированный код C не включает присвоения для нулевых элементов матрицы:
A:= matrix([[1, 0, 0],[0, 0, 1]]): print(Unquoted, generate::C(A))
A[0][0] = 1.0; A[1][2] = 1.0;
Если первый индекс массива не 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;
Функция 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;
По умолчанию функция 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);
|
Выражение, уравнение, список уравнений или матрица |
|
Отключить предупреждения. |
generate::C
возвращает код С строки, содержащей.