Page 1 sur 3

Exercice de maths sur Python

Publié : 14 déc. 2017 16:22
par BlaieBlaie
Bonjour,

Je bloque sur un programme Python depuis quelques jours.

Tout d'abord, dans ce qui va suivre, $ h=\dfrac{1}{n+1} $ et $ x_i = ih $.
Etant donnée une fonction f(x,y) donnée par l'utilisateur, faire un programme calculant la matrice $ (b_{i,j})_{1 \leq i,j \leq n} $ des valeurs $ b_{i,j} = f(x_i,x_j) $, puis le vecteur colonne $ b $ correspondant, dans $ \mathbb{R}^N $. On pourra faire une fonction suivant le format bvector(f,n) renvoyant le vecteur colonne $ b $ désiré.

J'ai commencé ainsi :

Code : Tout sélectionner

def bvector(f,n):
    h=1/(n+1)
    x=np.zeros(n)
    for i in range(n):
        x[i]=i*h
    b=np.zeros((n,n))
    for i in range(n):
        for j in range(n):
            b[i,j]=f(x[i],x[j])
    return b.reshape
    
def f(x,y):
    f=x+y
    return f
    
print(bvector(f(3,4),2))
Ma fonction ne marche pas. Je n'arrive pas vraiment à voir ce qui ne va pas. L'utilisation de b.reshape est peut-être incorrecte aussi... Pouvez-vous m'aider ? Merci d'avance

Re: Exercice de maths sur Python

Publié : 14 déc. 2017 17:12
par loupi
Il me semble voir un premier pb, ta fonction bvector attend une fonction comme premier paramètre, pas une valeur, donc l'appel c'est plutôt bvector(f,2) dans ton exemple.

Re: Exercice de maths sur Python

Publié : 14 déc. 2017 17:21
par fakbill
def f(x,y):
f=x+y
return f

C'est une horreur. Tu n'as pas compris ce qu'est une function.
Qu'est censé faire le code ci-dessus selon toi?
Je t'écris ce qu'il fait : il definit une function f qui prend deux arguments x et y et qui revoie x+y.
Par contre, le fait que tu fasses f=x+y return f est une horreur absolue. Le concept de function n'est pas clair dans ta tête.
f c'est le nom de la function, pas de ce qu'elle retourne (ce qu'elle retourne n'a pas de nom tant que tu ne l'as pas stocké dans une variable en faisant foo=f(1,2).

Re: Exercice de maths sur Python

Publié : 14 déc. 2017 17:31
par fakbill
si tu connais numpy alors ta matrice se construit avec numpy.fromfunction
Ne me dis pas que tu ne connais pas "fromfunction". Lis la doc de numpy qui est très bien faite.
fromfunction est une function souvent utile pour...créer des matrices...elle est faite pour ça :)

Re: Exercice de maths sur Python

Publié : 14 déc. 2017 18:11
par BlaieBlaie
Oui le coup du return f, c'est du gros n'importe quoi, c'est vrai... J'essaie de modifier mon premier code...
C'est la première fois de ma vie que j'utilise Python

Re: Exercice de maths sur Python

Publié : 14 déc. 2017 18:23
par BlaieBlaie
Rien qu'au niveau de cette portion de code, j'ai l'impression qu'il y a un souci lorsque je compile :

Code : Tout sélectionner

def bvector(f,n):
    h=1/(n+1)
    x=np.zeros(n)
    for i in range(n):
        x[i]=(i+1)*h
    b=np.zeros((n,n))
    for i in range(n):
        for j in range(n):
            b[i,j]=f(x[i],x[j])
J'ai mis i+1 au lieu de i, car comme la boucle commence en i=0, j'aimerais éviter le i*h=0 alors que l'énoncé nous dit que i commence en 1 (j'ai pas l'impression d'être clair et limpide là)
Le problème c'est qu'au niveau de mon b, ça a pas vraiment l'air d'être ça... (et il va sans dire que je n'arrive pas à voir où j'ai merdé)

Re: Exercice de maths sur Python

Publié : 14 déc. 2017 18:25
par U46406
compiler : Python n'a pas de compilateur, il me semble, c'est du code interprété à la volée...

Re: Exercice de maths sur Python

Publié : 14 déc. 2017 18:38
par BlaieBlaie
Enfin quand j’exécute ça, ça ne fonctionne pas.

Re: Exercice de maths sur Python

Publié : 14 déc. 2017 18:43
par loupi
"for i in range(n-1)" ne va boucler que n-1 fois, je ne pense pas que c'est ce que tu veux.

Re: Exercice de maths sur Python

Publié : 14 déc. 2017 19:11
par fakbill
mais si tu utilizes numpy, par pitié, utilize fromfunction. C'est LA function faite pour construire une matrice (plus généralement un tableau) de terme general f(j,j). C'est pour ça que ça s'appelle fromfunction. c'est construire un tableau à partir d'une function :)

au passage, la suite de ton énoncé ne veut rien dire "le vecteur colonne b correspondant"? gni?? tu veux dire "qui renvoie le k_ieme vecteur colonne de ta matrice je suppose? Si oui, apprends comment les index sur les tableaux fonctionnent en numpy. Apprends ce que M[:,5] veut dire.
Bref, apprends les bases de numpy. C'est la base pour faire de l'algèbre linéaire.