TransWikia.com

Getting the contours near a singularity when using ListContourPlot

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.

enter image description here

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}]

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP