Bibm@th

Forum de mathématiques - Bibm@th.net

Bienvenue dans les forums du site BibM@th, des forums où on dit Bonjour (Bonsoir), Merci, S'il vous plaît...

Vous n'êtes pas identifié(e).

#1 06-05-2013 09:29:51

math@
Membre
Inscription : 28-11-2011
Messages : 13

[Fortran] Demande de l'aide en fortran

Bonjour tout le monde,

voilà j'ai un projet à faire c la résolution d'un système linéaire de par la méthode du gradient conjugué j'ai fait tout le programme (presque) mais j'ai un problème avec la solution finale elle explose ça fait des jours que je travaille sur ce projet mais je comprends pas d'où vient le problème si quelqu'un peut m'aider je serai vraiment reconnaissante.

Merci d'avance.

PS: j'ai pas mis mon code car il est long je vois pas comment insérer une pièce jointe!

Hors ligne

#2 06-05-2013 11:33:48

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 17 385

Re : [Fortran] Demande de l'aide en fortran

Bonjour,

Il va te falloir espérer que quelqu'un connaissant le fortran passe...
Mais dans quel délai ?...
Sinon, je ne saurais trop te conseiller de t'adresser à un forum spécialisé dans le fortran :
http://www.developpez.net/forums/f157/a … s/fortran/

@+

Hors ligne

#3 06-05-2013 12:52:09

math@
Membre
Inscription : 28-11-2011
Messages : 13

Re : [Fortran] Demande de l'aide en fortran

Salut yoshi

j'ai essayé déjà dans ce forum mais ça n'a pas marché il me faut un connaisseur de fortran et des méthodes numériques en même temps  mais en tout les cas merci je vais voir ailleurs

Hors ligne

#4 06-05-2013 16:24:18

Denis
Invité

Re : [Fortran] Demande de l'aide en fortran

Bonjour,
J'ai quelques questions qui peuvent vous aider:
1) que veut dire exploser, out of memory ? stack overflow?, ne répond pas dans le temps espéré?, etc...
2) avez-vous testé votre programme sur des systèmes linéaires petits (type 1x1)n avec ou sans solution etc...?
3) avez vous analysé la complexité de votre programme ?
Cordialement.
Denis

#5 07-05-2013 08:23:05

MathRack
Membre
Inscription : 02-04-2012
Messages : 78

Re : [Fortran] Demande de l'aide en fortran

Bonjour,

Vous pouvez mettre votre code sur pastebin et poster le lien ici...

Avez-vous testé votre code avec une matrice simple ? (identité par exemple...)

Cordialement,
Mathrack

Hors ligne

#6 13-05-2013 10:16:57

math@
Membre
Inscription : 28-11-2011
Messages : 13

Re : [Fortran] Demande de l'aide en fortran

Bonjour tout le monde,

Je suis vraiment désolée de ne pas pouvoir répondre plus tôt à vos message, ma matrice est un peu "spéciale" je peux pas prendre une taille petite le problème qui n’embête c'est la condition initiale qui est une gaussienne normalement je dois avoir une gaussienne sur un intervalle [-5,5] centré en 0 mais je trouve pas ça et même pour les valeurs des abscisse je trouve x= 50, 100 ...
Volà la partie du code de la solution initiale j'espère avoir des réponse merci d'avance


program gaussienne
implicit none

integer, parameter :: n=100
integer :: i
real*8, dimension(:), allocatable :: U
real*8:: pi,sigma,x1,x2,l,dx,abcs
allocate(u(2*n+2))
x1=-5.D0
x2=5.D0
l=x2-x1
dx=l/(2*n+1)

 pi = 4.D0*datan(1.D0)
  sigma = .15D0
  !print*,pi
  do i = 1,2*n+2
     abcs = i * dx - l/2.D0
     !U(i) = (1.D0/sqrt(2.D0*pi))*exp(-.5D0*abcs**2)
     U(i) = 1.D0/sqrt(2.D0*pi)/sigma*exp((-.5D0*abcs**2)/sigma**2)
  end do
print*,u
open(UNIT = 10, FILE = 'solution_ini.dat')
  do i = 1,2*n+2
     write(10,*) U(i)
  end do
  close(10)
end program gaussienne
 

Hors ligne

#7 13-05-2013 13:02:38

MathRack
Membre
Inscription : 02-04-2012
Messages : 78

Re : [Fortran] Demande de l'aide en fortran

Bonjour,

Si tu nous communique qu'une partie de ton code, on ne pourra t'aider qu'en partie...

math@ a écrit :

... normalement je dois avoir une gaussienne sur un intervalle [-5,5] centré en 0 mais je trouve pas ça et même pour les valeurs des abscisse je trouve x= 50, 100 ...

Je ne vois pas dans quelle partie de ton programme tu affiches la variable abscisse (abcs).

  - une gaussienne, c'est une fonction dont le support n'est pas borné. Donc si tu génères des valeurs aléatoires qui suivent une loi gaussienne, tu en auras en dehors de l'intervalle [-5,5]. Une gaussienne est définie par sa moyenne (0 dans ton cas) et son écart-type (sigma=0.15 dans ton cas???).
  - si tu veux juste générer l'enveloppe de la gaussienne sur l'intervalle [-5,5], tu dois modifier la ligne 18 :


     abcs = (i-1) * dx - l/2.D0
 

La variable abcs va alors parcourir l'intervalle [-5,5] (bornes comprises).
  - Je te conseille d'écrire proprement la fonction gaussienne juste pour être certain qu'il n'y ait pas de surprises :


     U(i) = exp( -0.5D0 * (abcs**2) / (sigma**2) ) / ( sqrt(2.D0*pi) * sigma )
 

  - Et pour vérifier / tracer l'enveloppe de ta gaussienne, je te conseille :


  do i = 1,2*n+2
     write(10,*) (i-1) * dx - l/2.D0, U(i)
  end do
 

Ton fichier va contenir des lignes de la forme " x(i), U(x(i))". Très facile à tracer avec xmgrace par exemple :
"xmgrace -nxy solution_ini.dat "

Cordialement,
Mathrack

Hors ligne

#8 14-05-2013 04:03:09

denis7cordas
Membre
Inscription : 06-05-2013
Messages : 1

Re : [Fortran] Demande de l'aide en fortran

Bonjour,

Suite à la réponse de Mathrack, sans être un expert en Fortran, je donnerai les indications suivantes, valables quelque soit le langage de programmation.

1) D'une manière générale dans un programme de "calcul numérique", je pense par expérience qu' il vaut mieux pré calculer tout ce qu'on peut pré calculer. Par exemple les constantes :

INTEGER N
DOUBLE PRECISION PI,TWOPI,RTWOPI,SIGMA, DOUBLESIGMACARRE, DX
PARAMETER(PI=3.141592653589793D0,TWOPI=2D0*PI,RTWOPI=SQRT(TWOPI),SIGMA=.15D0, DOUBLESIGMACARRE=2D0*SIGMA*SIGMA, N=100, DX=1D0/(2D0*N+1)


2) Il vaut mieux utiliser les expressions algébriques simples et quand on peut éviter les puissances. Simplifier les expressions et éviter les divisions en virgule flottante à répétition c'est moins coûteux et plus précis suivant les machines:

abcs = (i-1) * DX - l/2.D0
U(i) = 1/(exp( (abcs*abcs) /DOUBLESIGMACARRE ) * (RTWOPI * SIGMA ))

Je ne garantis pas que ma syntaxe soit la bonne mais en gros  l'idée c'est de laisser le moins possible de travail  à l'optimiseur.

3) Si l'édition du graphe proposé par Mathrack ne fonctionne pas, je testerai avec quelques valeurs de N telle que 1, 5, 10.



Cordialement
Denis

Hors ligne

#9 14-05-2013 11:02:06

math@
Membre
Inscription : 28-11-2011
Messages : 13

Re : [Fortran] Demande de l'aide en fortran

Bonjour,

Merci pour votre aide maintenant ma condition initiale est bien un gaussienne centrée en 0.

Cordialement

Math@

Hors ligne

#10 15-05-2013 09:55:29

math@
Membre
Inscription : 28-11-2011
Messages : 13

Re : [Fortran] Demande de l'aide en fortran

Bonjour,

Voilà le code que j'ai implémenté. je travaille sur les équation de green naghdi, le but c'est résoudre un système de type tAAX=tACY ou tA est la transposée de A et  C est une matrice aussi
l'erreur c dans le calcul de la solution finale et je comprends pas d'où vient le problème

http://pastebin.com/5kkyec1t
http://pastebin.com/YhbynDPi
http://pastebin.com/WyAmsexR
http://pastebin.com/7MdG9w6p
http://pastebin.com/LnZeLRLG
http://pastebin.com/9iidjXCi
http://pastebin.com/1twEPtSt
le système que je veux résoudre
[tex]
$\left\{\begin{array}{ll}
\partial_{t}\zeta + h\partial_{x}u = 0\\\\
\left( I-\dfrac{\alpha}{3}h^{2}\partial_{xx}\right) \left( \partial_{t}u+\left( 1-\dfrac{1}{\alpha}\right) g\partial_{x}\zeta\right) +\dfrac{g}{\alpha}\partial_{x}\zeta = 0\\
\end{array}\right.$
[/tex]
le schéma numérique
[tex]

$\left\{\begin{array}{ll}
\zeta_{i}^{n+1} = \zeta_{i}^{n} - h\dfrac{\delta t}{4\delta x}(u_{i+1}^{n+1}-u_{i-1}^{n+1} + u_{i+1}^{n}-u_{i-1}^{n})\\\\

\dfrac{\alpha}{12}\left(1-\dfrac{1}{\alpha}\right)g \zeta^{n+1}_{i-2}-\left(\left(1-\dfrac{1}{\alpha}\right)g\dfrac{\delta x^2}{4h^2}+\dfrac{\alpha}{6}\left(1-\dfrac{1}{\alpha}\right)g+\dfrac{g\delta x^2}{4\alpha h^2}\right)\zeta^{n+1}_{i-1}+\\\\ \left(\left(1-\dfrac{1}{\alpha}\right)g\dfrac{\delta x^2}{4h^2}+\dfrac{\alpha}{6}\left(1-\dfrac{1}{\alpha}\right)g+\dfrac{g\delta x^2}{4\alpha h^2}\right)\zeta^{n+1}_{i+1}-\dfrac{\alpha}
{12}\left(1-\dfrac{1}{\alpha}\right)g \zeta^{n+1}_{i+2}\\\\-\dfrac{\alpha\delta x}{3\delta t}U^{n+1}_{i-1}+\left(\dfrac{\delta x^3}{\delta t h^2}+\dfrac{2\alpha\delta x}{3\delta t}\right)U^{n+1}_{i}-\dfrac{\alpha\delta x}{3\delta t}U^{n+1}_{i+1} =

-\dfrac{\alpha}{12}\left(1-\dfrac{1}{\alpha}\right)g \zeta^{n}_{i-2}+\\\\
\left(\left(1-\dfrac{1}{\alpha}\right)g\dfrac{\delta x^2}{4h^2}+\dfrac{\alpha}{6}\left(1-\dfrac{1}{\alpha}\right)g+\dfrac{g\delta x^2}{4\alpha h^2}\right)\zeta^{n}_{i-1}-
\left(\left(1-\dfrac{1}{\alpha}\right)g\dfrac{\delta x^2}{4h^2}+\dfrac{\alpha}{6}\left(1-\dfrac{1}{\alpha}\right)g+\dfrac{g\delta x^2}{4\alpha h^2}\right)\zeta^{n}_{i+1}\\\\-\dfrac{\alpha}{12}\left(1-\dfrac{1}{\alpha}\right)g \zeta^{n}_{i+2}-\dfrac{\alpha\delta x}{3\delta t}U^{n}_{i-1}+\left(\dfrac{\delta x^3}{\delta t h^2}+\dfrac{2\alpha\delta x}{3\delta t}\right)U^{n}_{i}-\dfrac{\alpha\delta x}{3\delta t}U^{n}_{i+1}

\end{array}\right.$   

[/tex]

j'ai multiplié la 2ème équation par dx^3/h_0^2
les coeffs des matrices

[tex]
$a_1 = \dfrac{\alpha\delta t}{12}$\\\\
$a_2 = \left(1-\dfrac{1}{\alpha}\right)g $\\\\
$a = a_1*a_2$\\\\
$b_1 = \dfrac{g\delta t\delta x^2}{4h_0^2}$\\\\
$b_2 = \dfrac{\alpha\delta t}{6}$\\\\
$b = b_1+(b_2*a_2)$\\\\
$c = \dfrac{\alpha\delta x}{3}$\\\\
$d_1 = \dfrac{\delta x^3}{h_0^2}$\\\\
$d_2 = \dfrac{2\alpha\delta x}{3}$\\\\
$e = \dfrac{\delta t h_0}{4\delta x}$\\\\
[/tex]

la matrice A

[tex]
$ \left(\begin{array}{c|c}

\begin{matrix}
1 &0 &0 &0 &0 &\cdots &0\\
0 &1 &0 &0  &0 &\cdots &0 \\
0 &0 &1 &0 &0 &\cdots &0\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
0 &0 &0 &\cdots &0 &1 &0 \\
0 &0 &0 &0 &\cdots &0 &1

\end{matrix}

&
  \begin{matrix}
0 &e &0 &0 &\cdots &0 &-e\\
-e &0 &e &0  &0 &\cdots &0\\
0 &-e &0 &e &0 &0 &\cdots\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
0 &0 &\cdots &0 &-e &0 &e\\
e &0 &0 &\cdots &0 &-e &0

\end{matrix}\\

\hline

\begin{matrix}
0 &b &-a &0 &\cdots &a &-b\\
-b &0 &b &-a  &0 &\cdots &a\\
a &-b &0 &b &-a &0 &\cdots\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
-a &0 &\cdots &a &-b &0 &b\\
b &-a &0 &\cdots &a &-b &0


\end{matrix}
&

\begin{matrix}
d &-c &0 &0 &0 &\cdots &-c\\
-c &d &-c &0  &0 &0 &\cdots\\
0 &-c &d &-c &0 &\cdots &0\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
0 &0 &0 &\cdots &-c &d &-c \\
-c &0 &0 &0 &\cdots &-c &d

\end{matrix}

\end{array}\right)$
[/tex]

la transposée de A
[tex]
$ \left(\begin{array}{c|c}

\begin{matrix}
1 &0 &0 &0 &0 &\cdots &0\\
0 &1 &0 &0  &0 &\cdots &0 \\
0 &0 &1 &0 &0 &\cdots &0\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
0 &0 &0 &\cdots &0 &1 &0 \\
0 &0 &0 &0 &\cdots &0 &1

\end{matrix}

&
  \begin{matrix}
0 &e &0 &0 &\cdots &0 &-e\\
-e &0 &e &0  &0 &\cdots &0\\
0 &-e &0 &e &0 &0 &\cdots\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
0 &0 &\cdots &0 &-e &0 &e\\
e &0 &0 &\cdots &0 &-e &0

\end{matrix}\\

\hline

\begin{matrix}
0 &b &-a &0 &\cdots &a &-b\\
-b &0 &b &-a  &0 &\cdots &a\\
a &-b &0 &b &-a &0 &\cdots\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
-a &0 &\cdots &a &-b &0 &b\\
b &-a &0 &\cdots &a &-b &0


\end{matrix}
&

\begin{matrix}
d &-c &0 &0 &0 &\cdots &-c\\
-c &d &-c &0  &0 &0 &\cdots\\
0 &-c &d &-c &0 &\cdots &0\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
0 &0 &0 &\cdots &-c &d &-c \\
-c &0 &0 &0 &\cdots &-c &d

\end{matrix}

\end{array}\right)$
[/tex]

la matrice C

[tex]
$ \left(\begin{array}{c|c}
      \begin{matrix}
1 &0 &0 &0 &0 &\cdots &0\\
0 &1&0 &0  &0 &\cdots &0 \\
0 &0 &1 &0 &0 &\cdots &0\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
0 &0 &0 &\cdots &0 &1 &0 \\
0 &0 &0 &0 &\cdots &0 &1

\end{matrix}
 
&
\begin{matrix}
0 &-e &0 &0 &\cdots &0 &e\\
e &0 &-e &0  &0 &\cdots &0\\
0 &e &0 &-e &0 &0 &\cdots\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
0 &0 &\cdots &0 &e &0 &-e\\
-e &0 &0 &\cdots &0 &e &0


\end{matrix}\\

\hline
\begin{matrix}
0 &-b &a &0 &\cdots &-a &b\\
b&0 &-b &a  &0 &\cdots &-a\\
-a &b &0 &-b &a &0 &\cdots\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
a &0 &\cdots &-a &b &0 &-b\\
-b &a &0 &\cdots &-a &b &0
\end{matrix}

&
  \begin{matrix}
d &-c &0 &0 &0 &\cdots &-c\\
-c &d &-c &0  &0 &0 &\cdots\\
0 &-c &d &-c &0 &\cdots &0\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
0 &0 &0 &\cdots &-c &d &-c \\
-c &0 &0 &0 &\cdots &-c &d

\end{matrix}

\end{array}\right)$
[/tex]
Si quelqu'un peut m'aider je serai vraiment reconnaissante.
Merci d'avance

Cordialement
math@

Hors ligne

#11 15-05-2013 11:02:29

MathRack
Membre
Inscription : 02-04-2012
Messages : 78

Re : [Fortran] Demande de l'aide en fortran

Bonjour,

Il y a un bon petit volume de code. Je vais jeter un oeil plus tard dans la journée mais ça va me prendre un peu de temps pour te répondre. L'erreur est visible dans la solution finale... Mais l'origine de l'erreur peut être dans nimporte quelle étape du programme!

Concernant les informations dans ton post :
1 - Tu notes X les variables au pas de temps k+1 et Y les variables au pas de temps k?
2 - Ok pour le système à résoudre. Quelles sont les conditions aux limites / conditions initiales?
3 - Le premier schéma numérique me semble OK. Le deuxième c'est vraiment l'usine à gaz...
4 - Dans les matrices décrites, il n'y a jamais les coefficients a1, a2, b1, b2, d1,d2?
5 - La matrice tA est identique à A dans ton post... On parle bien de l'opération de transposition classique ?
6 - La majorité des schémas numériques ont un domaine de stabilité. En dehors de ce domaine de stabilité, le calcul est souvent instable et conduit à une solution fausse. As-tu vérifié l'existence d'un critère de stabilité pour ton schéma numérique? (la condition CFL limite souvent le pas de temps par exemple)
7 - Est-ce que ces équations ont une solution analytique? (par exemple pour tester le programme sur une solution stationnaire...)

Dans le programme principal, tu as :
abcs = i * dx - l/2.D0
Tu souhaites donc que la variable abcs couvre un intervalle qui commence après xdeb et termine après xfin?

Cordialement,
MathRack

Hors ligne

#12 15-05-2013 11:15:19

math@
Membre
Inscription : 28-11-2011
Messages : 13

Re : [Fortran] Demande de l'aide en fortran

Bonjour MathRack,

1 - j'ai noté X les varibles au pas de temps k+1 et Y les variable au pas de temps K.
2 - Les conditions aux limites sont des conditions périodiques et la conditions initiale c'est une gaussienne.
3 - Pour le schéma j'ai utilisé Crank Niclson en  temps et des schéma centrés en espace.
4 - j'ai utilisé les coeffs a1,a2,b1,b2 ... car les coefficients a,b,d ont une syntaxe énorme est j'avais peur de me tromper c'est pour cette raison que j'ai utilisé  a1,a2 ...
5 - je me suis trompé dans la matrice et voilà la bonne matrice
[tex]
\left(\begin{array}{c|c}
   
    \begin{matrix}
1 &0 &0 &0 &0 &\cdots &0\\
0 &1&0 &0  &0 &\cdots &0 \\
0 &0 &1 &0 &0 &\cdots &0\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
0 &0 &0 &\cdots &0 &1 &0 \\
0 &0 &0 &0 &\cdots &0 &1

\end{matrix}

&\begin{matrix}
0 &-b &a &0 &\cdots &-a &b\\
b &0 &-b &a  &0 &\cdots &-a\\
-a &b &0 &-b &a &0 &\cdots\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
a &0 &\cdots &-a &b &0 &-b\\
-b &a &0 &\cdots &-a &b &0


\end{matrix}\\

\hline

\begin{matrix}
0 &-e &0 &0 &\cdots &0 &e\\
e &0 &-e &0  &0 &\cdots &0\\
0 &e &0 &-e &0 &0 &\cdots\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
0 &0 &\cdots &0 &e &0 &-e\\
-e &0 &0 &\cdots &0 &e &0

\end{matrix}
&
\begin{matrix}
d &-c &0 &0 &0 &\cdots &-c\\
-c &d &-c &0  &0 &0 &\cdots\\
0 &-c &d &-c &0 &\cdots &0\\
\vdots &\ddots &\ddots &\vdots\\
\vdots &\ddots &\ddots &\vdots\\
0 &0 &0 &\cdots &-c &d &-c \\
-c &0 &0 &0 &\cdots &-c &d

\end{matrix}
 
\end{array}\right)
[/tex]
6 - 7 - J'ai pas calculé la solution analytique car l'équation est compliquée

Merci et bonne journée

math@

Hors ligne

#13 15-05-2013 13:08:11

MathRack
Membre
Inscription : 02-04-2012
Messages : 78

Re : [Fortran] Demande de l'aide en fortran

Re,

1 - Dans le programme principal, tu as :
abcs = i * dx - l/2.D0
Tu souhaites donc que la variable abcs couvre un intervalle qui commence après xdeb et termine après xfin?

2 - La gaussienne utilisée comme condition initiale c'est un peu embêtant :
      - la fonction est bien périodique, même valeur en x=-5 et x=5 car elle est paire
      - la dérivée première n'est pas périodique car elle est impaire
Donc la condition initiale est continue, dérivable mais la dérivée première n'est pas continue. Et dans l'EDP, il y a des dérivées 2 & 3...

3 - Si on pose u=0, la première équation du système montre que [tex]\zeta[/tex] ne va pas dépendre du temps. La deuxième équation du système donne :
[tex]0 = g \partial_x \left( \zeta - \frac{h^2}{3}\left( \alpha - 1 \right) \partial_{xx} \zeta\right)[/tex]

On trouve [tex]\zeta = constante[/tex] si [tex]\alpha=1[/tex]. Si non, en fonction du signe de [tex]\alpha-1[/tex], on trouve des solutions en cos & sin ou cosh & sinh.

Je te conseille d'essayer une condition initiale avec u=0 et un [tex]\zeta[/tex] en cos & sin. Normalement, la solution doit rester constante (aux erreur d'arrondi près). Si ça marche le bloc supérieur gauche des matrices est bien codé. Attention : ton programme doit adapter la longueur du domaine numérique à la période des solutions en cos & sin.

MathRack

Dernière modification par MathRack (15-05-2013 13:10:55)

Hors ligne

#14 15-05-2013 14:15:31

math@
Membre
Inscription : 28-11-2011
Messages : 13

Re : [Fortran] Demande de l'aide en fortran

pour le 1er point, oui je souhaite que mon abcs couvre l'intervalle [xbed,xfin] et qu'elle soit centrée au milieu de cet intervalle.

et pour la gaussienne dans mon cas elle n'est pas paire (j'ai exp(-(x-l/2))!!!

Pour la condition initiale je peux pas mettre que u=0? car j'ai un système de 2 équations et 2 inconnus W([tex]\zeta[/tex],u)!

Dernière modification par math@ (15-05-2013 14:21:15)

Hors ligne

#15 15-05-2013 14:52:06

MathRack
Membre
Inscription : 02-04-2012
Messages : 78

Re : [Fortran] Demande de l'aide en fortran

Remonte au post #7 : il faut remplacer [tex]i \times dx[/tex] par [tex](i-1) \times dx[/tex].
Tu as [tex](i-1) \times dx \in [0,L] [/tex] et donc [tex]abcs \in [- 0.5 L , 0.5 L][/tex]. Comme ta gaussienne est en [tex]abcs^2[/tex], elle est bien périodique.

Pour avoir la condition initiale u=0 et [tex]\zeta=cos(...)[/tex] dans la variable X0 qui est de taille 2n+2 :

! zeta0 = cos(...)
do i = 1, n+1
  X0(i)=cos(...)
enddo
! u0 = 0
X0(n+2:2*n+2)=0

Es-tu certaine de ta condition initiale en gaussienne? Tu utilises :

dx = l*1.D0/(2*n+1)
...
do i = 1, 2*n+2
  abcs = i * dx - l/2.D0
  U(i) = 1.D0 / sqrt(2.D0*pi) / sigma * exp(-.5d0 * abcs**2 / sigma**2)
end do

Pour avoir une condition initiale gaussienne sur les variables u et zeta, il faut remplacer par:

dx = 1.D0 * l / n
...
do i = 1, n+1
  abcs = (i-1) * dx - l/2.D0
  ! zeta gaussienne
  U(i) = 1.D0 / sqrt(2.D0*pi) / sigma * exp(-.5d0 * abcs**2 / sigma**2)
  ! u gaussienne
  U(n+1+i) = 1.D0 / sqrt(2.D0*pi) / sigma * exp(-.5d0 * abcs**2 / sigma**2)
end do

Tu dois forcément mettre une condition initiale sur u ET sur zeta...

Dernière modification par MathRack (15-05-2013 14:54:38)

Hors ligne

#16 15-05-2013 15:11:16

math@
Membre
Inscription : 28-11-2011
Messages : 13

Re : [Fortran] Demande de l'aide en fortran

oui ma condition initiale est bien une gaussienne (c'est le prof qui a imposé cette condition)

Hors ligne

#17 15-05-2013 15:37:46

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 17 385

Re : [Fortran] Demande de l'aide en fortran

Bonjour,

@Math
Puis-je savoir en quoi
exp(-(x-l/2))  !!!
est différent de ce que j'avais corrigé en
[tex]e^{-\left(x-\frac l 2\right)}[/tex]
et que tu as de nouveau rétabli dans sa forme initiale ????

Merci.

   Yoshi
Modérateur

Hors ligne

#18 15-05-2013 15:55:40

MathRack
Membre
Inscription : 02-04-2012
Messages : 78

Re : [Fortran] Demande de l'aide en fortran

math@ a écrit :

oui ma condition initiale est bien une gaussienne (c'est le prof qui a imposé cette condition)

Je te confirme que la condition initiale suivante :

dx = l*1.D0/(2*n+1)
...
do i = 1, 2*n+2
  abcs = i * dx - l/2.D0
  U(i) = 1.D0 / sqrt(2.D0*pi) / sigma * exp(-.5d0 * abcs**2 / sigma**2)
end do

Te donnes un tableau de taille 2n+2 qui est l'enveloppe d'une gaussienne sur [tex][-0.5L,0.5L][/tex].

Mais il faut faire attention car le tableau U est la condition initiale pour les variables [tex]\zeta[/tex] et [tex]u[/tex]. La première moitié du tableau (1 à n+1) correspond à [tex]\zeta[/tex] et la deuxième moitié (n+2 à 2n+2) à [tex]u[/tex]. En utilisant cette condition initiale, tes variables [tex]\zeta[/tex] et [tex]u[/tex] ne sont pas périodiques!!! Je pense que c'est un peu maladroit d'appeler ta condition initiale U car c'est la condition initiale pour tes 2 variables...

Hors ligne

#19 16-05-2013 08:55:40

math@
Membre
Inscription : 28-11-2011
Messages : 13

Re : [Fortran] Demande de l'aide en fortran

yoshi a écrit :

Bonjour,

@Math
Puis-je savoir en quoi
exp(-(x-l/2))  !!!
est différent de ce que j'avais corrigé en
[tex]e^{-\left(x-\frac l 2\right)}[/tex]
et que tu as de nouveau rétabli dans sa forme initiale ????

Merci.

   Yoshi
Modérateur

Bonjour Yoshi,

Il y a pas de différence entre les deux écritures mais j'ai écrit exp(-(x-l/2)) pour poser une question sur la périodicité de la gaussienne

math@

Hors ligne

#20 16-05-2013 09:11:45

MathRack
Membre
Inscription : 02-04-2012
Messages : 78

Re : [Fortran] Demande de l'aide en fortran

Autant pisser dans un violon (et pas sur un vieux lion)... Encore une fois :

1 - Le nombre de points dans l'espace physique est [tex]n+1[/tex] et pas [tex]2n+2[/tex].

2 - Donc le [tex]dx[/tex] que tu utilises est faux.

3 - Le tableau U qui contient la condition initiale doit être affecté en 2 parties, d'abord [tex]\zeta_0[/tex] dans U(1:n+1) puis [tex]u_0[/tex] dans U(n+2:2n+2)

4 - Je te conseille enfin de chercher les solutions de l'EDP du post #13. En choisir une en cos & sin. Adapter [tex]\alpha[/tex], xdeb et xfin dans tes paramètres pour que la solution analytique soit solution numérique. Utiliser le [tex]\zeta[/tex] analytique comme condition initiale [tex]\zeta_0[/tex] avec [tex]u_0=0[/tex]. Et enfin calculer quelques pas de temps pour voir si la solution est bien stationnaire.

Cordialement,
MathRack

Dernière modification par MathRack (16-05-2013 09:18:41)

Hors ligne

#21 16-05-2013 10:58:24

math@
Membre
Inscription : 28-11-2011
Messages : 13

Re : [Fortran] Demande de l'aide en fortran

Bonjour MathRack,

S'il vous plait pourrais-je avoir votre adresse mail pour que je vous envoie ce que j'ai fait.

Cordialement
math@

Hors ligne

#22 16-05-2013 12:32:52

MathRack
Membre
Inscription : 02-04-2012
Messages : 78

Re : [Fortran] Demande de l'aide en fortran

Bien entendu : mathrack.bibmath_@_gmail.com

Cordialement,
MathRack

Dernière modification par yoshi (16-05-2013 15:03:28)

Hors ligne

#23 16-05-2013 15:06:14

yoshi
Modo Ferox
Inscription : 20-11-2005
Messages : 17 385

Re : [Fortran] Demande de l'aide en fortran

Bonjour,

J'ai ajouté une _ de chaque côté de @ : cherches-tu vraiment à te faire spammer ?
Il existe des robots spécialisés dans la collecte des adresses en clair sur les forums !
Les enlever pour l'envoi d'un message...

@+

Hors ligne

Réponse rapide

Veuillez composer votre message et l'envoyer
Nom (obligatoire)

E-mail (obligatoire)

Message (obligatoire)

Programme anti-spam : Afin de lutter contre le spam, nous vous demandons de bien vouloir répondre à la question suivante. Après inscription sur le site, vous n'aurez plus à répondre à ces questions.

Quel est le résultat de l'opération suivante (donner le résultat en chiffres)?
quatre-vingt quatorze plus quatre-vingt onze
Système anti-bot

Faites glisser le curseur de gauche à droite pour activer le bouton de confirmation.

Attention : Vous devez activer Javascript dans votre navigateur pour utiliser le système anti-bot.

Pied de page des forums