求助 fortran语言怎么转成matlab语言,在线等!

程序不大是计算l理想导体散射的对于fortran的解读能力不够希望能帮帮忙谢谢啦!============================================... 程序不大 是计算l理想导体散射的 对于fortran的解读能力不够 希望能帮帮忙 谢谢啦
!==============================================================================
!此程序用此求解球体的电磁散射(解析结果),包括场,RCS,与电流
!==============================================================================
program main
implicit none

real(kind=8)::wave,k_num
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 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)
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
!=====================================================
展开
 我来答
sp120715437
2012-05-17 · TA获得超过182个赞
知道答主
回答量:84
采纳率:100%
帮助的人:58万
展开全部
我不会matlan,我用过fortran,给你在关键语句上加了一些备注,其他语句,都是计算性质的,应该很好理解。

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
!=====================================================
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式