错误的特征向量使用LAPACK eig函数来解决bessel函数

时间:2016-02-26 06:34:12

标签: python julia lapack

我想知道是否有人可以帮我解决问题。我一直在尝试使用有限差分来求解贝塞尔方程,因此我可以将问题转化为找到特征值和特征向量的问题。我期望从数值计算中获得的特征值与第一类贝塞尔方程的零点匹配,并且当绘制成特征向量时至少类似于贝塞尔函数的理论图。对于0,1,2和3阶贝塞尔方程获得的特征值似乎与期望值非常匹配(我将结果与每次前5个特征值的理论值进行比较)。阶数1,2和3的特征向量看起来与贝塞尔函数理论图非常相似,但对于零贝塞尔函数,特征向量看起来不像贝塞尔函数。 这是第一类零阶贝塞尔函数的代码:

    nr=500
    Nr=nr+2
    r=zeros(Float64,Nr)
    V=zeros(Float64,nr)
    A=zeros(Float64,nr,nr)
    for z=1:Nr
        r[z]=(z-1)/(Nr-1)
    end
    for z = 1:nr
        if z == 1 
            A[z,z]= (1/(r[z+1]*(r[z+1+1] - r[z-1+1])))*( ((r[z+1+1] +         r[z+1])/(r[z+1+1] - r[z+1])) )  
        end
        if z > 1
            A[z,z]= (1/(r[z+1]*(r[z+1+1] - r[z-1+1])))*( ((r[z+1] + r[z-1+1])/(r[z+1] - r[z-1+1])) + ((r[z+1+1] + r[z+1])/(r[z+1+1] - r[z+1])) )  
            A[z,z-1]=-(r[z+1]+r[z-1+1])/((r[z+1]-r[z-1+1])*sqrt(r[z+1]*r[z-1+1]*(r[z+1]-r[z-2+1])*(r[z+1+1]-r[z-1+1])))
            A[z-1,z]=A[z,z-1]
        end
    end
    deleteat!(r,1)
    deleteat!(r,Nr-1)
    W,V1=eigs(A,nev=5, which=:SM ,ritzvec=true)
    for z=1:5
        W[z]=sqrt(W[z])
    end
    plot(r,V1[:,1])

以下是从eigs获得的前五个特征值

    2.40483
    5.52007
    8.65368
    11.7914 
    14.9305 

此处还有零阶Bessel函数的理论零

    2.40482555769577 
    5.52007811028631    
    8.65372791291101    
    11.7915344390142    
    14.9309177084877

此处还有0,1,2和3阶特征向量的图。

Eigenvectors for Bessel function

所以...我希望有人可以帮助我...谢谢!

0 个答案:

没有答案