Exercice de maths sur Python

Modérateur : Michel Quercia

BlaieBlaie
Messages : 42
Enregistré le : lun. janv. 11, 2016 11:10 pm
Classe : Autodidacte

Exercice de maths sur Python

Message par BlaieBlaie » jeu. déc. 14, 2017 5:22 pm

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

loupi
Messages : 436
Enregistré le : mer. févr. 27, 2013 5:45 pm
Classe : ENVT

Re: Exercice de maths sur Python

Message par loupi » jeu. déc. 14, 2017 6:12 pm

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.

Avatar du membre
fakbill
Messages : 11149
Enregistré le : mer. juil. 30, 2008 4:59 pm
Classe : Dr.-Ing

Re: Exercice de maths sur Python

Message par fakbill » jeu. déc. 14, 2017 6:21 pm

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).
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.

Avatar du membre
fakbill
Messages : 11149
Enregistré le : mer. juil. 30, 2008 4:59 pm
Classe : Dr.-Ing

Re: Exercice de maths sur Python

Message par fakbill » jeu. déc. 14, 2017 6:31 pm

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 :)
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.

BlaieBlaie
Messages : 42
Enregistré le : lun. janv. 11, 2016 11:10 pm
Classe : Autodidacte

Re: Exercice de maths sur Python

Message par BlaieBlaie » jeu. déc. 14, 2017 7:11 pm

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

BlaieBlaie
Messages : 42
Enregistré le : lun. janv. 11, 2016 11:10 pm
Classe : Autodidacte

Re: Exercice de maths sur Python

Message par BlaieBlaie » jeu. déc. 14, 2017 7:23 pm

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é)
Modifié en dernier par BlaieBlaie le jeu. déc. 14, 2017 7:54 pm, modifié 3 fois.

Avatar du membre
U46406
Messages : 7242
Enregistré le : mer. juil. 27, 2016 7:38 pm
Classe : shadow CCO nobo CMT
Contact :

Re: Exercice de maths sur Python

Message par U46406 » jeu. déc. 14, 2017 7:25 pm

compiler : Python n'a pas de compilateur, il me semble, c'est du code interprété à la volée...
« Occupez-vous d’abord des choses qui sont à portée de main. Rangez votre chambre avant de sauver le monde. Ensuite, sauvez le monde. » (Ron Padgett, dans Comment devenir parfait) :mrgreen:

BlaieBlaie
Messages : 42
Enregistré le : lun. janv. 11, 2016 11:10 pm
Classe : Autodidacte

Re: Exercice de maths sur Python

Message par BlaieBlaie » jeu. déc. 14, 2017 7:38 pm

Enfin quand j’exécute ça, ça ne fonctionne pas.

loupi
Messages : 436
Enregistré le : mer. févr. 27, 2013 5:45 pm
Classe : ENVT

Re: Exercice de maths sur Python

Message par loupi » jeu. déc. 14, 2017 7:43 pm

"for i in range(n-1)" ne va boucler que n-1 fois, je ne pense pas que c'est ce que tu veux.

Avatar du membre
fakbill
Messages : 11149
Enregistré le : mer. juil. 30, 2008 4:59 pm
Classe : Dr.-Ing

Re: Exercice de maths sur Python

Message par fakbill » jeu. déc. 14, 2017 8:11 pm

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.
Pas prof.
Prépa, école, M2, thèse (optique/images) ->ingé dans le privé.

BlaieBlaie
Messages : 42
Enregistré le : lun. janv. 11, 2016 11:10 pm
Classe : Autodidacte

Re: Exercice de maths sur Python

Message par BlaieBlaie » jeu. déc. 14, 2017 8:19 pm

Je suis justement sur fromfunction actuellement, j'essaie de faire des tests, je pense que je tiens bientôt le bon truc

Oui, j'essaie un peu de voir les bases de numpy en même temps ; pour la suite, je vais regarder ensuite, je n'ai pas bien compris non plus.

BlaieBlaie
Messages : 42
Enregistré le : lun. janv. 11, 2016 11:10 pm
Classe : Autodidacte

Re: Exercice de maths sur Python

Message par BlaieBlaie » jeu. déc. 14, 2017 9:23 pm

Pour l'instant j'ai été capable de faire un "exemple" mais pas un code général.

Code : Tout sélectionner

def f(i,j):
    h=1.0/(4+1)
    return (i+1)*h+(j+1)*h
B = np.fromfunction(f,(4,4))
print(B)
J'ai fait une matrice de taille n*n=4*4, donc mon h est tel que h=1/5, et une fonction $f(x,y)=x+y$. Donc $b_{ij} = f(ih,jh)$ avec i,j compris entre 1 et 4 d'où le "i+1" et "j+1".
Pour le cas général, je vais avoir un peu de mal, je vois pas comment amorcer ça.

BlaieBlaie
Messages : 42
Enregistré le : lun. janv. 11, 2016 11:10 pm
Classe : Autodidacte

Re: Exercice de maths sur Python

Message par BlaieBlaie » jeu. déc. 14, 2017 9:37 pm

Ah oui et je crois que le vecteur b est en fait la concaténation (réunion) de tous les vecteurs colonnes de la matrice.

Normalement la commande

Code : Tout sélectionner

B[:,j]
devrait me renvoyer la colonne j et la commande

Code : Tout sélectionner

np.concatenate((B[:,0],B[:,1],B[:,2],B[:,3]))
devrait me renvoyer les 4 vecteurs colonnes de ma matrice concaténés (donc en vecteur colonne).
ça marche, sauf que ça me renvoie un vecteur ligne... Savez vous pourquoi ?

loupi
Messages : 436
Enregistré le : mer. févr. 27, 2013 5:45 pm
Classe : ENVT

Re: Exercice de maths sur Python

Message par loupi » jeu. déc. 14, 2017 9:53 pm

BlaieBlaie a écrit :
jeu. déc. 14, 2017 9:23 pm
Pour l'instant j'ai été capable de faire un "exemple" mais pas un code général.

Code : Tout sélectionner

def f(i,j):
    h=1.0/(4+1)
    return (i+1)*h+(j+1)*h
B = np.fromfunction(f,(4,4))
print(B)
J'ai fait une matrice de taille n*n=4*4, donc mon h est tel que h=1/5, et une fonction $f(x,y)=x+y$. Donc $b_{ij} = f(ih,jh)$ avec i,j compris entre 1 et 4 d'où le "i+1" et "j+1".
Pour le cas général, je vais avoir un peu de mal, je vois pas comment amorcer ça.

Code : Tout sélectionner

n=4
def f(i,j):
    h=1.0/(n+1)
    return (i+1)*h+(j+1)*h
B = np.fromfunction(f,(n,n))
print(B)

BlaieBlaie
Messages : 42
Enregistré le : lun. janv. 11, 2016 11:10 pm
Classe : Autodidacte

Re: Exercice de maths sur Python

Message par BlaieBlaie » jeu. déc. 14, 2017 10:16 pm

merci, c'est mieux en effet

Répondre

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 3 invités