Bonsoir à tous.
J'ai plusieurs petits exercices à faire sur Scilab et il y'en a dont je n'y arrive pas.
Consigne : Expliquer, dans chaque cas ci-dessous, pourquoi la définition de la fonction proposée est erronée ou absurde
function p = f5(n)
p = p + f5(n-1)
endfunction
funtion p = f6(n)
if n>0
p=p+f6(n-1)
end
endfunction
Et puis un autre exercice :
Consigne : On considère les matrices A,B,C et D défini par A = rand(10,100) B=rand(100,100000) C=rand(100000,1) D=rand(1,1000)
Est-ce que les instruction Scilab ((A*B)*C)*D et A*(B*(C*D)) calculent la même chose?
Quel est l'ordre de grandeur du rapport entre les temps de calcul associés? (On pourra vérigier la réponses avec les intructions tic et toc de Scilab, mais on demande une réponse reposant uniquement sur des arguments théoriques)
Pour le premier exo je ne vois pas où est l'absurdité.
Pour l'exo deux j'ai décomposer le produit terme à terme, j'ai dis que A est de taille 10 x 100 B : 100 x 100000 C : 100000 x 1 et D : 1 x 1000
J'en déduit qu'on a 110 000 000 0 multiplications (ca me parraît grand comme nombre mais bon...)
J'ai également trouver pour le premier produit un temps de 0.3587111 m/s
Merci
Bonsoir à tous.
J'ai plusieurs petits exercices à faire sur Scilab et il y'en a dont je n'y arrive pas.
Consigne : Expliquer, dans chaque cas ci-dessous, pourquoi la définition de la fonction proposée est erronée ou absurde
function p = f5(n)
p = p + f5(n-1)
endfunction
funtion p = f6(n)
if n>0
p=p+f6(n-1)
end
endfunction
Et puis un autre exercice :
Consigne : On considère les matrices A,B,C et D défini par A = rand(10,100) B=rand(100,100000) C=rand(100000,1) D=rand(1,1000)
Est-ce que les instruction Scilab ((A*B)*C)*D et A*(B*(C*D)) calculent la même chose?
Quel est l'ordre de grandeur du rapport entre les temps de calcul associés? (On pourra vérigier la réponses avec les intructions tic et toc de Scilab, mais on demande une réponse reposant uniquement sur des arguments théoriques)
Pour le premier exo je ne vois pas où est l'absurdité.
Pour l'exo deux j'ai décomposer le produit terme à terme, j'ai dis que A est de taille 10 x 100 B : 100 x 100000 C : 100000 x 1 et D : 1 x 1000
J'en déduit qu'on a 110 000 000 0 multiplications (ca me parraît grand comme nombre mais bon...)
J'ai également trouver pour le premier produit un temps de 0.3587111 m/s
Merci
*** message déplacé ***
Bonjour,
la première fonction ne s'arrête jamais : elle s'appelle et s'appelle elle même jusqu'à débordement de la pile
la seconde fonction s'arrête bien, mais lors de son dernier appel (avec n = 0) elle ne retourne aucune valeur
et donc en retournant à l'appel précédent il est impossible de calculer p + f6(0) vu que f6(0) n'a aucune valeur.
pour le calcul des matrices il faut bien comprendre ce que fait le produit de deux matrices de dimensions axb et bxc
il y a ac termes dans le résultat (une matrice axc) et chaque terme nécessite b multiplications (et b-1 additions, mais "on les néglige")
donc abc multiplications
ainsi dans le calcul du premier produit de la première expression, on calcule une matrice 10x105 en 10*100*105 = 108 multiplications
puis on fait le produit de cette matrice 10x105 résultat par une matrice 105x1
donc en 10*105*1 = 106 opérations
on a donc effectué jusque la 108 + 106 = 101000000 multiplications
reste le dernier produit de cette matrice 10x1 par D de dimension 1x1000
ceci donne une matrice 10x1000 en 10*1*1000 = 104 multiplications
au total on a donc effectué 108 + 106 + 104 = 101010000 multiplications pour calculer la première expression telle qu'elle est écrite (avec les parenthèses là où elles sont)
fais pareil avec la seconde (ordre des opérations différent)
le nombre de multiplications effectuées est différent !! (même si le résultat est le même car le produit de matrices est associatif)
d'où la question : quel est le rapport des deux
ta mesure me semble douteuse ...
(mais je n'ai pas scilab pour vérifier, et peut être qu'il est trop intelligent et effectue ses produits de matrices par d'autres methodes plus économiques et/ou son compilateur prend l'initiative de changer de lui-même les parenthèses)
Vous devez être membre accéder à ce service...
Pas encore inscrit ?
1 compte par personne, multi-compte interdit !
Ou identifiez-vous :