Plot 数学表达式中(1)处的未分类语句
我的第一堂Fortran课是绘制径向Sturmian函数的概率密度函数。如果您感兴趣,可以使用径向Sturmian函数来绘制氢原子的动量空间本征函数 为了产生这些径向函数,首先需要产生一些称为Gegenbauer多项式的多项式,表示为 Cba(x) 其中a和b应相互叠放。我们需要这些多项式,因为Sturmian(我们称之为R_n,l)是这样定义的 R_n,l(p)=n pl⁄(p2+k2)l+2 Cn-l-1l+1(p2-k2⁄p2+k2) 其中N是归一化常数,p是动量,N是主量子数,l是角动量,k是常数。归一化常数在那里,所以当我把这个函数平方时,它会产生氢原子中电子动量的概率分布 使用以下递推关系生成Gegenbauer多项式: Cnl(x)=1⁄n[2(l+n-1)x Cn-1l(x)-(2l+n-2)Cn-2l(x)] 对于C0l(x)=1和C1l(x)=2lx,正如您可能已经注意到的,l是固定的,但n不是。在我的程序开始时,我将指定l和n,并计算出我想要绘制的径向函数所需的Gegenbauer多项式 目前我在代码中遇到的问题都在我的子程序中,用于计算0到3之间p的增量值的Gegenbauer多项式Cn-l-1l+1(p2-k2⁄p2+k2)的值。我一直在犯错误Plot 数学表达式中(1)处的未分类语句,plot,fortran,subroutine,polynomial-math,Plot,Fortran,Subroutine,Polynomial Math,我的第一堂Fortran课是绘制径向Sturmian函数的概率密度函数。如果您感兴趣,可以使用径向Sturmian函数来绘制氢原子的动量空间本征函数 为了产生这些径向函数,首先需要产生一些称为Gegenbauer多项式的多项式,表示为 Cba(x) 其中a和b应相互叠放。我们需要这些多项式,因为Sturmian(我们称之为R_n,l)是这样定义的 R_n,l(p)=n pl⁄(p2+k2)l+2 Cn-l-1l+1(p2-k2⁄p2+k2) 其中N是归一化常数,p是动量,N是主量子数,l是角动量
Unclassified statement at (1)
但我看不出问题是什么
program Radial_Plot
implicit none
real, parameter :: pi = 4*atan(1.0)
integer, parameter :: top = 1000, l = 50, n = 100
real, dimension(1:top) :: x, y
real increment
real :: a=0.0, b = 2.5, k = 0.3
integer :: i
real, dimension(1:top) :: C
increment = (b-a)/(real(top)-1)
x(1) = 0.0
do i = 2, top
x(i) = x(i-1) + increment
end do
Call Gegenbauer(top, n, l, k, C)
y = x*C
! y is the function that I shall be plotting between values a and b.
end program Radial_Plot
Subroutine Gegenbauer(top1, n1, l1, k1, CSub)
! This subroutine is my attempt to calculate the Gegenbauer polynomials evaluated at a certain number of values between c and d.
implicit none
integer :: top1, i, j, n1, l1
real :: k1, increment1, c, d
real, dimension(1:top1) :: x1
real, dimension(1:n1 - l1, 1:top1) :: C1
real, dimension(1:n1 - l1) :: CSub
c = 0.0
d = 3.0
k1 = 0.3
n1 = 50
l1 = 25
top1 = 1000
increment1 = (d - c)/(real(top1) - 1)
x1(1) = 0.0
do i = 2, top1
x1(i) = x1(i-1) + increment1
end do
do j = 1, top1
C1(1,j) = 1
C1(2,j) = 2(l1 + 1)(x1(i)^2 - k1^2)/(x1(i)^2 + k1^2)
! All the errors occurring here are all due to, and I quote, 'Unclassifiable statement at (1)', I can't see what the heck I have done wrong.
do i = 3, n1 - l1
C1(i,j) = 2(((l1 + 1)/n1) + 1)(x1(i)^2 - k1^2)/(x1(i)^2 + k1^2)C1(i,j-1) - ((2(l1+1)/n1) + 1)C1(i,j-2)
end do
CSub(j) = Cn(n1 - l1,j)^2
end do
return
end Subroutine Gegenbauer
正如francesalus正确指出的那样,问题是因为您使用
^
而不是**
进行幂运算。此外,您不会将*
放在相乘的术语之间
C1(1,j) = 1
C1(2,j) = 2*(l1 + 1)*(x1(i)**2 - k1**2)/(x1(i)**2 + k1**2)
do i = 3, n1 - l1
C1(i,j) = 2 * (((l1 + 1)/n1) + 1) * (x1(i)**2 - k1**2) / &
(x1(i)**2 + k1**2)*C1(i,j-1) - ((2(l1+1)/n1) + 1) * &
C1(i,j-2)
end do
CSub(j) = Cn(n1 - l1,j)**2
既然你开始了,我有一些建议。学习将所有子程序和函数放入模块(除非它们是内部的)。没有理由在子例程的and处使用
return
语句,就像在程序的and处不需要使用stop
语句一样。请告诉我们完整的错误消息。请参阅。完整的错误消息很重要。