generate
:: fortran
Сгенерируйте отформатированную строку Фортрана
Блокноты MuPAD® будут демонтированы в будущем релизе. Используйте live скрипты MATLAB® вместо этого.
Live скрипты MATLAB поддерживают большую часть функциональности MuPAD, хотя существуют некоторые различия. Для получения дополнительной информации смотрите, Преобразовывают Notebook MuPAD в Live скрипты MATLAB.
generate::fortran(e
, <NoWarning>, <Version = "versionName">)
generate::fortran(e)
генерирует код Фортран для выражения MuPAD® e
.
generate::fortran
возвращает отформатированную строку Фортрана, представляющую выражение, уравнение, список уравнений или матрицу.
Уравнение представляет присвоение в коде Фортран. Типом присвоения является double
.
При генерации кода Фортран для матрицы генератор присваивает только ненулевые элементы. Смотрите Пример 2.
Чтобы распечатать выводимую строку к файлу, используйте функцию fprint
. Чтобы удалить кавычки и расширить специальные символы как разрывы строки и вкладки, используйте параметр печати Unquoted
.
Используйте функцию generate::optimize
, чтобы оптимизировать код MuPAD прежде, чем преобразовать его в код Фортран. Смотрите Пример 4.
Опция NoWarning
позволяет вам отключить предупреждения. Смотрите Пример 5.
Опция Version
задает целевую версию компилятора Фортрана что использование generate::fortran
, чтобы сгенерировать код. Опциями является Fortran77
(значение по умолчанию), Fortran90
и Fortran95
. Смотрите Пример 6.
Генератор кода преобразовывает список уравнений к последовательности присвоений.
generate::fortran([x[1] = y[2 + i]^2*(y[1] + sin(z)), x[2] = tan(x[1]^4)]): print(Unquoted,%)
x(1) = (sin(z)+y(1))*y(i+2)**2 x(2) = tan(x(1)**4)
Сгенерированный код Фортран не включает присвоения для нулевых элементов матрицы.
A:= matrix([[1, 0, 0],[0, 0, 1]]): print(Unquoted, generate::fortran(A))
A(1,1) = 1.0D0 A(2,3) = 1.0D0
Если первый индекс массива не 1, то функция generate::fortran
выдает предупреждение.
A:= array(1..2, 2..3, [[1,2],[3,4]]): print(Unquoted, generate::fortran(A))
Warning: Array index 'A[1..2, 2..3]' out of range 1..n.
A(1,2) = 1.0D0 A(1,3) = 2.0D0 A(2,2) = 3.0D0 A(2,3) = 4.0D0
Функция generate::fortran
не оптимизирует ваш код.
print(Unquoted, generate::fortran([x = a + b, y = (a + b)^2])):
x = a+b y = (a+b)**2
Можно использовать функцию generate::optimize
прежде, чем преобразовать выражение MuPAD в код Фортран. Например, эта функция может сократить количество операций путем нахождения общих подвыражений.
print(Unquoted, generate::fortran( generate::optimize([x = a + b, y = (a + b)^2]) )):
x = a+b y = x**2
По умолчанию функция generate::fortran
может предупреждения о проблемах.
print(Unquoted, generate::fortran(gamma(x)))
Warning: Function 'gamma' requires a Fortran2008 compiler.
t0 = gamma(x)
Предупреждения помогают идентифицировать потенциальные проблемы в конвертированном коде. Чтобы отключить предупреждения, используйте опцию NoWarning
.
print(Unquoted, generate::fortran(gamma(x), NoWarning))
t0 = gamma(x)
Если предупреждение указывает, что требуемый компилятор является или Fortran90 или Fortran95, то можно подавить предупреждение путем определения правильной версии компилятора с помощью Version
. Например, функция ceiling
требует Fortran90 вместо Fortran77 по умолчанию.
generate::fortran(ceil(x))
Warning: Function 'ceiling' requires a Fortran90 compiler.
Задайте Version
как Fortran90
. Функция generate::fortran
не выдает предупреждение.
generate::fortran(ceil(x), Version = "Fortran90")
По умолчанию функция generate::fortran
использует целевую версию Фортрана Fortran77
, чтобы сгенерировать код. Чтобы задать Fortran90
или Fortran95
как целевая версия, используйте опцию Version
.
Сгенерируйте вывод для компилятора Fortran90 путем определения опции Version
как Fortran90
.
f := expand((x+1)^20): fcode90 := generate::fortran(f, Version = "Fortran90"): print(Unquoted, fcode90)
t0 = x*2.0D+1+x**2*1.9D+2+x**3*1.14D+3+x**4*4.845D+3+x**5*1.5504D+& &4+x**6*3.876D+4+x**7*7.752D+4+x**8*1.2597D+5+x**9*1.6796D+5+x**10*& &1.84756D+5+x**11*1.6796D+5+x**12*1.2597D+5+x**13*7.752D+4+x**14*3.& &876D+4+x**15*1.5504D+4+x**16*4.845D+3+x**17*1.14D+3+x**18*1.9D+2+x& &**19*2.0D+1+x**20+1.0D0
Форматирование кода для многострочных операторов в Fortran90
отличается от форматирования в цели по умолчанию Fortran77
.
|
Выражение, уравнение, список уравнений или матрица |
|
Отключить предупреждения. |
|
Задайте версию компилятора Фортрана. Версией по умолчанию является |
generate::fortran
возвращает код Фортран строки, содержащей.