# 
#  modifiziertes NEWTON- RAPHSON Verfahren (8.67)
# 
> with(linalg):
Warning, the protected names norm and trace have been redefined and
unprotected

> m:=3: g:=vector(m): G:=vector(m): u_alt:=vector(m): u_new:=vector(m):
> u:=vector(m):vars:=seq(u[i],i=1..m): U:=vector(m):
> uStart:=seq(U[i],i=1..m):
# Federsteifigkeiten gem (8.46a,b,c):
> 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])

# Fixpunktdarstellung der Kraft-Verschiebungs-Gleichungen (8.53a,b,c):
> g[1]:=u[1]-(R[1]+R[2]+R[3])/k[10]; g[2]:=u[2]-u[1]-(R[2]+R[3])/k[21];
> g[3]:=u[3]-u[2]-R[3]/k[32];

                                 R[1] + R[2] + R[3]
                g[1] := u[1] - -----------------------
                                                     p
                               k[a] + alpha k[a] u[1]


                                        R[2] + R[3]
        g[2] := u[2] - u[1] - -------------------------------
                                                            q
                              k[b] + beta k[b] (u[2] - u[1])


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

# Federzahlen (8.49):
> k[a]:=20: k[b]:= 10: k[c]:=20: 
> 
# uere Belastungen (8.49):
> R[1]:= 10: R[2]:=20: R[3]:=15:
# Kraft-Verschiebungs-Gleichungen ohne nichtlinearen Anteil [
# Startgleichungen (8.68a,b,c) mit den Parametern (8.49 / 8.50)]:
> alpha:=0.0:beta:=0.0: theta:=0.0: p:=0.0: q:=0.0: r:=0.0:
> G[1]:=U[1]-(R[1]+R[2]+R[3])/k[10]; G[2]:=U[2]-U[1]-(R[2]+R[3])/k[21];
> G[3]:=U[3]-U[2]-R[3]/k[32];

                      G[1] := U[1] - 2.250000000


                  G[2] := U[2] - U[1] - 3.500000000


                  G[3] := U[3] - U[2] - 0.7500000000

# Die JACOBIsche Matrix (8.69) fr die Startgleichungen (8.68a,b,c):
> J:=jacobian(G,[uStart]);

                              [ 1     0    0]
                              [             ]
                         J := [-1     1    0]
                              [             ]
                              [ 0    -1    1]

> J_inv:=inverse(J);

                                 [1    0    0]
                                 [           ]
                        J_inv := [1    1    0]
                                 [           ]
                                 [1    1    1]

# Die Parameter fr die nichtlinearen Anteile der
# Kraft-Verschiebungs-Gleichungen vorbesetzten:
> alpha:=0.5:beta:=0.7: theta:=0.2: p:=0.3: q:=0.3: r:=0.2:
# Fixpunktgleichungen  mit den Parametern aktualisieren:
> g[1]:=u[1]-(R[1]+R[2]+R[3])/k[10]: g[2]:=u[2]-u[1]-(R[2]+R[3])/k[21]:
> g[3]:=u[3]-u[2]-R[3]/k[32]:
# Die Startwerte fr u:
> u_alt:=vector(m, [9/4, 23/4, 13/2]);v_norm:=1;

                      u_alt := [9/4, 23/4, 13/2]


                             v_norm := 1

> epsilon:=1e-6:
> Iteration nach dem modifizierten NEWTON-RAPHSON Verfahren (8.67):
> for Ianz from 1  while v_norm > epsilon  do; 
> e_g:=z ->  evalf(subs(u[1]=u_alt[1],u[2]=u_alt[2],u[3]=u_alt[3],z)); 
> g_v:=map(e_g,g);
> u_new:=evalm(u_alt-J_inv&*g_v);
> v_norm:=sqrt((u_new[1]-u_alt[1])^2. + (u_new[2]-u_alt[2])^2.
> +(u_new[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_new[1],u_new[2],u_new[3],v_norm*100.); 
> u_alt[1]:=u_new[1];u_alt[2]:=u_new[2];u_alt[3]:=u_new[3]; 
> 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.05871798%
   3  |  1.443096  | 3.334028  |  3.968227  |  5.00239149%
   4  |  1.444011  | 3.338541  |  3.972742  |   .64493853%
   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%
# Zur Kontrolle werden die Ergebnisse in die Ausgangsgleichungen (8.47b)
# einge-setzt:
> g[1]:=subs(u[1]=u_alt[1],u[2]=u_alt[2],u[3]=u_alt[3],g[1]);
> g[2]:=subs(u[1]=u_alt[1],u[2]=u_alt[2],u[3]=u_alt[3],g[2]);
> g[3]:=subs(u[1]=u_alt[1],u[2]=u_alt[2],u[3]=u_alt[3],g[3]);

                                         -8
                          g[1] := -0.2 10


                                          -7
                          g[2] := -0.24 10


                                         -9
                          g[3] := -0.2 10

# Steifigkeiten nach der letzten Iteration:
> k[10]:=k[a]+alpha*k[a]*u_alt[1]^p; 
> k[21]:=k[b]+beta*k[b]*(u_alt[2]-u_alt[1])^q;
> k[32]:=k[c]+theta*k[c]*(u_alt[3]-u_alt[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.3805871812;
# 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);  

                          N := 0.3805871812


                          L := 0.2328926468

> 
> 
