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;
 
 
 
 
      | 
     
    
   | 
  
 
 |   
  
   |