您好!您哪里是否可以将大量的Fortran程序转换成Matlab程序? - 爱问答

(爱问答)

您好!您哪里是否可以将大量的Fortran程序转换成Matlab程序?


program main !主程序开始
implicit none !变量必须定义才能使用
real(kind=8)::wave,k_num !定义变量:real实型,kind=8表示占用8字节内存
real(kind=8)::radius
real(kind=8)::theta,phi
integer::n !整形
real(kind=8),allocatable::p0(:),p1(:)
complex(kind=8),allocatable::h0(:),h1(:),h2(:) !复数?这个没用过
real(kind=8)::dr
complex(kind=8)::e_scat(3)
complex(kind=8)::ai=(0.0,1.0)
real(kind=8)::pi=3.1415926
common /cl/ pi,ai,k_num !定义一块共享内存空间,在主子程序之间传递变量
!------------------------------------------------------------------------------
wave=1.0
k_num=2.0*pi/wave
theta=0.0
phi=0.0
theta=theta*pi/180.0
phi=phi*pi/180.0
n=30
allocate(p0(0:n),p1(0:n),h0(0:n),h1(0:n),h2(0:n)) !给前面声明的变量配置空间
call legendre(n,theta,p0,p1) !call为调用子程序
call hankel(n,dr,h0,h1,h2)
stop !结束程序执行
end
!==============================================================================
!以下求勒让德多项式
!==============================================================================
subroutine legendre(n,theta,out1,out2) !子过程
implicit none !变量必须定义才能使用
integer::n !阶数
real(kind=8)::theta,x !角度
real(kind=8)::out1(0:n),out2(0:n) !勒让德多项式的值以其导数值
integer::i
!------------------------------------------------------------------------------
if(theta<0.0.or.theta>3.1415926)write(*,*)"所输角度应当在(0,pi)内"
if(theta<0.0.or.theta>3.1415926)stop !结束程序执行
x=dcos(theta) ! DCOS专用于求双精度的实型数据的余弦值,返回值也为双精度的实型数据。
do i=0,n
if(i==0)out1(i)=1.0
if(i==0)out2(i)=0.0
if(i==1)out1(i)=x
if(i==1)out2(i)=1.0
if(i>=2)then
out1(i)=((2.0*i-1.0)*x*out1(i-1)-(i-1.0)*out1(i-2))/i
out2(i)=x*out2(i-1)+(i+1)*out1(i-1)
end if
end do
return !返回调用该子程序的程序
end subroutine !子过程到此结束
!==============================================================================
!以下求勒让德多项式
!==============================================================================
subroutine hankel(n,dr,out0,out1,out2) !子过程
implicit none
integer::n,i
real(kind=8)::dr
complex(kind=8)::out0(0:n),out1(0:n),out2(0:n)
complex(kind=8)::ai
real(kind=8)::pi
real(kind=8)::k_num
common /cl/ pi,ai,k_num
!------------------------------------------------------------------------------
do i=0,n
out1(i)=(ai**i)*cdexp(-ai*dr)
out0(i)=ai*out1(i)
out2(i)=-out0(i)
end do
return
end subroutine

下一篇:为什么我的fastqc结果中没有k-mer一项

上一篇:关于java的问题,表示什么

热门标签:
excel 网盘 破解 word dll
最新更新:
微软重新评估新的Outlook的使用时机 联想推出搭载联发科Helio G80芯片组的Tab M9平板 英特尔创新大赛时间确定! 微软Edge浏览器在稳定渠道中推出Workspaces功能 英伟达RTX4060TiGPU推出MaxSun动漫主题! 谷歌地图为用户提供了街景服务! GameSir 在T4 Kaleid中推出了一款出色的控制器! 微软开始在Windows 11 中测试其画图应用程序的新深色模式! LG电子推出全球首款无线OLED电视 英伟达人工智能芯片崭露头角! Steam Deck可以玩什么游戏-Steam Deck价格限时优惠 雷蛇推出CobraPro鼠标 Kindle电子阅读器可以访问谷歌商店吗 Windows10如何加入组策略 window10图片查看器怎么没有了?