Fortran 90: Inclassable déclaration à (1) lors de l'appel d'une fonction

Je suis relativement nouveau pour fortran et j'ai une mission pour trouver la quadrature poids et les points où les points sont les zéros de la n-ième polynôme de legendre (trouvée en utilisant la méthode de newton); j'ai fait des fonctions pour trouver la valeur de Pn(x) et P n(x) à sous en newtons méthode a Cependant alors qu'en réalité, l'utilisation des fonctions de mon quadrature de sous-routine, il revient avec:

Coursework2a.f90:44.3:

x = x - P(n,x)/dP(n,x)
1
Erreur: Inclassable déclaration à (1)

Quelqu'un sait toutes les raisons pour lesquelles cette déclaration pourrait être considéré comme inclassable?

subroutine Quadrature(n)

implicit none
integer, parameter :: dpr = selected_real_kind(15) !Double precision
real(dpr) :: P, dP, x, x_new, error = 1, tolerance = 1.0E-6, Pi = 3.141592 !Define Variables
integer, intent(in) :: n
integer :: i

!Next, find n roots. Start with first guess then iterate until error is greater than some tolerance.

do i = 1,n

    x = -cos(((2.0*real(i)-1.0)/2.0*real(n))*Pi)

    do while (error > tolerance)

        x_new = x

        x = x - P(n,x)/dP(n,x)

        error = abs(x_new-x)


    end do 

    print *, x

end do

end subroutine Quadrature
  • Vous déclarez P et dP comme des variables, c'est pourquoi le compilateur se plaint. Où sont les fonctions P et dP défini? si elles sont définies à l'intérieur d'un module, il suffit d'inclure le USE module_name déclaration
  • Aucun de mes 3 compilateurs signalé le problème que vous l'avez mentionné. Êtes-vous sûr que c'est le bon code? Le vieux chemin de des années soixante est d'utiliser le external P, dP. La façon moderne est l'utilisation de modules ou au moins de l'interface des blocs.
  • BTW, si vous pensez que real(dpr) :: Pi = 3.141592 définit pi avec précision double précision, vous vous trompez.
  • Ce n'est pas réellement le cas P et dP sont explicitement un type, mais elles ne sont pas explicitement déclarées comme variables.
  • Mon professeur nous a dit de définir les fonctions de ce genre (mais nous n'avons pas appris les modules encore). Comment dois-je définir Pi avec la double précision, Vladimir? J'ai réussi à me débarrasser de l'erreur en définissant une variable "ratio" = P(n,x)/dP(n,x) et de prendre que loin de newton la méthode au lieu de cela, Cependant, ma première hypothèse semble garder de me donner -1 (bien -0.999999917..) et je n'ai aucune idée pourquoi, donc, je continue de trouver la même racine pour chaque boucle
InformationsquelleAutor malonej | 2014-10-26