如何将一维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中效果很好。

解决方法

我可以立即看到Fortran的两个问题。您已选择使L_10可以分配,但是代码没有分配它。您可以通过将其声明更改为

来使其变为静态
real,dimension (n+1) :: L_10

如果选择此方法,则必须将声明移动到n本身声明之后,否则编译器将无法使用正向声明。另一种选择是保留声明不变,但插入语句

allocate(L_10(n+1))

在声明之后但在您尝试首先使用数组之前。查看文档中的allocate语句,并了解如何在出现问题的情况下报告状态代码。

然后您可以按照与Matlab中相同的方式设置所有元素的值,

L_10 = 1.0e-10

您对do语句的语法有误,应该以该行开头

do i = 1,n

使用Matlab使用冒号的逗号。

在Fortran中可能还存在其他一些我尚未发现的问题,但是您的编译器将为您提供帮助。

,

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

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...