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 Re : Programmation » [Fortran] Demande de l'aide en fortran » 16-05-2013 10:58:24

Bonjour MathRack,

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

Cordialement
math@

#2 Re : Programmation » [Fortran] Demande de l'aide en fortran » 16-05-2013 08:55:40

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@

#3 Re : Programmation » [Fortran] Demande de l'aide en fortran » 15-05-2013 15:11:16

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

#4 Re : Programmation » [Fortran] Demande de l'aide en fortran » 15-05-2013 14:15:31

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)!

#5 Re : Programmation » [Fortran] Demande de l'aide en fortran » 15-05-2013 11:15:19

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@

#6 Re : Programmation » [Fortran] Demande de l'aide en fortran » 15-05-2013 09:55:29

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@

#7 Re : Programmation » [Fortran] Demande de l'aide en fortran » 14-05-2013 11:02:06

Bonjour,

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

Cordialement

Math@

#8 Re : Programmation » [Fortran] Demande de l'aide en fortran » 13-05-2013 10:16:57

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
 

#9 Re : Programmation » [Fortran] Demande de l'aide en fortran » 06-05-2013 12:52:09

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

#10 Programmation » [Fortran] Demande de l'aide en fortran » 06-05-2013 09:29:51

math@
Réponses : 22

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!

#11 Re : Programmation » [Python] Manipulation des polynomes » 08-12-2011 19:08:25

yoshi a écrit :

Re,

Je savais bien qu'il était possible de faire court.
Je construis les monômes un par un sans les stocker.
Les + ou - sont les tests de fin de monôme, c'est pourquoi j'en rajoute un à la fin de la chaîne.
Le 1er caractère de la chaîne n'est jamais un +, donc je stocke ce 1er caractère dans mon monôme.
Si ce n'est pas le 1er alors je teste s'il s'agit de + ou -
    Si c'est le cas, je teste la présence de x : si non, c'est un terme indépendant que je stocke converti en entier, si oui je vais chercher la position éventuelle de * et de ^ : les 2 variables valent -1 en cas de non présence.
Le nombre de zéros (différence entre nouvel expo et ancien expo corrigé de 1 de temps en temps) nécessaire doit être stocké avant de stocker à son tour le coefficient.
Pour d'autres explications, demande...
Pour Python 2.5, 2.6, 2.7.
Pour Python 3.x, remplacer print "... ", par print("..."), : print est devenu la fonction print().


def Poly(chaine):
    chaineb,Coeff,mono,expo,expo1=chaine+"+",[],"",0,0
    for i,carac in enumerate(chaineb):
        if i==0:
            mono=carac
        else:
            if carac in "+-":
                if "x" not in mono:
                    Coeff.append(int(mono))
                else:
                    puiss,aster=mono.find("^"),mono.find("*")
                    if puiss==-1:
                        expo,dcl=1,1-(expo1==0 and Coeff!=[])
                    else:
                        expo=int(mono[puiss+1:]) #  nouvel exposant
                        dcl=expo-expo1-(Coeff!=[]) # nb zéros ajoutés
                    for j in range(dcl):  # boucle d'ajout des zéros
                        Coeff.append(0)
                    if aster==-1:  # Pas d'étoile
                        Coeff.append(int("-"*(mono[0]=="-")+"1"))
                    else:  # On stocke du début du monôme à l'*
                        Coeff.append(int(mono[:aster]))
                    expo1=expo
                mono="-"*(carac=="-")
            else:
                mono+=carac

    print "Les Coefficients du polynôme (ordre des puissances croissantes de x) :"
    print "                ",chaine
    print "                      sont :"
    print "               ",Coeff

               
Ça fonctionne :


>>> Poly("1+x^2-3*x^4+5*x^5")
Les Coefficients du polynôme (ordre des puissances croissantes de x) :
                 1+x^2-3*x^4+5*x^5
                      sont :
                [1, 0, 1, 0, -3, 5]
>>> Poly("-x^2+3*x^4+5*x^5-x^8")
Les Coefficients du polynôme (ordre des puissances croissantes de x) :
                 -x^2+3*x^4+5*x^5-x^8
                      sont :
                [0, 0, -1, 0, 3, 5, 0, 0, -1]
>>>

J'ai testé l'astuce avec isinstance() : ça marche.
J'ai ajouté le morceau destiné à razorb et je tape Poly(objet) où objet est soit une chaine soit une liste, et, en sortie, j'ai bien le résultat attendu.
Pour des coefficients non entiers "en virgule flottante", remplacer int par float000
Cette fonction complète avec isinstance() intéresse-t-elle quelqu'un dans l'immédiat ? Je vais attendre le passage de math@ et je posterai après sa réflexion...


@+

bonjour yoshi,
j'espère que vous allez bien ainsi les autres membres, merci pour le programme. En fait je suis actuellement entraine de faire cette fonction la vérité c un projet que je dois le faire et je dois le rendre demain. Dans le programme comme la ligne 16 et 13 j'espère que vous allez m'aider à terminer mon projet sinon c pas grave en tout cas je vous remercie vous m'avez déja aider énormement et les autres membres aussi merci.

#12 Re : Programmation » [Python] Manipulation des polynomes » 06-12-2011 22:02:21

Bonjour tout le monde,
merci beaucoup pour votre aide et excusez moi car j'ai pas répondu j'étais en pleine révision pour les examens.
je suis débutante en programmation et en python mais je dois l'apprendre car la programmation est un outil indéspensable pour ma spécialité. En fait pour la fonction polyno je dois donner des arguments arbitrairessoit (1) des coefficients d'un polynome (2) une chaine de caractère( un polynome) et le résultat sera tjr la liste des coefficients j'ai réussi à faire la 1ère partie le problème c que comment je vais faire ces deux chose en une seule fonction ce que je veux dire c que
je défini une fonction dont les arguments sont arbitraie :def poly(*arg):
pour le 1er cas j'ai réussi à le faire mais pour le second je ne sais pas comment dire que 'arg' est un polynome et faire le teste pour avoir seulement les coefficients de ce polynome.
Je m'excuse une autre fois et merci beaucoup pour votre aide à la prochainne

#13 Programmation » [Python] Manipulation des polynomes » 28-11-2011 19:11:57

math@
Réponses : 18

bonjour,
Je suis débutante en python et j'aurai besoin de votre aide svp. Mon problème est le suivant: je dois ecrire une fonction qui a comme paramètre une chaine de caractère 'un polynome' je dois afficher seulement les coefficients de ce polynome dans une liste
exemple
ploy('1+2*x^2+3*x^3')
elle renvoie [1,2,3]
je pense que je fais ça avec la fonction 'split' mais je ne sais pas exactement comment faire.
je serai vraiment reconnaissante si vous pourriez m'aider et merci d'avance

Pied de page des forums