Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Plot 数学表达式中(1)处的未分类语句_Plot_Fortran_Subroutine_Polynomial Math - Fatal编程技术网

Plot 数学表达式中(1)处的未分类语句

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是角动量

我的第一堂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)的值。我一直在犯错误

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
语句一样。

请告诉我们完整的错误消息。请参阅。完整的错误消息很重要。