Dazu habe ich mit der Poissongleichung begonnen.
Das zugehörige fuction-file sieht wie folgt aus:
Code:
function[ u , x , y ]= poissonfd(a,c,b,d,nx,ny,f,g)
%??????????????????????????????????????????????????????????
% poissonfd loest die 2d?Poisson?Gleichung mit dem % 5 Punkte Finite-Differenzen-Schema im Rechteck % (a,b)X(c,d) mi t der Dirichlet-Randbedingung % u(x,y)=g(x,y) fuer (x,y) auf dem Rand des Rechtecks . % nx : Anzahl der inneren Gitterpunkte in x?Richtung % ny : Anzahl der inneren Gitterpunkte in y?Richtung % f : MATLAB?Function der rechte Seiten der Poisson?Gleichung % g : MATLAB?Function der Randbedingung
%??????????????????????????????????????????????????????????
%%%Schrittweiten
nx=nx+1;
ny=ny+1;
hx = (b-a)/nx;
hy = (d-c)/ny;
nx1 =nx+1;
hx2 = hx^2;
hy2 = hy^2;
dim = (nx +1)*(ny +1);
K = sparse(dim,dim); %%% Matrix der FDM
rhs = zeros(dim,1); %%% Rechte Seite der FDM
x = [ a : hx : b ];
y = [ c : hy : d ];
[ X, Y ] = meshgrid(x, y);%ndgrid=lexikografische reihenfolge
rhs2 = f(X, Y)';
rhs2 = rhs2(:);
dirichletValues = g(X, Y)';
dirichletValues = dirichletValues(:);
nbound = [1 : nx1, dim-nx : dim, 1 : nx1 : dim-nx,nx1 : nx1 : dim];%Randknoten
nbound=unique(nbound);
ninternal = setdiff(1 : dim , nbound );%innere Knoten
rhs=rhs2;
%MAtrixeintraege
e = ones(1,(nx-1)*(ny-1));
I = repmat(ninternal,1,5);
J = [ninternal,ninternal-1,ninternal+1,ninternal-nx1,ninternal+nx1];
aij = [(2/hx2+2/hy2)*e,-1/hx2*e,-1/hx2*e,-1/hy2*e,-1/hy2*e];
K=sparse(I,J,aij,dim,dim);
rhs=rhs-K(:,nbound)*dirichletValues(nbound);%Randknoten werden extrapoliert
K = K( ninternal,ninternal ); %%% Extraktion des Subsystems
rhs = rhs( ninternal ); %%% der inneren Freihei t sgrade
utemp = K\ rhs; %%% Loesen des LGS
uh = dirichletValues; %%% Setzen der Randwerte
uh ( ninternal ) = utemp; %%% Loesung an inneren Knoten
u=reshape(uh',nx+1,ny+1)';
x = [ a : hx : b ];
y = [ c : hy : d ];
Nur weiß ich nicht wie ich die um meinen Code basten soll.
Einstellungen und Berechtigungen
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.