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.

Примеры

Пример 1

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

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)

Пример 2

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

A:= matrix([[1, 0, 0],[0, 0, 1]]):
print(Unquoted, generate::fortran(A))
      A(1,1) = 1.0D0
      A(2,3) = 1.0D0

Пример 3

Если первый индекс массива не 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

Пример 4

Функция 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

Пример 5

По умолчанию функция 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")

Пример 6

По умолчанию функция 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.

Параметры

e

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

Опции

NoWarning

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

Version

Задайте версию компилятора Фортрана. Версией по умолчанию является Fortran77. Значениями Version является Fortran77, Fortran90 и Fortran95. Например, generate::fortran(..., Version = "Fortran90") использует версию компилятора Fortran90.

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

generate::fortran возвращает код Фортран строки, содержащей.

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

Функции MuPAD