Mat-1.192  Numeerinen ja symbolinen laskenta

Laplace/Poisson ja Mathematica/Matlab-I/O

Kenrick Bingham

29.2.1996

Maaritellaan ensin funktio, joka laaskee annetun funktion arvot hilassa ja tallettaa tuloksen tiedostoon "rhs".

Komento LaskeRHS[f, {x, xmin, xmax},{y, ymin, ymax}, n] laskee funktion f(x,y) arvot nxn-hilassa valilla [xmin, xmax]x[ymin, ymax].

LaskeRHS[f_, xlist_List, ylist_List, n_Integer]:=
Module[{xsymb,xalku,xloppu,ysymb,yalku,yloppu,A,stream},
  xsymb=xlist[[1]];
  xalku=xlist[[2]];
  xloppu=xlist[[3]];
  xaskel=(xloppu-xalku)/(n-1);
  ysymb=ylist[[1]];
  yalku=ylist[[2]];
  yloppu=ylist[[3]];
  yaskel=(yloppu-yalku)/(n-1);
  A=Table[f /. {xsymb->xalku+i*xaskel, ysymb->yalku+j*yaskel},
          {i,0,n-1}, {j,0,n-1}];
  Needs["Utilities`BinaryFiles`"];
  stream = OpenWriteBinary["rhs"];
  WriteBinary[stream, N[Transpose[A]]];
  Close[stream];
  MatrixForm[N[A]]
];

Lasketaan funktion f(x,y)=xy arvot 11x11-hilassa valilla [1, 2]x[1, 2]:

LaskeRHS[x y, {x,1,2}, {y,1,2}, 11]

Tassa valissa kaydaan Matlabissa laskemassa ratkaisu ja tallettamassa se tiedostoon "ratkaisu".  Sitten luetaan ratkaisu Mathematicaan, tehdaan siita matriisi ja piirretaan korkeuskayrakuva.

Needs["Utilities`BinaryFiles`"];
ratkaisu=Partition[ReadListBinary["ratkaisu",Double],11];
N[ratkaisu,2]//MatrixForm

ListContourPlot[ratkaisu];