首页 > 解决方案 > 如何将一维 matlab 数组代码转换为 Fortran 代码并获取值

问题描述

我想将此 Matlab 代码转换为 Fortran 代码。我在这里为 Matlab 和 Fortran 提供了代码。这里也给出了参数。

Matlab代码

L_10 = 1.0e-10;
e = 0.4;
n = 100000;
R = 3.1e+5;
K0_10 = 1.0e-10;
Ci  = 1.0e-15;
zv  = 1.2;
Dv  = 1
Rho = 2.0e-4
dt  = 0.01

for i=1:n
     L_10(i+1) = L_10(i) + dt*(e*K0_10- R*L_10(i)*Ci- zv*Dv*L_10(i)*Rho);
end 

我已经编写了以下 Fortran 代码,但它不起作用

real, dimension (:), allocatable:: L_10
real, parameter :: e = 0.4
integer, parameter :: n  = 100000
real, parameter :: R  = 3.1e+5
real, parameter :: K0_10 = 1.0e-10
real, parameter :: Ci = 1.0e-15
real, parameter :: zv = 1.2
real, parameter :: Dv = 1.0
real, parameter :: Rho  = 2.0e-4
real, parameter :: dt = 0.01
integer:: i

do i=1:n
   L_10(i+1) = L_10(i) + dt*(e*K0_10- R*L_10(i)*Ci- zv*Dv*L_10(i)*Rho);
end 

如何在 Fortran 代码中初始化数组值?迭代将如何在 Fortran 中工作?它在 Matlab 中运行良好。

标签: matlabfortran

解决方案


Fortran 中的这个程序产生与 Matlab 中相同的输出。数组的迭代在 Fortran 中的 do 循环中是不同的,如下所示。迭代在没有索引的情况下保存在 Fortran 中,但在 Matlab 中,它是通过索引完成的,如 Matlab 代码所示。

program oneDimention 
    implicit none

    integer, parameter :: n  = 10
    real, dimension (n):: L_10
    real, parameter :: e = 0.4
    real, parameter :: R  = 3.1e+5
    real, parameter :: K0_10 = 1.0e-10
    real, parameter :: Ci = 1.0e-15
    real, parameter :: zv = 1.2
    real, parameter :: Dv = 1.0
    real, parameter :: Rho  = 2.0e-4
    real, parameter :: dt = 0.01
    integer:: i

    L_10 = 1.0e-10

    do i=1,n
           L_10 = L_10(i) + dt*(e*K0_10- R*L_10(i)*Ci- zv*Dv*L_10(i)*Rho);
    print*,L_10(i)
    end do

end program oneDimention


推荐阅读