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 возвращает код Фортран строки, содержащей.