Randwertaufgabe < Matlab < Mathe-Software < Mathe < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 22:02 So 22.07.2012 | Autor: | Jack159 |
Aufgabe | Gegeben ist die Randwertaufgabe u''(t)+f(t)=0, u(0)=ua, u(1)=ub mit gegebenem f:[0,1] [mm] \to \IR [/mm] .
f(x)=exp(2x)*(5*sin(3x)-12*cos(3x))
Erstellen Sie ein m-File, der diese RWA mit folgenden Diskretisierungen näherungsw. löst:
[mm] h=\bruch{1}{n+1} [/mm]
und der Differenzenformel:
u''(t) [mm] \approx \bruch{u(t+h)-2u(t)+u(t-h)}{h^2} [/mm]
- Deklarieren Sie n, ua, ub und f
- Stützstellenvektor t erstellen
- Matrix A erstellen mithilfe von diag
- rechte Seite rs erstellen
- [mm] u=A\rs [/mm] lösen
Näherungslösung und exakte Lösung plotten.
Exakte Lösung ist: u(x)=exp(2x)*sin(3x) |
Hallo,
Das Gleichungssystem erstmal schriftlich:
$ [mm] u_{i-1}:=u\left(t-h\right) [/mm] $
$ [mm] u_{i}:=u\left(t\right) [/mm] $
$ [mm] u_{i+1}:=u\left(t+h\right) [/mm] $
[mm] u_{i+1}-2u_{i}+u_{i-1}=-2h^2*f(t_{i}) [/mm] Für i=1, ..., n-1
Dies wird eben in Au=rs in Matrixform umgeschrieben im Programm und anschließend nach u aufgelöst.
Könnte bitte jemand schauen ob es so korrekt ist?
Hier das Programm:
n=100;
ua=0;
ub=exp(2)*sin(3);
f=@(x)exp(2.*x).*(5.*sin(3.*x)-12.*cos(3.*x));
h=1/(n+1);
%t=0:h:1;
%t(:,1)=0:h:1;
t=0:h:1;
ti=t(2:n);
haupt=-2*ones(1,n-1);
neben=ones(1,n-2);
A=diag(haupt)+diag(neben,-1)+diag(neben,1);
for i=1 : +1: n-1
[mm] rs(i,1)=-2*(h^2)*f(ti(i));
[/mm]
end
[mm] u=A\rs;
[/mm]
hold on
plot(ti, u, 'b')
plot(ti, exakt(ti), 'r')
hold off;
|
|
|
|
Hallo Jack159,
> Gegeben ist die Randwertaufgabe u''(t)+f(t)=0, u(0)=ua,
> u(1)=ub mit gegebenem f:[0,1] [mm]\to \IR[/mm] .
> f(x)=exp(2x)*(5*sin(3x)-12*cos(3x))
>
> Erstellen Sie ein m-File, der diese RWA mit folgenden
> Diskretisierungen näherungsw. löst:
> [mm]h=\bruch{1}{n+1}[/mm]
> und der Differenzenformel:
>
> u''(t) [mm]\approx \bruch{u(t+h)-2u(t)+u(t-h)}{h^2}[/mm]
>
> - Deklarieren Sie n, ua, ub und f
> - Stützstellenvektor t erstellen
> - Matrix A erstellen mithilfe von diag
> - rechte Seite rs erstellen
> - [mm]u=A\rs[/mm] lösen
>
> Näherungslösung und exakte Lösung plotten.
> Exakte Lösung ist: u(x)=exp(2x)*sin(3x)
>
>
>
> Hallo,
>
> Das Gleichungssystem erstmal schriftlich:
>
>
> [mm]u_{i-1}:=u\left(t-h\right)[/mm]
>
> [mm]u_{i}:=u\left(t\right)[/mm]
>
> [mm]u_{i+1}:=u\left(t+h\right)[/mm]
>
> [mm]u_{i+1}-2u_{i}+u_{i-1}=-2h^2*f(t_{i})[/mm] Für i=1, ..., n-1
>
Hier muss doch i von 1 bis n laufen, da [mm]h=\bruch{1}{n+1}[/mm].
> Dies wird eben in Au=rs in Matrixform umgeschrieben im
> Programm und anschließend nach u aufgelöst.
>
>
>
> Könnte bitte jemand schauen ob es so korrekt ist?
>
>
>
>
> Hier das Programm:
> n=100;
> ua=0;
> ub=exp(2)*sin(3);
> f=@(x)exp(2.*x).*(5.*sin(3.*x)-12.*cos(3.*x));
> h=1/(n+1);
>
>
> %t=0:h:1;
> %t(:,1)=0:h:1;
> t=0:h:1;
> ti=t(2:n);
>
>
>
> haupt=-2*ones(1,n-1);
> neben=ones(1,n-2);
Hier muss es dann lauten:
haupt=-2*ones(1,n);
neben=ones(1,n-1);
> A=diag(haupt)+diag(neben,-1)+diag(neben,1);
>
>
>
>
> for i=1 : +1: n-1
> [mm]rs(i,1)=-2*(h^2)*f(ti(i));[/mm]
Woher kommt hier die "2"?
> end
Und dann lautet das so:
[mm] rs(1,1)=-(h^2)*f(ti(1))-ua;
[/mm]
[mm] rs(n,1)=-(h^2)*f(ti(n))-ub;
[/mm]
for i=2 : +1: n-1
[mm] rs(i,1)=-(h^2)*f(ti(i));
[/mm]
>
> [mm]u=A\rs;[/mm]
>
Hier meinst Du wohl
u=A\rs;
> hold on
> plot(ti, u, 'b')
> plot(ti, exakt(ti), 'r')
> hold off;
Gruss
MathePower
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 17:15 Mo 23.07.2012 | Autor: | Jack159 |
Hallo MathePower,
Vielen Dank für deine Korrektur!
> > for i=1 : +1: n-1
> > [mm]rs(i,1)=-2*(h^2)*f(ti(i));[/mm]
>
>
> Woher kommt hier die "2"?
Sorry, da habe ich mich vertan, die "2" gehört da nicht hin.
>
> > end
>
>
> Und dann lautet das so:
>
> [mm]rs(1,1)=-(h^2)*f(ti(1))-ua;[/mm]
> [mm]rs(n,1)=-(h^2)*f(ti(n))-ub;[/mm]
>
> for i=2 : +1: n-1
> [mm]rs(i,1)=-(h^2)*f(ti(i));[/mm]
>
>
> >
> > [mm]u=A\rs;[/mm]
> >
>
>
> Hier meinst Du wohl
>
> u=A\rs;
Genau, die falsche Darstellung lag hier an dem Formelsystem bzw. meiner ungeschickten Eingabe hier.
Zur Übersicht nochmal die verbesserte Version:
n=1000;
ua=0;
ub=exp(2)*sin(3);
f=@(x)exp(2.*x).*(5.*sin(3.*x)-12.*cos(3.*x));
h=1/(n+1);
%t=0:h:1;
%t(:,1)=0:h:1;
t=0:h:1;
ti=t(1:n);
e=-2*ones(1,n);
em1=ones(1,n-1);
A=diag(e)+diag(em1,-1)+diag(em1,1);
[mm] rs(1,1)=-(h^2)*f(t(1))-ua;
[/mm]
[mm] rs(n,1)=-(h^2)*f(t(n))-ub;
[/mm]
for i=2 : +1: n-1
[mm] rs(i,1)=-(h^2)*f(ti(i));
[/mm]
end
u = A \ rs;
hold on
plot(ti, u, 'b')
plot(ti, exakt(ti), 'r')
hold off;
|
|
|
|