Problèmes (faciles à résoudre, je pense) avec Scilab 5.4.1.

Fermé
Blaburaz D - Modifié par Blaburaz D le 17/01/2014 à 18:00
 Blaburaz D - 24 janv. 2014 à 16:19
Bonjour à tous et à toutes !

Je suis étudiant en physique, et je débute avec Scilab. J'ai cependant déjà quelques ennuis :
1) Quand je rentre certaines commandes, Scilab ne me sort aucun résultat. Par exemple, je veux entrer :
for i=1:m
for j=1:n
A(i,j)=i-j;
end ,
et quand, depuis mon fichier, je fais "évaluer la sélection avec écho", je tombe sur :
-->for i=1:m
--> for j=1:n
--> A(i,j)=i-j;
--> end ,
et rien de plus... Que faire ?

2) Sauriez-vous comment "construire un vecteur de taille 10 dont la composante i est égale à (-1)^i" ?
J'avais essayé en tapant très exactement (d'après ce qu'on m'a donné en cours - je trouve étrange de ne pas déclarer la matrice w plus clairement, d'ailleurs je doute fortement l'avoir déclarée, mais alors comment le faire ?) :
n=10
for i=1:n
w(k)=(-1)^k
end
Et encore une fois, je n'ai pas de réponse.

3) Sauriez-vous comment "construire sans boucle un vecteur ligne de taille n comportant les carrés des n premiers entiers positifs sans utiliser de boucle" ?

Voilà déjà beaucoup de questions. Je vous serai très reconnaissant de me répondre, afin que je puisse préparer à l'avance mes TD.

En vous souhaitant une bonne soirée à toutes et à tous.
A voir également:
  • Problèmes (faciles à résoudre, je pense) avec Scilab 5.4.1.
  • Scilab - Télécharger - Édition & Programmation
  • Freeocr 5.4.1 - Télécharger - Divers Bureautique

3 réponses

KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
17 janv. 2014 à 19:11
1) "évaluer la sélection avec écho", je ne suis pas sûr que ce soit la bonne commande.

Quand tu as démarré ta console Scilab tu as un onglet Application > SciNotes
Cela te permet d'avoir un éditeur de code, que tu peux enregistrer au format .sce
C'est d'ailleurs avec SciNotes que sont censés s'ouvrir par défaut les fichiers .sce

Pour exécuter le mieux est d'utiliser la commande "Enregistrer et exécuter" qui est disponible dans les boutons (la petite flèche), le menu "Exécuter" ou directement avec F5.

Tu bascules alors sur la console pour voir le résultat. En l'occurrence tu auras des erreurs car ton code est incorrect.

-->exec('C:\Users\Guillaume\Desktop\test.sce', -1)
for i=1:m
!--error 4
Variable non définie : m
at line 1 of exec file called by :
exec('C:\test.sce', -1)

Voici le code correct, sans oublier l'affichage de A, sinon ça ne sert à rien :

m=5
n=5

for i=1:m
for j=1:n
A(i,j)=i-j
end
end

disp(A)

2) Le problème c'est que tu as mélangé i et k. Et oublié l'affichage comme pour le 1.

n=10

for i=1:n
w(i)=(-1)^i
end

disp(w)

Pour les questions les plus courantes, regarde la documentation :
http://fr.wikibooks.org/wiki/Découvrir_Scilab
0
Merci pour ces réponses, "KX".

1) Effectivement, je me doutais bien que je faisais une faute affreuse.

2) Une belle étourderie.

Par ailleurs, mon fichier scilab est déjà (par défaut apparemment) un fichier sce.. "Evaluer la sélection avec écho" fonctionne bien.
Enfin, après avoir fouillé ton lien (très complet, je sais maintenant comment résoudre des systèmes linéaires), je n'ai toujours pas trouvé comment résoudre cette histoire de carrés, pourrais-tu m'aider ?
0
KX Messages postés 16752 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 août 2024 3 019
19 janv. 2014 à 11:36
On peut le faire avec un produit matriciel, mais ça va calculer les n² carrés de la matrice produit alors que seule la diagonale nous intéresse.

n = 10

v = 1:n
m = v' * v
d = diag(m)

disp(d)

Au final, la boucle serait moins lourde en nombre de calculs dans ce cas...

n = 10

w(1) = 1
for i = 1:(n-1)
w(i+1) = w(i)+2*i+1
end

disp(w)
0
Merci beaucoup KX pour ces réponses !

L'idée de la matrice d est franchement intelligente, avec ce dernier coefficient en bas à droite qui donne toujours le carré (en taille (n,n), n²)... D'ailleurs, cette matrice est aussi celle qui donne les résultats de la table de multiplication de 1 à 10 !
0
J'ai rencontré encore d'autres difficultés, d'abord avec le modèle de Leslie, et aussi avec la lecture/l'écriture des données dans un fichier.

1) Dans mon énoncé de TD, on me dit que pour manipuler des données qu'on veut conserver, on a la possibilité d'utiliser la fonction "save". On me déclare alors que dans l'exemple ci-dessous, on crée une matrice A (pleine de valeurs aléatoires), un vecteur B, et qu'on les sauvegarde dans un fichier matriceA_vecB, qu'on les efface de la mémoire de Scilab, puis qu'on les recharge à nouveau en mémoire avec la fonction "load":
-->A=rand(5,3)
-->B=[6 2 91]
-->save('matriceA_vecB',A,B)

Quand je tape ça, la console me dit :

"Attention : Scilab 6 ne prendra pas en charge le format de fichier utilisé.

Attention : Veuillez mettre entre guillemets la déclaration de variable. Par exemple, save('myData.sod',a) devient save('myData.sod','a').

Attention : Veuillez consulter help('save') pour les raisons de ce choix."

J'ai change de place les guillemets, comme préconisait le deuxième "attention", ça me lance le message :

"Attention : Scilab 6 ne prendra pas en charge le format de fichier utilisé.

Attention : Veuillez mettre entre guillemets la déclaration de variable. Par exemple, save('myData.sod',a) devient save('myData.sod','a').

Attention : Veuillez consulter help('save') pour les raisons de ce choix.
!--error 248
Valeur erronée de l'argument 2 : Un nom de variable valide attendu."

J'ai déjà crée le fichier matriceA_vecB, mais comment y "sauvegarder" les matrices A et B de telle sorte que la commande "save" marche ?

2) Sur le modèle de Leslie

"On note U(n) le vecteur colonne de taille k représentant (en pourcentage) la population temps n (en années), qu'on a regroupée en k tranches d'âges : u1(n) ("u indice 1 de n") est la tranche formée des individus les plus jeunes, ..., uk(n) est la tranche formée des individus les plus âgés. On note fi ("f indice i") le taux de fécondité de la classe i, et s indice i ("si") le nombre d'individus de la classe i qui passent à la classe i + 1 (i variant de 1 à k-1).
Pour k=5, l'évolution des classes des populations entre les temps n et n+1 est :

u1(n+1)=f1*u1(n) + f2*u2(n) + f3*u3(n) + f4*u4(n) +f5*u5(n)
u2(n+1)=s1*u1(n)
u3(n+1)=s2*u2(n)
u4(n+1)=s3*u3(n)
u5(n+1)=s4*u4(n)

a) Après avoir écrit au brouillon le système ci-dessus sous forme matricielle U(n+1)=A*U(n), où A une matrice (k;k) à déterminer en fonction des "si" et des "fi", rentrer A dans Scilab.
b) Partant d'une population initiale (stockée dans le vecteur à trois composantes PopInit) de 100 jeunes, 0 adultes et 0 séniors, calculer avec une boucle la population de la génération suivante 20 ans plus tard (U(n=21)). On pourra utiliser un tableau Pop de 3 lignes et 21 colonnes pour stocker les valeurs des vecteurs U en fonction des années.
c) Tester le modèle avec s1 = 0,9. Comment évolue la population ?

-------> a) Pour moi,

f1 f2 f3 f4 .......
A = s1 0_______0
0 s2 0____0
0 0 s3____0
0 0 0 s4_ 0

et ainsi de suite jusqu'à s indice u-1, où u est un réel correspondant à l'âge maximal atteignable. J'ai alors entré A dans Scilab.
b) Comment rentrer u(21) ? Je voudrais rentrer l'équation U(n+1)=A*U(n), mais comment faire ?
c) Je pense que j'aurai la réponse quand j'en aurai fini avec la question b).
0