code éléments finis P1
Salut
je cherche un exemple de code en C ou en C++ pour les éléments finis P1 sur un problème aux limites de second ordre sur un intervalle [a,b].
Aidez moi svp, merci beaucoup.
je cherche un exemple de code en C ou en C++ pour les éléments finis P1 sur un problème aux limites de second ordre sur un intervalle [a,b].
Aidez moi svp, merci beaucoup.
Réponses
-
salut
comment construire un maillage en d 1en C (ou C++), je ne trouve rien sur le net en dimension 1.
merci beaucoup. -
Voila ce que ca donne en Scilab (a toi de l'adapter en C++)
funcprot(0); lines(0); clear; function y=a(x) if (x < 1/2) then y= x^{1-alpha}; else y=1; end endfunction function y=f(x) c1= -4*(1/2)^{alpha} -2*alpha; if (x < 1/2) then y=0; else y=-2*c1; end endfunction function I=integrale(a,b,r) q=sqrt(3/5); [H1,H2,H3]=(5/9,8/9,5/9); [e1, e2, e3]=(a+(1-q)*(b-a)/2, (a+b)/2, a+(1+q)*(b-a)/2); I=((b-a)/2)*(H1*r(e1)+H2*r(e2)+H3*r(e3)); endfunction function b=CalculSMD(N, f) h=1/(N+1); for i=1:N b(i)=f(i*h)*h; end endfunction function A=CalculMatD(N,a) A=zeros(N,N); h=1/(N+1); for i=1:N-1 A(i,i)=integrale((i-1)*h,i*h,a)+integrale(i*h,(i+1)*h,a); A(i,i+1)=-integrale(i*h,(i+1)*h,a); A(i+1,i)=-integrale(i*h,(i+1)*h,a); end; i=N; A(N,N)=integrale((N-1)*h,N*h,a)+integrale(N*h,(N+1)*h,a); A=A/h^2; endfunction function y=uapproche(N,a,f) y=[0;CalculMatD(N,a)\CalculSMD(N, f);0]; endfunction function y=uderive(N,a,f) h=1/(N+1); b=uapproche(N,a,f); y(1:N+1)=(b((1:N+1)+1)-b(1:N+1))/h; y(N+2)=y(N+1); endfunction function y=u(x) [c1,c2,c3]=(4*(1/2)^{alpha} -2*alpha, 4*(1/2)^{alpha}+ 3*alpha, alpha); if x<1/2 then y=x^{alpha}; else y=c1*x^2 + c2*x + c3; end endfunction function y=ud(x) [c1,c2]= (4*(1/2)^{alpha} -2*alpha, 4*(1/2)^{alpha}+ 3*alpha); if x<1/2 then y=alpha*x^(alpha-1); else y = 2*c1*x + c2; end endfunction function y=u(x,i,N,d) h=1/(N+1); y=d(i+1) + (x-i*h)*((d(i+2)-d(i+1))/h); endfunction function y=Erreur(N,a,f) d=uapproche(N,a,f); h=1/(N+1); [H1,H2,H3]=(5/9, 8/9, 5/8); q=sqrt(3/5); y=0; for i=0:N [a,b]=(i*h, (i+1)*h); [e1, e2, e3]=(a+(1-q)*(b-a)/2, (a+b)/2, a+(1+q)*(b-a)/2); y = y + H1*(u(e1,i,N,d)-u(e1))^2; y = y + H2*(u(e2,i,N,d)-u(e1))^2; y = y + H3*(u(e3,i,N,d)-u(e3))^2; //disp(y); end y=((b-a)/2)*y; endfunction //Pour la questioin 5 de l'exercice 6 function AfficheConditionnement() alpha=0.7; for N=1:100 h(N)=1/(N+1); A=CalculMatD(N,a); condit(N)=cond(A); end plot2d(h,condit,13,logflag="ll") alpha=1; for N=1:100 A=CalculMatD(N,a); condit(N)=cond(A); end plot2d(h,condit,5,logflag="ll") plot2d(h,h^{-1},26,logflag="ll") plot2d(h,h^{-2},2,logflag="ll") xtitle('Conditionnement de la matrice A_h') legends(['1/h^2','alpha=0.7','alpha=1','1/h'],[2,13,5,26],1) xs2pdf (0,'ex6_5.pdf'); endfunction // Pour la question 1 de l'exercice 7 function AfficheAppExacte() N=2^6-1; h=1/(N+1); r(1:N+2)=(0:N+1)*h; alpha=0.7; plot2d(r,uapproche(N,a,f),1); alpha=1; plot2d(r,uapproche(N,a,f),22); xtitle('Solution approché (sa) en vis à vis de la solution exacte (se)') legends(['(sa) alpha=0.7','(se) alpha=0.7','(sa) alpha=1','(se) alpha=1'],[1,2,22,5],1) xs2pdf (0,'ex7_1.pdf'); endfunction // Pour la question 2 de l'exercice 7 function AfficheDerAppExacte() N=2^6-1; h=1/(N+1); r(1:N+2)=(0:N+1)*h; alpha=0.7; plot2d(r,uderive(N,a,f),1); alpha=1; plot2d(r,uderive(N,a,f),22); xtitle('Dérivée de la solution approché (sa) en vis à vis de la solution exacte (se)') legends(['(sa) alpha=0.7','(se) alpha=0.7','(sa) alpha=1','(se) alpha=1'],[1,2,22,5],1) xs2pdf (0,'ex7_2.pdf'); endfunction //Pour la question 3 de l'exercice 7 function AfficheErreur() clf(); alpha=1; x(1:8)= 2^(1:8)-1; for j=1:8 y(j)=Erreur(2^j-1,a,f); H(j)= 1/(x(j)+1); end plot2d(H,y,5,logflag="ll"); alpha=0.7; for j=1:8 y(j)=Erreur(2^j-1,a,f); end plot2d(H,y,2,logflag="ll"); plot2d(H,H^2,26,logflag="ll"); xtitle('Erreur en norme L2'); legends(['alpha=0.7','alpha=1','h^2'],[2,5,26],1); xs2pdf (0,'ex7_3.pdf'); endfunction
-
Bonsoir,
c'est écrit pour la question 3 de l'exercice 7.... ect. Je peux voir ces exercices?
Comment adapter un code Scilab à un code en C ou en C++? ( est-ce qu'il y' a par exemple un manuel sur lequel on peut apprendre à faire ça?)
merci pour l'aide. -
Un code n'est que l'écriture d'un algorithme mathématique.
Beaucoup de structures se ressemblent entre le C++ et le scilab.
Après si tu ne connais pas le C++, il vaut mieux l'apprendre...
Connectez-vous ou Inscrivez-vous pour répondre.
Bonjour!
Catégories
- 164.6K Toutes les catégories
- 44 Collège/Lycée
- 22.1K Algèbre
- 37.4K Analyse
- 6.3K Arithmétique
- 57 Catégories et structures
- 1.1K Combinatoire et Graphes
- 13 Sciences des données
- 5.1K Concours et Examens
- 18 CultureMath
- 50 Enseignement à distance
- 2.9K Fondements et Logique
- 10.6K Géométrie
- 80 Géométrie différentielle
- 1.1K Histoire des Mathématiques
- 74 Informatique théorique
- 3.9K LaTeX
- 39K Les-mathématiques
- 3.5K Livres, articles, revues, (...)
- 2.7K Logiciels pour les mathématiques
- 24 Mathématiques et finance
- 332 Mathématiques et Physique
- 4.9K Mathématiques et Société
- 3.3K Pédagogie, enseignement, orientation
- 10.1K Probabilités, théorie de la mesure
- 789 Shtam
- 4.2K Statistiques
- 3.8K Topologie
- 1.4K Vie du Forum et de ses membres