> Differentialgleichung: diff (y(x),x$2)+y+x=0;                         
>                         Randbedingungen:        y(0)=0;
> diff(y(x),x)(1)=0;

                        / 2      \
                        |d       |
                        |--- y(x)| + y + x = 0
                        |  2     |
                        \dx      /


                               y(0) = 0


                           /d      \
                           |-- y(x)|(1) = 0
                           \dx     /

# a) Näherungslösung mit einem eingliedrigen GALERKIN-Ansatz
> y[1]:=c[1]*x*(1-x/2);

                       y[1] := c[1] x (1 - x/2)

# Damit ergibt sich das Residuum aus der Differentialgleichung zu:
> R[1]:=diff(y[1],x$2)+y[1]+x;

                 R[1] := -c[1] + c[1] x (1 - x/2) + x

# Als Wichtungsfunktion (Testfunktion / trial function) wird
> w:=x*(1-x/2);

                           w := x (1 - x/2)

# in die "GALERKIN-Forderung" gemäß (7.111) eingesetzt:
> Int(w*R[1],x=0..1)=int(w*R[1],x=0..1);

     1
    /
   |
   |   x (1 - x/2) (-c[1] + c[1] x (1 - x/2) + x) dx =
   |
  /
    0

        -1/5 c[1] + 5/24

# Dieses Integral muß nach (7.111) verschwinden, so daß sich die
# Konstante zu
> c[1]:=solve(5/24-c[1]/5=0);

                                      25
                              c[1] := --
                                      24

# ergibt. Damit lautet der eingliedrige Ansatz folgendermaßen:
> y[1]:=subs(c[1]=%,y[1]);

                                25 x (1 - x/2)
                        y[1] := --------------
                                      24

# Im Vergleich dazu ist die exakte Lösung durch
> y[ex]:=sin(x)/cos(1)-x;

                                  sin(x)
                         y[ex] := ------ - x
                                  cos(1)

# gegeben.
# b) Näherung mit einem zweigliedrigen GALERKIN-Ansatz:
> y[2]:=C[1]*x*(1-x^2/3)+C[2]*x^2*(1-2*x/3);

                           /      2 \
                           |     x  |         2 /    2 x\
            y[2] := C[1] x |1 - ----| + C[2] x  |1 - ---|
                           \     3  /           \     3 /

# Zur Bestimmung der beiden Konstanten werden zwei Wichtungsfunktionen
# benötigt:
> w[1]:=x*(1-x^2/3);  w[2]:=x^2*(1-2*x/3);

                                   /      2 \
                                   |     x  |
                         w[1] := x |1 - ----|
                                   \     3  /


                                  2 /    2 x\
                         w[2] := x  |1 - ---|
                                    \     3 /

# Das Residuum folgt mit dem Näherungsansatz aus der
# Differentialgleichung:
> R[2]:=diff(y[2],x$2)+y[2]+x;

                             /    2 x\
  R[2] := -2 C[1] x + 2 C[2] |1 - ---| - 8/3 C[2] x
                             \     3 /

                  /      2 \
                  |     x  |         2 /    2 x\
         + C[1] x |1 - ----| + C[2] x  |1 - ---| + x
                  \     3  /           \     3 /

# Mit den beiden Wichtungsfunktionen erhält man aus der Forderung
# (7.111) zwei lineare Gleichungen zur Bestimmung der beiden Konstanten:
> Int(w[1]*R[2],x=0..1)=int(w[1]*R[2],x=0..1);

     1
    /    /      2 \ /
   |     |     x  | |                   /    2 x\
   |   x |1 - ----| |-2 C[1] x + 2 C[2] |1 - ---| - 8/3 C[2] x
   |     \     3  / \                   \     3 /
  /
    0

                  /      2 \                        \
                  |     x  |         2 /    2 x\    |
         + C[1] x |1 - ----| + C[2] x  |1 - ---| + x| dx =
                  \     3  /           \     3 /    /

         20        59
        --- C[1] - --- C[2] + 4/15
         63        420

> Int(w[2]*R[2],x=0..1)=int(w[2]*R[2],x=0..1);

     1
    /               /
   |    2 /    2 x\ |                   /    2 x\
   |   x  |1 - ---| |-2 C[1] x + 2 C[2] |1 - ---| - 8/3 C[2] x
   |      \     3 / \                   \     3 /
  /
    0

                  /      2 \                        \
                  |     x  |         2 /    2 x\    |
         + C[1] x |1 - ----| + C[2] x  |1 - ---| + x| dx =
                  \     3  /           \     3 /    /

         59         29
        ---- C[1] - --- C[2] + 7/60
         420        315

# Die Integrale müssen verschwinden, so daß man das folgende
# Gleichungssystem erhält:
> with(linalg):
Warning, the protected names norm and trace have been redefined and
unprotected

> A*C=a;

                               A C = a

# Darin ist {C} der gesuchte Lösungsvektor. Die Matrix [A] und {a} sind
# obigen Integralen zu entnehmen:
> A:= matrix(2,2,[[20/63, 59/420],[59/420,29/315]]);

                               [20     59 ]
                               [--     ---]
                               [63     420]
                          A := [          ]
                               [59     29 ]
                               [---    ---]
                               [420    315]

> a:=vector([4/15, 7/60]);

                          a := [4/15, 7/60]

> C:=linsolve(A,a);

                               [1851  -96 ]
                          C := [----, ----]
                               [2153  2153]

# Damit lautet der zweigliedrige GALERKIN-Ansatz:
> y[2]:=subs({C[1]=1851/2153, C[2]=-96/2153}, y[2]);

                            /      2 \
                            |     x  |       2 /    2 x\
                     1851 x |1 - ----|   96 x  |1 - ---|
                            \     3  /         \     3 /
             y[2] := ----------------- - ---------------
                           2153               2153

# Im folgenden Bild sind die Ergebnisse mit Hilfe der MAPLE-Grafik
# dargestellt:
> plot({y[ex],y[1],y[2]},x=0..1);

# Man erkennt, daß der eingliedrige Ansatz geringfügig von der exakten
# Lösung abweicht. Der zweigliedrige Ansatz unterscheidet sich von der
# exakten Lösung nur im Rahmen der Strichstärke!
# c) Ermittlung der optimalen Kollokationspunkte
# Man geht wie in Ü 7.2.6 vor, d.h., man setzt die nach dem
# GALERKIN-Verfahren
# gewonnenen Näherungen in die Ausgangsdifferentialgleichung ein und
# fordert, daß das Residuum verschwindet:
# 
# E i n g l i e d r i g e r  A n s a t z:
> y[1]:=25*x*(1-x/2)/24;

                                25 x (1 - x/2)
                        y[1] := --------------
                                      24

> fsolve(diff(y[1],x$2)+y[1]+x=0);

                      0.6029443637, 3.317055636

# Man erhält eine quadratische Gleichung. Von den beiden Lösungen liegt
# nur eine im 
# betrachteten bereich von 0<x<1. Dieser Wert gibt die "optimale" Lage
# des
# Kollokationspunktes an.
# 
# Z w e i g l i e d r i g e r  A n s a t z:
> y[2]:=1851*x*(1-x^2/3)/2153 - 96*x^2*(1-2*x/3)/2153;

                            /      2 \
                            |     x  |       2 /    2 x\
                     1851 x |1 - ----|   96 x  |1 - ---|
                            \     3  /         \     3 /
             y[2] := ----------------- - ---------------
                           2153               2153

> fsolve(diff(y[2],x$2)+y[2]+x=0);

               -1.316351091, 0.3209493952, 0.8218031429

# Man erhält eine kubische Gleichung. Von den drei Lösungen liegen nur
# zwei im betrachteten Bereich von 0<x<1. Diese Werte geben die
# "optimale" Lage der Kollokationspunkte an. 
# 
# E r g ä n z u n g: Man kann auch eine größere Anzahl von
# Kollokationspunkten wählen als erforderlich. Wie in Ü7.2.6 sollen im
# folgenden für den zweigliedrigen Ansatz die drei Kollokationspunkte
# X=1/4, X=1/2 und X=3/4 willkürlich gewählt werden. Diese setzt man in
# den Ansatz
> Y:=C[1]*X*(1-X^2/3)+C[2]*X^2*(1-2*X/3);

                           /      2 \
                           |     X  |       2 /    2 X\
                    1851 X |1 - ----|   96 X  |1 - ---|
                           \     3  /         \     3 /
               Y := ----------------- - ---------------
                          2153               2153

# ein und erhält aus der Forderung (7.126) drei Gleichungen zur
# Bestimmung der beiden Freiwerte:

> eqn[1]:=subs(X=1/4, diff(Y,X$2)+Y+X=0);

                                   -2249
                         eqn[1] := ------ = 0
                                   137792

> eqn[2]:=subs(X=1/2, diff(Y,X$2)+Y+X=0);

                                    463
                         eqn[2] := ----- = 0
                                   17224

> eqn[3]:=subs(X=3/4, diff(Y,X$2)+Y+X=0);

                                    2253
                         eqn[3] := ------ = 0
                                   137792

# Diese Gleichungen kann man in der Matrixform [A]*{C}={a} schreiben,
# wenn man
# folgende Matrizen einführt:
> with (linalg): 
> A:=matrix(3,2,[[49,-192*101/96],[192*13/24,-192/6],[192*57/64,192*23/3
> 2]]);

                               [ 49    -202]
                               [           ]
                          A := [104     -32]
                               [           ]
                               [171     138]

> a:=matrix(3,1,[[192/4],[192/2],[3*192/4]]);

                                   [ 48]
                                   [   ]
                              a := [ 96]
                                   [   ]
                                   [144]

# Multipliziert man die Matrixgleichung [A]*{C}={a} von links mit der
# Transponierten von
# [A], so erhält man eine neue Gleichung [B]*{C}={b} mit folgenden
# Matrizen:
> B:=multiply(transpose(A),A);

                             [42458    10372]
                        B := [              ]
                             [10372    60872]

> b:=multiply(transpose(A),a);

                                  [36960]
                             b := [     ]
                                  [ 7104]

# Damit kann der Lösungsvektor mit den beiden Konstanten bestimmt
# werden:
> C:=linsolve(B,b);

                                 [3778032]
                                 [-------]
                                 [4300217]
                            C := [       ]
                                 [-141888]
                                 [-------]
                                 [4300217]


> C:=matrix(2,1,[[evalf(C[1,1])],[evalf(C[2,1])]]);

                             [ 0.8785677560 ]
                        C := [              ]
                             [-0.03299554418]

# Der Näherungsansatz ergibt sich damit zu:
> Y:=(3778032/4300217)*x*(1-x^2/3)+(-141888/4300217)*x^2*(1-2*x/3);

                          /      2 \
                          |     x  |           2 /    2 x\
                3778032 x |1 - ----|   141888 x  |1 - ---|
                          \     3  /             \     3 /
           Y := -------------------- - -------------------
                      4300217                4300217

# Die exakte Lösung lautet:
> y[ex]:=sin(x)/cos(1)-x;

                                  sin(x)
                         y[ex] := ------ - x
                                  cos(1)

# Im folgenden Bild sind diese beiden Lösungen grafisch dargestellt:
> plot({Y, y[ex]}, x=0..1);

# Die Näherung weicht nur geringfügig von der exakten Lösung ab!
# Ermittlung der L-zwei-Fehlernormen für die einzelnen
# Näherungsfunktionen
> L_2:=sqrt(Int(F(xi)^2,xi=0..1));

                            /   1           \1/2
                            |  /            |
                            | |        2    |
                     L_2 := | |   F(xi)  dxi|
                            | |             |
                            |/              |
                            \  0            /

# Darin ist F die Differenz aus der Näherungsfunktion und der exakten
# Lösung d.h. der Wahre Fehler.
# a) e i n g l i e d r i g e r  G A L E R K I N - A n s a t z
> F[1]:=25*x*(1-x/2)/24-(sin(x)/cos(1)-x);

                         25 x (1 - x/2)   sin(x)
                 F[1] := -------------- - ------ + x
                               24         cos(1)

> L_2[1]:=evalf(sqrt(int(F[1]^2, x=0..1)));

                       L_2[1] := 0.02027456608

# b) z w e i g l i e d r i g e r  G A L E R K I N - A n s a t z
> F[2]:=(1851/2153)*x*(1-x^2/3)-(96/2153)*x^2*(1-2*x/3)-(sin(x)/cos(1)-x
> );

                      /      2 \
                      |     x  |       2 /    2 x\
               1851 x |1 - ----|   96 x  |1 - ---|
                      \     3  /         \     3 /   sin(x)
       F[2] := ----------------- - --------------- - ------ + x
                     2153               2153         cos(1)

> L_2[2]:=evalf(sqrt(int(F[2]^2, x=0..1)));

                      L_2[2] := 0.0005151498415

# Der eingliedrige RITZ-Ansatz liefert bereits eine brauchbare Lösung.
# c)"überbestimmte" Kollokation
> F[3]:=Y-y[ex];

                     /      2 \
                     |     x  |           2 /    2 x\
           3778032 x |1 - ----|   141888 x  |1 - ---|
                     \     3  /             \     3 /   sin(x)
   F[3] := -------------------- - ------------------- - ------ + x
                 4300217                4300217         cos(1)

> l_2[3]:=evalf(sqrt(int(F[3]^2, x=0..1)));

                       l_2[3] := 0.01103040018

> 
> 
