Équations différentielles Scilab
Résolu
ss_maling
Messages postés
19
Date d'inscription
Statut
Membre
Dernière intervention
-
ss_maling25 -
ss_maling25 -
Bonjour,
Dans le cadre de ma thèse, je dois programmer en scilab les équa diff suivantes:
A_{i}*T_{{i-1},j}+B_{i}*T{i,j}+C_i*T_{{i+1},j}. (1)
A'_{j}*T_{i,{j-1}}+B'_{j}*T_{i,j}+C'_{j}*T_{i,{j+1}} (2)
Les A_{i} sont des matrices tridiag. les i et j sont les indices
J'ai besoin de votre aide.
Merci d'avance
Dans le cadre de ma thèse, je dois programmer en scilab les équa diff suivantes:
A_{i}*T_{{i-1},j}+B_{i}*T{i,j}+C_i*T_{{i+1},j}. (1)
A'_{j}*T_{i,{j-1}}+B'_{j}*T_{i,j}+C'_{j}*T_{i,{j+1}} (2)
Les A_{i} sont des matrices tridiag. les i et j sont les indices
J'ai besoin de votre aide.
Merci d'avance
A voir également:
- Équations différentielles Scilab
- Scilab - Télécharger - Édition & Programmation
- Raccourci clavier Editeur d'équations Word 20 - Forum Word
- Insérer un renvoi lorsqu'on a numéroté les équations comme ceci ✓ - Forum Word
28 réponses
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.
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.032Bon après-midi
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.
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
Pas de problème ;-)
À plus tard
À plus tard
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
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
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.
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
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.