#  Direkte Iteration bzw. Fixpunktiteration (8.54 a,b,c)
> with(linalg):
Warning, the protected names norm and trace have been redefined and
unprotected

> u:=vector(3):  u_alt:=vector(3):  R:=vector(3):  g:=vector(3):
# 
# Die reduzierte Steifigkeitsmatrix in (8.47a) lautet:
> K:=matrix([[k[10]+k[21], -k[21],0], [-k[21], k[21]+k[32], -k[32]],[0,
> -k[32], k[32]]]);

                [k[10] + k[21]       -k[21]          0   ]
                [                                        ]
           K := [   -k[21]        k[21] + k[32]    -k[32]]
                [                                        ]
                [      0             -k[32]        k[32] ]

# Nichtlineares Gleichungssystem (8.47b):
> g:=evalm( K &* u ):
> g[1]:=g[1]-R[1]; g[2]:=g[2]-R[2]; g[3]:=g[3]-R[3];

           g[1] := (k[10] + k[21]) u[1] - k[21] u[2] - R[1]


    g[2] := -k[21] u[1] + (k[21] + k[32]) u[2] - k[32] u[3] - R[2]


               g[3] := -k[32] u[2] + k[32] u[3] - R[3]

# Die Federsteifigkeiten setzen sich additiv aus einem linearen und
# nichtlinearen Anteil gem (8.46 a,b,c) zusammen:
> k[10]:=k[a]+alpha*k[a]*u[1]^p; k[21]:=k[b]+beta*k[b](u[2]-u[1])^q;
> k[32]:=k[c]+theta*k[c]*(u[3]-u[2])^r;

                                                  p
                   k[10] := k[a] + alpha k[a] u[1]


                                                     q
               k[21] := k[b] + beta k[b](u[2] - u[1])


                                                      r
              k[32] := k[c] + theta k[c] (u[3] - u[2])

# Fr die numerische Auswertung werden folgende Parameter gewhlt.
# Federsteifigkeiten  (8.49a):
> k[a]:=20: k[b]:= 10: k[c]:=20: alpha:=0.5:
> beta:=0.7: theta:=0.2: p:=0.3: q:=0.3: r:=0.2:
# ussere Belastungen ( 8.49b):
> R[1]:= 10: R[2]:=20: R[3]:=15:
# Die Startwerte fr u[i] erhlt man aus dem linearen Gleichungssystem
# (8.48) mit den obigen Parametern zu:
> u[1]:=2.25: u[2]:=5.75:  u[3]:=6.5:  u_alt[1]=u[1]: u_alt[2]=u[2]:
> u_alt[3]=u[3]:
# Vorbesetzung der Variablen v_norm ( Vektornorm (8.55) als
# Abruchkriterium) 
> v_norm:=1 :
> epsilon:=1e-6:
# 
# Beginn der Iterationsschleife zur Berechnung der aktuellen
# Steifigkeiten und Verschiebungen:  
> for Ianz from 1  while v_norm > epsilon   do; 
> u_alt[1]:=u[1]: u_alt[2]:=u[2]: u_alt[3]:=u[3]:
#      Berechnung der aktuellen Steifigkeiten:
> k[10]:=k[a]+alpha*k[a]*u[1]^p: 
> k[21]:=k[b]+beta*k[b]*(u[2]-u[1])^q:
> k[32]:=k[c]+theta*k[c]*(u[3]-u[2])^r:
#      Ermittlung der aktuellen Verschiebungen mit Hilfe der
# Fixpunktiteration:
> u[1]:=(R[1]+R[2]+R[3])/k[10]:
> u[2]:=u[1]+(R[2]+R[3])/k[21]:
> u[3]:=u[2]+R[3]/k[32]:       
#      Berechnung der aktuellen Vektor-Fehlernorm (8.55):
> v_norm:=sqrt((u[1]-u_alt[1])^2. + (u[2]-u_alt[2])^2.
> +(u[3]-u_alt[3])^2.); 
#      Ausgabe der Verschiebungen nach jedem Iterationsschritt:
> if (Ianz=1) then printf(` Ianz |    u[1]    |    u[2]   |    u[3]    |
>     Fehler \n`) fi;
> printf(`   %d  |  %f  | %f  |  %f  |  %10.8f%%\n`, Ianz,
> u[1],u[2],u[3],v_norm*100.);
od:
 Ianz |    u[1]    |    u[2]   |    u[3]    |     Fehler 
   1  |  1.373868  | 3.107109  |  3.737988  |  392.18867830%
   2  |  1.451624  | 3.368830  |  4.003134  |  38.05871813%
   3  |  1.443096  | 3.334028  |  3.968227  |  5.00239180%
   4  |  1.444011  | 3.338541  |  3.972742  |   .64493868%
   5  |  1.443913  | 3.337947  |  3.972148  |   .08457711%
   6  |  1.443923  | 3.338026  |  3.972227  |   .01119180%
   7  |  1.443922  | 3.338015  |  3.972217  |   .00149293%
   8  |  1.443922  | 3.338017  |  3.972218  |   .00020034%
   9  |  1.443922  | 3.338016  |  3.972218  |   .00002690%
# berprfung der Ergebnisse durch Einsetzen in die Ausgangsgleichungen
# (8.47b):
> g[1]:=subs(u[1]=u[1],u[2]=u[2],u[3]=u[3],g[1]);
> g[2]:=subs(u[1]=u[1],u[2]=u[2],u[3]=u[3],g[2]); 
> g[3]:=subs(u[1]=u[1],u[2]=u[2],u[3]=u[3],g[3]);

                                         -7
                          g[1] := -0.1 10


                                         -7
                           g[2] := 0.7 10


                              g[3] := 0.

# Steifigkeiten nach der letzten Iteration:
> k[10]:=k[a]+alpha*k[a]*u[1]^p; 
> k[21]:=k[b]+beta*k[b]*(u[2]-u[1])^q;
> k[32]:=k[c]+theta*k[c]*(u[3]-u[2])^r;

                         k[10] := 31.16511345


                         k[21] := 18.47848992


                         k[32] := 23.65178711

> 
# Darin sind jeweils die linearen Anteile von ka = 20, kb = 10 und kc =
# 20 enthalten. Die nichtlinearen Anteile sind demnach durch 11.165 in
# der ersten, 8.479 in der zweiten und 3.652 in der dritten Feder (Bild
# 8.3) gegeben.
# Ermittlung der Lippschitz-Konstante L
# Die Vektornorm (8.55) von {u}0 -> {u}1 (nach dem  zweiten
# Iterationsschritt)  betrug: 
> N:=0.3805871821;

                          N := 0.3805871821

# Aus (8.36) mit epsilon = 1e-6 und i = 9 ergibt sich die
# Lippschitzkonstante zu: 
> eqn:=ln((1-L)*epsilon/N)=9*ln(L): L:=fsolve(eqn,L,0..1);

                          L := 0.2328926467

