matlab - 如何将一维 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 中的这个程序产生与 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
推荐阅读
- jenkins - Cobertura 插件(Jenkins):[...] 您输入的模式是否与正确的目录相关?您是否生成了 XML 报告
- ios - `Interface Builder 文件中的未知类。` 错误和未调用自定义 UIView 的 `init?(coder:)`
- python - Nosetests 错误 - 源代码中的空字节
- terraform - Terraform Openstack:部署具有与现有安全组相同的安全组的新实例
- modbus - 使用 modbus 将 Home Assistant 连接到 PLC
- json - 雪花抛出错误(解析 JSON 时出错:错位 { )
- reactjs - How to reduce react app build time and understanding behaviour of webpack when bundling
- wechat - What's the difference between onload () and Onshow () in small program development?
- sql - 通过选择从表中获取一些值
- python - 实现二元交叉熵损失给出了与 Tensorflow 不同的答案