Mathematica Asked by Dominika on October 22, 2021
I need your advice. I’m using ListContourPlot
to plot the lines of force, but It always skip the line, which are the nearest of the upper electrode.
I tried to change number of interactions, but it didn’t help. Then I tried to choose number of contours, but it still skips these lines. I know that the values, which are on that position, are very close, but I really need to see them.
The code:
(*Vstupy*) nula = 0;
(*stineni - kraje matice*) stineni1=0.0000000001;
stineni2=0.0000000001; stineni3=0.0000000001; stineni4=0.0000000001;
(*počet iterací*) iterace = 5000;
(*poloha elektrod*) n = 100(*počet řádků*); m = 100(*počet sloupců*);
h = 48(*misto horní elektrody - řádek*); d =52(*misto dolní elektrody-
řádek*);
z=45(*začátek elektrody - sloupec*); k=45(*začátek elektrod -
sloupec**);
z2=55(*konec elektrod - sloupec*); k2=55(*konec elektrod - sloupec*);
(*potenciál na elektrodách*) potencialhorni = 30;(*potencial na horní
elektrodě*) potencialdolni = 0.0000001; (*potencial na dolní
elektrodě*)
(*program*)
policko=Table[nula,{i,n},{j,m}]; (*tvorba matice z 0 o rozměrech n am*)
For[i=1,i<=z2-z+1,i++, policko[[h,z+i-1]]=potencialhorni ]
(*vložení hodnoty potenciálu horní elektrody*)
For[i=1,i<=k2-k+1,i++,
policko[[d,k+i-1]]=potencialdolni ]
(*vložení hodnoty potenciálu
dolni elektrody*) For[i=1,i<=m,i++, policko[[1,i]]=stineni1 ]
(*horní stínění*) For[i=1,i<=m,i++, policko[[m,i]]=stineni2 ]
(*dolní stínění*) For[i=1,i<=n,i++, policko[[i,n]]=stineni3 ]
(*prave stínění*) For[i=1,i<=n,i++, policko[[i,1]]=stineni4 ]
(*levé stínění*) policko//MatrixForm(*tvorba pole před
průměrováním*);
zdrojovaMatice =policko; finalni = zdrojovaMatice;
For [i=0,i<iterace, i++,
prumerovaMatice=ImageConvolve[Image[finalni],({ {0, 0.25, 0}, {0.25,
0, 0.25}, {0, 0.25, 0} })];
(*do "prumerovaMatice" se uloží průměry
bodů po jedné iteraci, průměry jsou tvořený na základě hodnot v matici
"finalni"*)
bezZdroju =
ImageData[ImageMultiply[prumerovaMatice,ContourDetect[
Image[zdrojovaMatice],0]],"Real"];
(*v matici "prumerovaMatice" se na
pozicích elektrod nahradí hodnoty nulama a uloží se do "bezZdroju"*)
finalni = bezZdroju+ zdrojovaMatice; (*Sečte se matice
"zdrojovaMatice", kde jsou samé nuly až na pozice elektrod s maticí
"bezZdroju", kde jsou odstraněny hodnoty na pozicích elektrod
prumerovaMatice všude jinde jsou hodnoty zachovány dle průměrování
hodnot*)
];
MatrixPlot[finalni]
(*výkres*) MatrixPlot[finalni, ColorFunction->Hue]
(*potencialy*)
ListContourPlot[Table[finalni[[i,j]],{i,1,Length[finalni]},{j,1,Length[finalni]}],Exclusions->None;
PerformanceGoal->"Quality",ScalingFunctions->{None,"Reverse"},
Contours->30]
(*Graf průřez celého obrazce*) sudecislo=(n)/2; lichecislo=(n)/2+0.5;
Prostredek = If[EvenQ[n],Table[{i
-1,finalni[[i,sudecislo]]},{i,1,Length[finalni]}],Table[{i-1,finalni[[i,lichecislo]]},{i,1,Length[finalni]}]];
ListLinePlot[Prostredek]
(*Graf průřez mezi elektridama*) sudecislo1=(z2-z)/2+z;
lichecislo1=(z2-z)/2+0.5+z;
Prostredek1 =
If[EvenQ[(z2-z)],Table[{i,finalni[[i,sudecislo1]]},
{i,h,d}],Table[{i,finalni[[i,lichecislo1]]},{i,h,d}]];
ListLinePlot[Prostredek1,AxesOrigin->{h,0}]
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP