Matlab прекрасно понимает Фортран - проверьте документацию.И если вас это не устраивает, большинство строк в программе, которые выполняют какие-либо вычисления, могут быть напечатаны в консоли Matlab с очень небольшими изменениями.Если вы плохой программист, я советую вам потратить время на модификацию программы в Matlab, а не в C ++.Я напишу позже, если вы не получите никакой лучшей помощи, чем у меня есть время.
РЕДАКТИРОВАТЬ: во-первых, некоторая информация о с использованием исходных файлов Fortran от Matlab.Если вы действительно не хотите (или не можете, или у вас есть причины не делать этого) переписать Фортран в Matlab, а затем превратить его в файл MEX.Использование f2c (или чего-либо еще, включая ваше собственное время и усилия) для первого перевода Fortran в C или C ++ кажется мне бессмысленным.
Если вам не нравится эта идея, вот несколько идей по превращению Fortranв Matlab.
Во-первых, все строки, начинающиеся с C или c, являются комментариями, поэтому вам не нужно переводить их.Начните с вашего кода:
complex z,zeta,cw
dimension uz(100),vz(100),xi(100),eta(100),cp(100)
dimension xout(100),yout(100)
Эти строки объявляют ряд переменных.Вам не нужно объявлять переменные, прежде чем использовать их в Matlab, но иногда есть веские причины для этого.Вам не нужно делать это на Фортране, хотя в наши дни это повсеместно считается плохой идеей.Вы можете «объявить» эти переменные в Matlab с помощью таких операторов:
uz = zeros(100,1);
vz = zeros(100,1);
Заранее объявив их в Matlab, вы выделяете для них память один раз и избегаете некоторых проблем, снижающих производительность.
Следующие 2 строки:
open(unit=8,file='prof.dat',status='unknown')
open(unit=9,file='cp.dat',status='unknown')
открыть пару файлов для вывода.Позже они используются в операторах write
- забудьте их, напишите вместо них операторы Matlab, такие как save xout
.
Следующая строка - Fortran, но идентична в Matlab:
b=1.d0
Следующаялинии получают значение радиуса из консоли:
write(6,98)
format(2x,'input the radius of the a-circle in z plane')
read(5,99)a
format(f10.0)
снова, я предлагаю вам забыть об этом, просто используйте консоль Matlab, чтобы установить значение a
.Больше Фортрана, который не нужно переводить (хотя я предлагаю вам либо отбросить десятичные точки без следующих 0, либо поставить пробел между ними и последующим * -. * - это специальный оператор в Matlab):
xl=2.*a-1.+1./(2.*a-1.)
chord=2.+xl
del=a-b
Цикл do Фортрана такой же, как цикл Matlab for.Перепишите:
do 50 i=1,100
как
for i = 1:100
Как заметил один из респондентов, неясно, куда идет соответствующее конечное утверждение, вам придется это выяснить.Обратите внимание, что я просто предлагаю построчный перевод Фортрана на Matlab.Это не хорошо написанный Фортран, и я не предлагаю хорошо написанный Matlab, я оставлю это вам.
Этот лот не нужно переводить:
ri=i
theta=6.2832d0*ri/101.d0
x=-del+a*cos(theta)
y=a*sin(theta)
cmplx - это функция Фортрана, которая возвращает комплексное число, которое имеет вещественную часть x и мнимую часть y:
z=cmplx(x,y)
В Matlab это будет z = x + y * i.Fortran использует ** для возведения в степень, Matlab использует ^
zeta=z+b**2/z
и т. Д. И т. П.
Надеюсь, что это поможет.