|
|
|
|
Configuration: Windows XP Internet Explorer 6.0
Salut
je voudrais programmer OK, vas-y, pas de souci pour nous ;-) Bonne nuit Thought I heard a rumbling, calling to my name Two hundred million guns are loaded, Satan cries "Take aim!" |
:D :D non non , je demande de l'aide pour le programmer -_-
et j'ai besoin de ce programme le lundi au plutard |
Et quel problème rencontres-tu exactement dans la programmation de cette ligne ?
Thought I heard a rumbling, calling to my name
Two hundred million guns are loaded, Satan cries "Take aim!" |
clc
clear ep=10^(-10000);%ep=epsilon h=2.5; a=0; b=20; c=0; d=10; nx=(b-a)/h; ny=(d-c)/h; n=(nx+1)*(ny+1); %t=cos(pi/nx)+cos(pi/ny); %w=4/(2+sqrt(4-t^2)) w=1 M=ones(n,1); %la déclaration et l'initialisation de U sol=zeros(n,1); for i=(nx+3):(n-(nx+1)) if (mod(i,(nx+1))~=0 & mod(i,(nx+1))~=1 ) sol(i)=i; elseif mod(i,(nx+1))==0 sol(i)=100; end end sol; %la transformation du vecteur U en une matrice "sol" de dimension (ny+1,nx+1) for j=1:(ny+1) for i=1:(nx+1) U(j,i)=sol(i+(nx+1)*(j-1)); end end U % l est le nombre d'itérations L=0; while(abs(norm(U)-norm(M))>ep) M=U; for i=2:nx-1 for j=2:ny-1 U(j,i)=U(j,i)+(w/4)*(U(j,i+1)+U(j,i-1)+U(j,i)+U(j-1,i)-4*U(j,i)); end end L=L+1; end U L % la trace de la matrice "sol" x=1:nx+1; y=1:ny+1; mesh(x,y,U) voilà le programme que j'ai fait, mais il me donne pas la solution auquelle je m'attendais, je crois qu'à la ligne où je mets le if (mod(i,(nx+1))~=0 & mod(i,(nx+1))~=1 ) sol(i)=i; est fausse, et je trouve un prbleme aussi là où j'essaie de programmer mon U(i,j) que je vous ai donné en premier :s alors si vous pouviez m'aider |
Deux secondes, je jette un œil
Thought I heard a rumbling, calling to my name
Two hundred million guns are loaded, Satan cries "Take aim!" |
ok merci bien |
Déjà, l'énoncé de ton premier message et le programme que tu me donnes collent pas. Dans le membre de droite il y a des termes de l'itération k+1
Thought I heard a rumbling, calling to my name
Two hundred million guns are loaded, Satan cries "Take aim!" |
ben justement c'est là où se présume mon problème, je sais pas comment faire ma programmation alors qu'il y a des k+1 à droite :s |
D'accord !
Bon, pour le reste, ça va être dur de t'aider vu que je sais pas ce que tu veux mettre exactement comme initialisation pour U dans ta méthode itérative, mais pour ton problème d'itération, il faut que tu fasses passer tous les termes de l'itération k+1 à gauche. U(k+1) (j,i)-w/4*U(k+1)(j,i-1)-w/4*+U(k+1)(j-1,i)=U(k)(j,i)+(w/4)*(U(k)(j,i+1)+U(k)(j,i)-4*U(k)(j,i)) Ensuite changer l'ordre des lignes ou des colonnes d'une matrice, ça revient à multiplier par une matrice de permutation. Cela dit, il manque une info dans ton énoncé, pour les première, dernière lignes et pour les première, dernière colonnes, quelle est l'équation pour l'itération ? Thought I heard a rumbling, calling to my name Two hundred million guns are loaded, Satan cries "Take aim!" |
l'equation de l'iteration est celle de laplace :s et en effet y a des conditions qui manquent :s :s donc l’erreur vient peut etre du prof
Là je suis encore bloquée sur un autre programme, si quelqu’un peut m’aider svp Il s’agit de resoudre l’equation de la chaleur suivante du/dt=(k/p*c)*d²u/dx² K=0.13 c=0.11 p=7.8 dx=0.25 et dt est donné par dt<((dx)²*p*c)/(2*k) U(x,o)=100*x si x appartient à [0,1] U(x,o)=100*(2-x) si x appartient à [1,2] U(0,t)=0 U(2,t)=0 Faudrait resoudre cette equation en utilisant la methode iterative suivante : (les j et les j+1 sont les iterations) U(j+1)(i)=r*(U((j)(i+1)+U(j)(i-1))+(1-2*r)U(j)(i) r=(k/p*c)*(dt/(dx)²) |
OK, c'est bien ce que je me disais au début, c'était donc un schéma numérique pour l'équation de la chaleur.
Mais vu que le schéma ressemblait à rien du tout, je m'étais dit que c'était peut-être pour autre chose. Si tu l'avais dit depuis le début, je te l'aurais dit directement. L'équation de ton tout premier message, si tu l'as bien recopiée, est complètement fausse. Pour ton autre question, rien de compliqué, c'est un schéma explicite, noté vectoriellement tu as U(j+1)=A*U(j) T'as juste à implémenter A. Tu peux jeter un œil ici si tu veux http://www.commentcamarche.net/forum/affich 6135901 resolution de l equation de chaleur Thought I heard a rumbling, calling to my name Two hundred million guns are loaded, Satan cries "Take aim!" |
resalut ^^ !
j'ai reussi a programmer mon U(i) initial (d'apres les donnees) et j'ai implementé mon A(i,j) donc maintenant il ne reste plus que programmer leur produit, mais je sais toujours pas où intervient les iteration :s et comment les programmer :s j'ai lu le sujet que tu m'as passé mais il m'aide pas trop :s (je comprend mais je sais pas faire :s ) alors si ca te derrage pas de m'expliquer de la maniere la plus bete ^^" |
C'est un produit matriciel, il y a rien à coder, MatLab le fait.
Cela dit, vu que la matrice A est creuse, c'est vrai que faire un produit matrice-vecteur est un peu idiot, vaut mieux coder à la main. L'équation de la chaleur que tu veux coder, c'est pour une condition de Dirichlet homogène au bord (la température vaut 0 aux extrémités), donc tes degrés de libertés sont seulement les valeurs de la température en tous les points de discrétisations du segment, sauf le premier et le dernier. Si t'as U au temps j, en faisant : Up = circshift(U,[0 -1]);Up(1)=0;Up(end)=0; Um = circshift(U,[0 1]);Um(1)=0;Um(end)=0; U = U + r*(Up+Um-2*U);T'as U au temps j+1. Si tu veux stocker tous les résultats, (temps et espace), tu peux le faire sous forme de matrice. Chaque ligne de la matrice pour un temps donné et chaque colonne pour une position donnée. Thought I heard a rumbling, calling to my name Two hundred million guns are loaded, Satan cries "Take aim!" |
voila j'ai pris des cas partiulier, comme quoi la matrice A est E dans le programme qui suit et le vecteur U est P
j'ai preciser les limites et j'ai donné au départ le vecteur initial U comme a a(1)=25; U=zeros(8,1); A=zeros(8); for i=2:8 j=i-1; A(i,j)=1; end; C=A'; D=-4*eye(8); E=A+C+D P=E*a for j=1:8 P=E*P end P alors est ce que mon programme doit etre dans les environs de ce qui se trouve en dessus stp !! |
C'est un truc dans ce genre.
Thought I heard a rumbling, calling to my name
Two hundred million guns are loaded, Satan cries "Take aim!" |
merci beaucoup :D :D |
De rien ;-)
Tu me montreras ton programme quand tu l'auras écrit ? Et oublie pas de virer U à chaque extrémité du segment dans ton équation, c'est pas un ddl, il est toujours égal à zéro. Thought I heard a rumbling, calling to my name Two hundred million guns are loaded, Satan cries "Take aim!" |
j'ai oublier un truc :s comment je programme mon x que j'ai donner dans l'ennoncé :s parceque j'en aurai besoin pour le U(x,0)?
stp |
Résultats pour methode iterative
Résultats pour methode iterative
Résultats pour methode iterative
Résultats pour methode iterative
Résultats pour methode iterative