|
Apprendre Maple Site dédié au logiciel de calcul formel Maple
|
Voir le sujet précédent :: Voir le sujet suivant |
Auteur |
Message |
wouroud
Inscrit le: 15 Juin 2006 Messages: 10
|
Posté le: 16 Juin 2006 13:38 Sujet du message: produit de N matrice |
|
|
Bonjour
je suis bloqué dans le calcul du produit de N=55 matrices. il n' y personne qui peut m'aider?
le programme se bloque au 11eme matrice voit ci le code
M1:= matrix([[cos(phi1),-I*n1*sin(phi1)], [(-I/n1)*sin(phi1), cos(phi1)]]);
M2:= matrix([[cos(phi2),-I*n2*sin(phi2)], [(-I/n2)*sin(phi2), cos(phi2)]]);
##########################
l1:=10;
##############intialisation
F0[1]:=1; F0[2]:=1;
###############nombre de couches
for t by 1 from 2 to l1-1 do
F0[t+1]:=F0[t]+F0[t-1]; od;
################ Nombre total des couches ############
N:=F0[l1]; d:=N*(n1*d1+n2*d2);
################ les matrices de base ############
M[1]:= evalm(M2);
M[2]:= evalm(M1);
################ Produit des matrices ############
for i by 1 from 3 to N do M[i]:=linalg[multiply](M[i-1],M[i-2]); od;
S[N]:= evalm(M[l1]); |
|
Revenir en haut de page |
|
|
Administrateur Administrateur - Site Admin
Inscrit le: 11 Sep 2006 Messages: 18
|
Posté le: 16 Juin 2006 15:12 Sujet du message: |
|
|
Chez moi, il calcule plus loin que pour la valeur 12. pb de mémore sans doute?
Et en rajoutant des evalf dans les expressions? ça ne simplifierait pas?
Merci de rester dans le premier fil que vous avez ouvert. |
|
Revenir en haut de page |
|
|
wouroud
Inscrit le: 15 Juin 2006 Messages: 10
|
Posté le: 16 Juin 2006 15:48 Sujet du message: |
|
|
les quels des expression? car pour les matrices le MAPLE 5 n'accepte pas evalf mais il accepte evalm!
en maple exisite il une fonction de simplification les matrices ou bien des element de matrice?
pour le memoire mon pc a une memoir de 256Mb est ce c'est insiffusant? |
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 16 Juin 2006 18:40 Sujet du message: |
|
|
Bonsoir, est-il vraiment indispensable d'avoir les matrices avec leurs coeff en formel? C'est ce qui conduit au plantage du programme Maple car les formules deviennent trop lourdes à gérer en mémoire.
Ne vaudrait-il pas mieux remplacer les variables des coefficients par les valeurs numériques qui vous intéresse avant de déclencher la boucle où est calculée M[i]:=linalg[multiply](M[i-1],M[i-2]);
Donc je commencerais par définir les matrices initiales comme des fonctions de n1,phi1 et de n2,phi2
Code: |
> M1:=(n1,phi1)-> matrix([[cos(phi1),-I*n1*sin(phi1)], [(-I/n1)*sin(phi1), cos(phi1)]]);
> M2:= (n2,phi2)->matrix([[cos(phi2),-I*n2*sin(phi2)], [(-I/n2)*sin(phi2), cos(phi2)]]);
[ cos(phi1) -I n1 sin(phi1)]
[ ]
M1 := (n1, phi1) -> [-I sin(phi1) ]
[------------ cos(phi1) ]
[ n1 ]
[ cos(phi2) -I n2 sin(phi2)]
[ ]
M2 := (n2, phi2) -> [-I sin(phi2) ]
[------------ cos(phi2) ]
[ n2 ]
> ##########################
> l1:=10;
> ##############intialisation
> F0[1]:=1; F0[2]:=1;
> ###############nombre de couches
> for t by 1 from 2 to l1-1 do
> F0[t+1]:=F0[t]+F0[t-1]; od;
> ################ Nombre total des couches ############
> N:=F0[l1]; d:=N*(n1*d1+n2*d2);
> ################ les matrices de base ############
> M[1]:= evalm(M2(0.0001,0.125)); # valeurs que vous modifierez
> M[2]:= evalm(M1(0.004,0.075));
> ################ Produit des matrices ############
>
> for i by 1 from 3 to N do M[i]:=linalg[multiply](M[i-1],M[i-2]); od;
>
> S[N]:= evalm(M[l1]);
>
l1 := 10
F0[1] := 1
F0[2] := 1
F0[3] := 2
F0[4] := 3
F0[5] := 5
F0[6] := 8
F0[7] := 13
F0[8] := 21
F0[9] := 34
F0[10] := 55
N := 55
d := 55 n1 d1 + 55 n2 d2
[ 0.9921976672 -0.00001246747334 I]
M[1] := [ ]
[-1246.747334 I 0.9921976672 ]
[ 0.9971888181 -0.0002997188291 I]
M[2] := [ ]
[-18.73242682 I 0.9971888181 ]
[ 0.6157347680 -0.0003098127480 I]
M[3] := [ ]
[-1261.828770 I 0.9891748731 ]
[ 0.6082002810 -0.0004934891117 I]
M[4] := [ ]
[-1276.811186 I 0.6082002811 ]
[-0.2482086999 -0.0006765752298 I]
M[5] := [ ]
[-1553.621652 I 0.2060440537 ]
[ -1.014819423 -0.0002890049541 I]
M[6] := [ ]
[-1207.992478 I -0.6413793176 ]
[-0.1971173446 0.0006270539320 I]
M[7] := [ ]
[1296.295038 I -0.9494501830 ]
[0.9575149431 -0.0003452115339 I]
M[8] := [ ]
[-168.576704 I 0.9835933985 ]
[0.2587531955 0.0009281746640 I]
M[9] := [ ]
[1308.256634 I -0.8281662471 ]
[0.4042286769 0.0008236218847 I]
M[10] := [ ]
[1392.284812 I -0.3629535741 ]
[-0.9729133331 -0.0003069010289 I]
M[11] := [ ]
[-114.5782770 I -0.9916975887 ]
[ 0.0340141719 -0.0006899218878 I]
M[12] := [ ]
[-1427.041316 I 0.4543093606 ]
[-0.1121429025 0.0006737548882 I]
M[13] := [ ]
[1336.333539 I -0.8884979456 ]
[0.9576616143 0.0003834629955 I]
M[14] := [ ]
[1313.377557 I 0.5183128244 ]
[-0.6198294149 0.0003045231102 I]
M[15] := [ ]
[545.3528396 I -1.345414429 ]
[-0.9935406566 -0.0000798434108 I]
M[16] := [ ]
[-1244.773635 I -0.9064681862 ]
[0.6593685547 -0.0001951336139 I]
M[17] := [ ]
[277.2023145 I 1.598637716 ]
[-0.8980066447 0.0001242361787 I]
M[18] := [ ]
[-2265.353851 I -1.426981453 ]
[-0.6265558997 0.0003738399229 I]
M[19] := [ ]
[-1889.265656 I -2.723273055 ]
[ 1.409531070 -0.0006113035471 I]
M[20] := [ ]
[7865.750215 I 4.120775287 ]
[ -2.038064805 0.002191685464 I]
M[21] := [ ]
[-12713.57143 I -14.16252775 ]
[ -20.11196608 0.01027731954 I]
M[22] := [ ]
[-129319.0796 I -66.13244566 ]
[ 171.6509263 -0.1896319269 I]
M[23] := [ ]
[ 7 ]
[0.1104340236 10 I 1220.029344 ]
[ -27975.26386 14.30493452 I]
M[24] := [ ]
[ 9 ]
[-0.1799835253 10 I -92033.18179 ]
[ 8 ]
[ -0.2059949472 10 22757.44307 I ]
M[25] := [ ]
[ 12 9]
[-0.1325302845 10 I -0.1464138051 10 ]
[ 13 10 ]
[ 0.4672241131 10 -0.2389114318 10 I]
M[26] := [ ]
[ 17 14 ]
[0.3005964247 10 I 0.1537076538 10 ]
[ 21 18 ]
[ -0.4128758068 10 0.4561275796 10 I]
M[27] := [ ]
[ 25 22 ]
[-0.2656305355 10 I -0.2934572849 10 ]
[ 35 31 ]
[ -0.1564008729 10 0.7997437511 10 I]
M[28] := [ ]
[ 39 35 ]
[-0.1006231098 10 I -0.5145284791 10 ]
[ 56 53 ]
[ 0.2770104975 10 -0.3060293814 10 I]
M[29] := [ ]
[ 60 57 ]
[0.1782193230 10 I 0.1968891060 10 ]
[ 91 88 ]
[ -0.3512609641 10 0.1796145736 10 I]
M[30] := [ ]
[ 95 92 ]
[-0.2259895990 10 I -0.1155580313 10 ]
[ 147 144 ]
[ -0.4174108515 10 0.4611377038 10 I]
M[31] := [ ]
[ 151 148 ]
[-0.2685482324 10 I -0.2966806319 10 ]
[ 239 235 ]
[ 0.1188743386 10 -0.6078547242 10 I]
M[32] := [ ]
[ 242 239 ]
[0.7647978813 10 I 0.3910734738 10 ]
[ 386 383 ]
[ -0.2128577506 10 0.2351561632 10 I]
M[33] := [ ]
[ 390 387 ]
[-0.1369455836 10 I -0.1512916392 10 ]
[ 625 622 ]
[ -0.2051502597 10 0.1049019966 10 I]
M[34] := [ ]
[ 629 625 ]
[-0.1319868408 10 I -0.6749044890 10 ]
[ 1011 1008 ]
[ 0.1873264743 10 -0.2069502982 10 I]
M[35] := [ ]
[ 1015 1012 ]
[0.1205196112 10 I 0.1331449255 10 ]
[ 1636 1633 ]
[ -0.3115772354 10 0.1593226065 10 I]
M[36] := [ ]
[ 1640 1637 ]
[-0.2004584104 10 I -0.1025028558 10 ]
[ 2647 2644 ]
[ -0.2503816509 10 0.2766109675 10 I]
M[37] := [ ]
[ 2651 2648 ]
[-0.1610872106 10 I -0.1779622788 10 ]
[ 4283 4280 ]
[ 0.6325031710 10 -0.3234255983 10 I]
M[38] := [ ]
[ 4287 4284 ]
[0.4069314629 10 I 0.2080812523 10 ]
[ 6930 6927 ]
[ -0.6793644629 10 0.7505328791 10 I]
M[39] := [ ]
[ 6934 6931 ]
[-0.4370804566 10 I -0.4828678440 10 ]
[ 11214 11211 ]
[ -0.3483854601 10 0.1781442072 10 I]
M[40] := [ ]
[ 11218 11215 ]
[-0.2241395956 10 I -0.1146120465 10 ]
[ 18145 18142 ]
[ 0.1015314215 10 -0.1121675835 10 I]
M[41] := [ ]
[ 18148 18145 ]
[0.6532193322 10 I 0.7216488539 10 ]
[ 29359 29356 ]
[ -0.2867840391 10 0.1466447976 10 I]
M[42] := [ ]
[ 29363 29359 ]
[-0.1845072941 10 I -0.9434637601 10 ]
[ 47504 47501 ]
[ -0.1249088079 10 0.1379939228 10 I]
M[43] := [ ]
[ 47507 47504 ]
[-0.8036216458 10 I -0.8878069144 10 ]
[ 76863 76860 ]
[ 0.2904307054 10 -0.1485094922 10 I]
M[44] := [ ]
[ 76867 76863 ]
[0.1868534376 10 I 0.9554605833 10 ]
[ 124367 124364 ]
[ -0.1556227957 10 0.1719254263 10 I]
M[45] := [ ]
[ 124371 124368 ]
[-0.1001225208 10 I -0.1106110901 10 ]
[ 201230 201227 ]
[ -0.3664462075 10 0.1873794305 10 I]
M[46] := [ ]
[ 201234 201231 ]
[-0.2357592785 10 I -0.1205536814 10 ]
[ 325597 325594 ]
[ 0.2446363926 10 -0.2702638511 10 I]
M[47] := [ ]
[ 325601 325598 ]
[0.1573909027 10 I 0.1738787557 10 ]
[ 526827 526824 ]
[ -0.7268181837 10 0.3716528499 10 I]
M[48] := [ ]
[ 526831 526828 ]
[-0.4676105993 10 I -0.2391090589 10 ]
[ 852424 852421 ]
[ -0.7627539539 10 0.8426580323 10 I]
M[49] := [ ]
[ 852428 852425 ]
[-0.4907304764 10 I -0.5421380978 10 ]
[ 1379252 1379249 ]
[ 0.4494741718 10 -0.2298351372 10 I]
M[50] := [ ]
[ 1379256 1379253 ]
[0.2891767042 10 I 0.1478682684 10 ]
[ 2231677 2231674 ]
[ -0.1470709266 10 0.1624776862 10 I]
M[51] := [ ]
[ 2231680 2231678 ]
[-0.9462053325 10 I -0.1045327290 10 ]
[ 3610929 3610926 ]
[ -0.5359522009 10 0.2740550077 10 I]
M[52] := [ ]
[ 3610933 3610930 ]
[-0.3448137863 10 I -0.1763178595 10 ]
[ 5842606 5842603 ]
[ 0.3381352965 10 -0.3735574520 10 I]
M[53] := [ ]
[ 5842610 5842607 ]
[0.2175449820 10 I 0.2403344164 10 ]
[ 9453536 9453532 ]
[ -0.1469301950 10 0.7513161747 10 I]
M[54] := [ ]
[ 9453539 9453536 ]
[-0.9452999129 10 I -0.4833717903 10 ]
[ 15296142 15296139 ]
[-0.2131273488 10 , 0.2354540037 10 I]
M[55] := [ ]
[ 15296146 15296143]
[-0.1371190340 10 I , -0.1514832598 10 ]
[0.4042286769 0.0008236218847 I]
S[55] := [ ]
[1392.284812 I -0.3629535741 ]
|
|
|
Revenir en haut de page |
|
|
wouroud
Inscrit le: 15 Juin 2006 Messages: 10
|
Posté le: 19 Juin 2006 10:57 Sujet du message: |
|
|
Merci beaucoup pour votre idee.
En fait j'ai besoin de laisser les matrices en fonction du variable f qui varie entre f1 et f2 car apres j'ai besoin de faire une une derivation par rapport a f puis chercher les valeurs numeriques.
donc pour determiner T (T= (ab(t))^2 et t = X + iY) je peut replacer f par sa valeur mais comment je peut faire pour determier Vg = d*T / (Y'*X -X'*Y) ?
restart;
c:=3*10^8:
> f1:=evalf(c/(1500*10^(-9)));
> f2:=evalf(c/(800*10^(-9)));
> lam:=0.8e-6;
> n1:=1.6;
> n2:=3.428;
> d1:=lam/(4*n1);
> d2:=lam/(4*n2);
> #f:=f1;
> lam0:=c/f;
>
> phi1:=(2*Pi*n1*d1/lam0);
> phi2:=(2*Pi*n2*d2/lam0);
>
>
> M1:=(n1,phi1)-> matrix([[cos(phi1),-I*n1*sin(phi1)], [(-I/n1)*sin(phi1), cos(phi1)]]);
> M2:= (n2,phi2)->matrix([[cos(phi2),-I*n2*sin(phi2)], [(-I/n2)*sin(phi2), cos(phi2)]]);
>
> ############# Ordre d'iteration ##########################
> l1:=10;
> ##############intialisation
> F0[1]:=1: F0[2]:=1:
> ###############nombre de couches
> for t by 1 from 2 to l1-1 do
> F0[t+1]:=F0[t]+F0[t-1]: od:
> ################ Nombre total des couches ############
> N:=F0[l1];
> ################ epaisseur du systeme global ############
> d[1]:=n1*d1:
> d[2]:=n2*d2:
> for i by 1 from 3 to N do d[i]:=d[i-1]+d[i-2]: od:
> d:=d[N];
> ################ Matrice des couches ############
>
> M[1]:= evalm(M2(n1,phi1));
> M[2]:= evalm(M1(n2,phi2));
>
> ################ Produit des matrices ############
>
> for i by 1 from 3 to N do M[i]:=evalf(linalg[multiply](M[i-1],M[i-2])); od;
>
> S[N]:= simplify(evalm(M[N]));
> ################ expression de la transmission ############
>
> t:=2/(S[N][1,1]+S[N][1,2]+S[N][2,1]+S[N][2,2]);
> ################ Transmittance ############
> T:=evalc(abs(t)^2);
>
> ################ t est complex: t= X+IY ############
>
> X:=Re(t);
> Y:=Im(t);
> XDf:=(diff(X,f));
> YDf:=diff(Y,f);
>
> ################ Vg= d.T/(Y'*X-X'*Y ############
> dinoVg:=YDf*X-XDf*Y;
> numVg:=d*T;
> Vg:=abs(numVg/dinoVg);
>
> plot(Vg,f=f1..f2); |
|
Revenir en haut de page |
|
|
ALS
Inscrit le: 11 Sep 2006 Messages: 647
|
Posté le: 19 Juin 2006 12:29 Sujet du message: |
|
|
Pour dériver expr par rapport à une variable f par exemple, utiliser
> diff(expr,f) |
|
Revenir en haut de page |
|
|
wouroud
Inscrit le: 15 Juin 2006 Messages: 10
|
Posté le: 19 Juin 2006 14:01 Sujet du message: |
|
|
je l'ai deja utilisé et le probleme est dans le calcul du produit de matrice car ce produit doit donner un matrice en fonction de f pour que je puisse deriver apres. |
|
Revenir en haut de page |
|
|
|
|
Vous ne pouvez pas poster de nouveaux sujets dans ce forum Vous ne pouvez pas répondre aux sujets dans ce forum Vous ne pouvez pas éditer vos messages dans ce forum Vous ne pouvez pas supprimer vos messages dans ce forum Vous ne pouvez pas voter dans les sondages de ce forum
|
Développé par phpBB © 2001, 2006 phpBB Group
Traduction par : phpBB-fr.com
Apprendre Maple - ©
- Alain Le Stang - Navigation optimisée pour une résolution 1024 x 768.
|