Équations différentielles Scilab
Résolu/Fermé
ss_maling
Messages postés
19
Date d'inscription
jeudi 2 avril 2009
Statut
Membre
Dernière intervention
19 avril 2009
-
2 avril 2009 à 11:19
ss_maling25 - 30 oct. 2009 à 10:50
ss_maling25 - 30 oct. 2009 à 10:50
A voir également:
- Équations différentielles Scilab
- Scilab - Télécharger - Édition & Programmation
- Scilab mac - Forum MacOS
- Mopen scilab - Forum Logiciels
- MacOS Catalina impossible d'ouvrir Scilab - Forum MacOS
- Numéroter les équations word ✓ - Forum Word
28 réponses
ss_maling
Messages postés
19
Date d'inscription
jeudi 2 avril 2009
Statut
Membre
Dernière intervention
19 avril 2009
9 avril 2009 à 11:03
9 avril 2009 à 11:03
Bonjour,
Après avoir suivi ton conseil, en faisant 'help diag' j'ai résolu mon problème c'est à dire la manière de construire ma matrice. désormais qu'il s'agisse d'une matrice 100x100 je peux le générer facilement. jette un coup d'oeil pour voir le petit script que j'ai écrit: avec h(le pas d'espace) k(le pas de temps) Ui (la vitesse) m(le nombre de ligne du vecteur a) p (le nombre de colonne du vecteur a). avec ce script j'ai réussi à tronquer les élément du vecteur c et compléter ceux du vecteur b:
Evidemment je l'ai écrit dans un éditeur Scipad. si t'as une méthode plus simple montre -la moi.
function [a,b,c,m,p,A]=ss_maling25_bis(n)
h=0.01;k=0.1;N=50;m=zeros(1,1);p=zeros(1,1);
for i=1:N
Ui=0.1*n
a=1/h^2+Ui/(2*h);
b=-2/h^2-2/k;
c=-1/h^2+0.1*(n+1)/(2*h);
[m,p]=size(a);
b(2:p)=b(1);
A=diag(a)+diag(b(1:p-1),1)+diag(c(1:p-2),2);
end
endfunction
Maintenant passons aux conditions aux limites . Vu mon problème, ça sera les conditions de type Dirichlet. Je n'ai pas encore bien potassé donc donne moi 72h et je te ferai signe. A bientôt.
Après avoir suivi ton conseil, en faisant 'help diag' j'ai résolu mon problème c'est à dire la manière de construire ma matrice. désormais qu'il s'agisse d'une matrice 100x100 je peux le générer facilement. jette un coup d'oeil pour voir le petit script que j'ai écrit: avec h(le pas d'espace) k(le pas de temps) Ui (la vitesse) m(le nombre de ligne du vecteur a) p (le nombre de colonne du vecteur a). avec ce script j'ai réussi à tronquer les élément du vecteur c et compléter ceux du vecteur b:
Evidemment je l'ai écrit dans un éditeur Scipad. si t'as une méthode plus simple montre -la moi.
function [a,b,c,m,p,A]=ss_maling25_bis(n)
h=0.01;k=0.1;N=50;m=zeros(1,1);p=zeros(1,1);
for i=1:N
Ui=0.1*n
a=1/h^2+Ui/(2*h);
b=-2/h^2-2/k;
c=-1/h^2+0.1*(n+1)/(2*h);
[m,p]=size(a);
b(2:p)=b(1);
A=diag(a)+diag(b(1:p-1),1)+diag(c(1:p-2),2);
end
endfunction
Maintenant passons aux conditions aux limites . Vu mon problème, ça sera les conditions de type Dirichlet. Je n'ai pas encore bien potassé donc donne moi 72h et je te ferai signe. A bientôt.
Sacabouffe
Messages postés
9418
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 858
9 avril 2009 à 11:49
9 avril 2009 à 11:49
Salut
Euh... le code tel que tu l'as écrit donnera rien du tout :-D
En sortie, A sera juste un réel égal à 1/h^2+Ui/(2*h).
Comme il y a pas mal d'erreurs, je suis pas sûr de ce que tu veux obtenir au final, en particulier, est-ce que chaque diagonale est constante ? Si c'est le cas, c'est plutôt ça ton code :
Euh... le code tel que tu l'as écrit donnera rien du tout :-D
En sortie, A sera juste un réel égal à 1/h^2+Ui/(2*h).
Comme il y a pas mal d'erreurs, je suis pas sûr de ce que tu veux obtenir au final, en particulier, est-ce que chaque diagonale est constante ? Si c'est le cas, c'est plutôt ça ton code :
function A=ss_maling25_bis(n) h=0.01;k=0.1;N=5; a=(1/h^2+0.1*n/(2*h))*ones(N,1); b=(-2/h^2-2/k)*ones(N-1,1); c=(-1/h^2+0.1*(n+1)/(2*h))*ones(N-2,1); A=diag(a)+diag(b,1)+diag(c,2); endfunctionOu alors comme ça :
function A=ss_maling25_bis(n) h=0.01;k=0.1;N=5; a=mtlb_repmat(1/h^2+0.1*n/(2*h),N,1); b=mtlb_repmat(-2/h^2-2/k,N-1,1); c=mtlb_repmat(-1/h^2+0.1*(n+1)/(2*h),N-2,1); A=diag(a)+diag(b,1)+diag(c,2); endfunctionAu niveau temps d'exécution, la première solution est la meilleure je pense, mais vu le peu de calculs, tu verras aucune différence de toute façon. Mais pour te convaincre qu'un 5*ones(1000000,1) est plus rapide qu'un mtlb_repmat(5,1000000,1) par exemple, tu fais ça :
tic;x=mtlb_repmat(5,1000000,1);toc tic;x=5*ones(1000000,1);tocLe résultat sur ma machine est le suivant :
-->tic;x=mtlb_repmat(5,1000000,1);toc
ans =
0.125
-->tic;x=5*ones(1000000,1);toc
ans =
0.032 Bon après-midi
ss_maling
Messages postés
19
Date d'inscription
jeudi 2 avril 2009
Statut
Membre
Dernière intervention
19 avril 2009
9 avril 2009 à 12:27
9 avril 2009 à 12:27
Bonjour,
J'ai regardé ton code. Est -ce t'as essayé mon code? Les diagonales de ma matrice précisement a et c ne sont pas constantes. seule la diagonale b qui est constante.
Ui varie de 0 à 1.5 par pas de 0.1. Je vais m'inspirer de ton code pour voir si je peux faire mieux que ça.
Bonne après midi.
J'ai regardé ton code. Est -ce t'as essayé mon code? Les diagonales de ma matrice précisement a et c ne sont pas constantes. seule la diagonale b qui est constante.
Ui varie de 0 à 1.5 par pas de 0.1. Je vais m'inspirer de ton code pour voir si je peux faire mieux que ça.
Bonne après midi.
Sacabouffe
Messages postés
9418
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 858
9 avril 2009 à 12:31
9 avril 2009 à 12:31
Oui j'ai regardé ton code, mais il y a des erreurs justement.
D'une part, il sort pas une matrice mais un réel, d'autre part, en modifiant un peu pour qu'il te sorte une matrice, tes diagonales sont toutes constantes.
En plus, si ta vitesse varie de 0 à 1.5 avec un pas de 0.1, ça fait que 16 éléments sur la diagonale principale.
Comme N=50, bien que tu parlais de matrice 100x100, j'en ai déduit que tu voulais une matrice A de taille 50x50 et donc si c'est le cas, il te manque des éléments.
D'une part, il sort pas une matrice mais un réel, d'autre part, en modifiant un peu pour qu'il te sorte une matrice, tes diagonales sont toutes constantes.
En plus, si ta vitesse varie de 0 à 1.5 avec un pas de 0.1, ça fait que 16 éléments sur la diagonale principale.
Comme N=50, bien que tu parlais de matrice 100x100, j'en ai déduit que tu voulais une matrice A de taille 50x50 et donc si c'est le cas, il te manque des éléments.
ss_maling
Messages postés
19
Date d'inscription
jeudi 2 avril 2009
Statut
Membre
Dernière intervention
19 avril 2009
9 avril 2009 à 15:23
9 avril 2009 à 15:23
Oui t'as raison et tes remarques vont me permettre d'être prudent.
Je vais réécrire le script tout de suite. A bientôt.
Je vais réécrire le script tout de suite. A bientôt.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Sacabouffe
Messages postés
9418
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 858
9 avril 2009 à 15:28
9 avril 2009 à 15:28
Pas de problème ;-)
À plus tard
À plus tard
ss_maling
Messages postés
19
Date d'inscription
jeudi 2 avril 2009
Statut
Membre
Dernière intervention
19 avril 2009
10 avril 2009 à 10:12
10 avril 2009 à 10:12
Bonjour,
j'ai réécrit le script. Je signale que les éléments de ma matrice ne sont pas constants précisement a et c mais les éléments de b sont constans. comme tu me l'as dit hier j'ai une matrice 16x16. Mais si je veux afficher les éléments d'une matrice 5x5 ou 10x10 , je n'y arrive pas car il m'affiche toujours la matrice 16x16
voici le script:
function M=ss_maling1(n)
h=0.01;
k=0.1;
m=zeros(1,1);
p=zeros(1,1);
u=0:0.1:1.5;
[m,p]=size(u);
for i=1:p
e=u+0.1;
a=1/h^2+u/(2*h);
b=-2/h^2-2/k;
b(2:p)=b(1);
c=1/h^2+e/(2*h);
M=diag(a)+diag(b(1:p-1),1)+diag(c(1:p-2),2);
end
endfunction
j'ai réécrit le script. Je signale que les éléments de ma matrice ne sont pas constants précisement a et c mais les éléments de b sont constans. comme tu me l'as dit hier j'ai une matrice 16x16. Mais si je veux afficher les éléments d'une matrice 5x5 ou 10x10 , je n'y arrive pas car il m'affiche toujours la matrice 16x16
voici le script:
function M=ss_maling1(n)
h=0.01;
k=0.1;
m=zeros(1,1);
p=zeros(1,1);
u=0:0.1:1.5;
[m,p]=size(u);
for i=1:p
e=u+0.1;
a=1/h^2+u/(2*h);
b=-2/h^2-2/k;
b(2:p)=b(1);
c=1/h^2+e/(2*h);
M=diag(a)+diag(b(1:p-1),1)+diag(c(1:p-2),2);
end
endfunction
Sacabouffe
Messages postés
9418
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 858
10 avril 2009 à 12:40
10 avril 2009 à 12:40
Salut
Oui c'est normal, u est de taille 1x16, donc a, b et e aussi. En particulier, la diagonale principale de ta matrice A a 16 éléments, donc ta matrice est de taille 16x16.
Et sinon, ta boucle for est inutile, elle fait 16 fois la même chose. L'argument d'entrée n de ta fonction est lui aussi inutile, tu t'en sers pas.
Oui c'est normal, u est de taille 1x16, donc a, b et e aussi. En particulier, la diagonale principale de ta matrice A a 16 éléments, donc ta matrice est de taille 16x16.
Et sinon, ta boucle for est inutile, elle fait 16 fois la même chose. L'argument d'entrée n de ta fonction est lui aussi inutile, tu t'en sers pas.
function M=ss_maling1 h=0.01; k=0.1; u=0:0.1:1.5; p=size(u,2); e=u+0.1; a=1/h^2+u/(2*h); b=-2/h^2-2/k; b(2:p)=b(1); c=1/h^2+e/(2*h); M=diag(a)+diag(b(1:p-1),1)+diag(c(1:p-2),2); endfunctionBon après-midi
ss_maling
Messages postés
19
Date d'inscription
jeudi 2 avril 2009
Statut
Membre
Dernière intervention
19 avril 2009
11 avril 2009 à 10:36
11 avril 2009 à 10:36
Bonjour,
ok! merci de ton aide.
Mais si je veux seulement que le résultat m'affiche une matrice 5x5 dois affecter cette valeur à p? Je n'ai pas encore assayé mais je vais chercher pour voir ce que ça va donner.
Une fois fini avec les conditions aux limites je reviendrai sur ce plateau. Bonne journée.
ok! merci de ton aide.
Mais si je veux seulement que le résultat m'affiche une matrice 5x5 dois affecter cette valeur à p? Je n'ai pas encore assayé mais je vais chercher pour voir ce que ça va donner.
Une fois fini avec les conditions aux limites je reviendrai sur ce plateau. Bonne journée.
Sacabouffe
Messages postés
9418
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 858
11 avril 2009 à 20:18
11 avril 2009 à 20:18
Salut
Si c'est juste pour l'affichage, tu choisis ce que tu veux voir après.
Ciao
Si c'est juste pour l'affichage, tu choisis ce que tu veux voir après.
A(1:5,1:5)Par exemple
Ciao
ss_maling
Messages postés
19
Date d'inscription
jeudi 2 avril 2009
Statut
Membre
Dernière intervention
19 avril 2009
19 avril 2009 à 21:29
19 avril 2009 à 21:29
Bonjour,
ça marche. Merci beaucoup.
Je me prépare pour présenter l'état d'avancement de mes travaux. Je reviedrai plus tard.
ça marche. Merci beaucoup.
Je me prépare pour présenter l'état d'avancement de mes travaux. Je reviedrai plus tard.
Sacabouffe
Messages postés
9418
Date d'inscription
dimanche 19 août 2007
Statut
Membre
Dernière intervention
29 mai 2009
1 858
20 avril 2009 à 00:08
20 avril 2009 à 00:08
Salut
Pas de quoi ;-)
Bonne continuation et à bientôt
Pas de quoi ;-)
Bonne continuation et à bientôt
Bonjour,
je suis déjà de retour. Au fait j'ai quitté Benin pour Centrafrique depuis le 29 Avril 2009. J'ai passé un bon moment pour la configuration d'un multiplexeur HP3470A. heureusement pour j'ai réussi cette configuration. Je m'apprête à attaquer mon système d'équation. car bientôt je vais commencer l'expérimentation.
je suis déjà de retour. Au fait j'ai quitté Benin pour Centrafrique depuis le 29 Avril 2009. J'ai passé un bon moment pour la configuration d'un multiplexeur HP3470A. heureusement pour j'ai réussi cette configuration. Je m'apprête à attaquer mon système d'équation. car bientôt je vais commencer l'expérimentation.