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