Präzision bei FindRoot

Sep 10 2020

Ich versuche, ein nichtlineares Gleichungssystem zu lösen, und wenn ich es löse, habe ich die folgende Meldung

FindRoot::lstol: Die Linie Suche verringerte die Schrittgröße innerhalb der Toleranz spezifiziert durch AccuracyGoalund PrecisionGoalkonnte aber keine ausreichende Verringerung der Gütefunktion finden. Möglicherweise benötigen Sie mehr als MachinePrecision-Ziffern für die Arbeitsgenauigkeit, um diese Toleranzen einzuhalten.

Aufgrund der mangelnden Präzision bin ich mir meines Ergebnisses nicht sicher und das Ändern der Iterationen und der Genauigkeit ändert nichts.

Hier ist mein Code:

E1 = 0.53*10^9;
k1 = 0.269*10^(-6);
K1 = 0.5;
α1 = 30*10^(-6);
ν1 = 0.25;
μ1 = E1/(2 (1 + ν1));

E2 = 125*10^9;
k2 = 12.98*10^(-6);
K2 = 54;
α2 = 12*10^(-6);
ν2 = 0.5;
μ2 = E2/(2 (1 + ν2));
k = k1/k2;
K = K1/K2;
α = α1 (1 + ν1)/(α2 (1 + ν2));
f = 0.4;

ξ1[c1_] := Sqrt[0.5 (1 + Sqrt[1 + (c1/k)^2])];
ξ2[c2_] := Sqrt[0.5 (1 + Sqrt[1 + (c2)^2])];
η1[c1_] := -Sqrt[0.5 (-1 + Sqrt[1 + (c1/k)^2])];
η2[c2_] := Sqrt[0.5 (-1 + Sqrt[1 + c2^2])];
H1asym[A_] := 
  2 *μ1* μ2* 
   k2* α2* (1 + ν2)/ (K2 (μ2 (1 - ν1) (-A Csch[
              A]^2 + Coth[A]) + μ1 (1 - ν2) Coth[A]^2));
H2asym[A_] := 
  4*μ1 *μ2 *
   k2 *α2 *(1 + ν2)/(K2 (μ2 (1 - 
           2 ν1) (-A Csch[A]^2 + Coth[A]) - μ1 (1 - 
           2 ν2) Coth[A] - μ1 A Csch[A]^2));
Hasym[A_] := H1asym[A] / H2asym[A]; 

M1 [ c2_, 
   A_] := (ξ2 [c2] Sinh[2 A ξ2[c2]] + η2[c2] Sin[
       2 A η2[c2]])/(Cosh[2 A ξ2[c2]] - Cos[2 A η2[c2]]);
M2[c2_, A_] := (η2[c2] Sinh[2 A ξ2[c2]] - ξ2[c2] Sin[
       2 A η2[c2]])/(Cosh[2 A ξ2[c2]] - Cos[2 A η2[c2]]);
M3[c1_, A_] := α (- A Csch[A]^2 + Coth[A])/ ξ1[c1];
M4[c2_, A_] := (Coth[
      A]/(ξ2[c2] η2[c2])) (η2[c2] Sinh[
        2 A ξ2[c2]] - ξ2[c2] Sin[2 A η2[c2]])/(Cosh[
       2 A ξ2[c2]] - Cos[2 A η2[c2]]);
N1[c2_, A_] := ( -ξ2[c2] Sin[2 A η2[c2]] + η2[c2] Sinh[
       2 A ξ2[c2]])/ (Cosh[2 A ξ2[c2]] - Cos[2 A η2[c2]]);
N2[c2_, A_] := (ξ2[c2] Sinh[2 A ξ2[c2]] + η2[c2] Sin[
       2 A η2[c2]])/(Cosh[2 A ξ2[c2]] - Cos[2 A η2[c2]]);
N3[c1_, A_] := ( α η1[
       c1] / (ξ1[c1] (ξ1[c1] + 1))) (-A Csch[A]^2 + Coth[A]);
N4[c2_, A_] := (Coth[
     A]/ (ξ2[c2] η2[
       c2])) ((ξ2[c2] Sinh[2 A ξ2[c2]] + η2[c2] Sin[
        2 A η2[c2]] - 
      Coth[A] (Cosh[2 A ξ2[c2]] - Cos[2 A η2[c2]]))/(Cosh[
       2 A ξ2[c2]] - Cos[2 A η2[c2]]))

V[c1_, c2_] := c1 - c2;
equation76 [c1_, c2_, A_] := 
  K ξ1[c1] + M1[c2, A] + 
    f Hasym[A] (K η1[c2] + M2[c2, A] ) -  
    f H1asym[A]/2 (M3[c1, A] + M4[c2, A])*(V[c1, c2]) == 0;

equation77[c1_, c2_, A_] := 
  K η1[c2] + N1[c2, A] - f Hasym[A] (K ξ1[c1] + N2[c2, A]) + 
    f H1asym[A]/2 (N3[c1, A] + N4[c2, A]) * (V[c1, c2]) == 0;

solasym[A_] := 
 FindRoot[{equation76[c1, c2, A], 
   equation77[c1, c2, A]}, {{c1, 10000}, {c2, 2}}, 
  MaxIterations -> 10000] 
Table[FindRoot[{equation76[c1, c2, A], 
   equation77[c1, c2, A]}, {{c1, 10000}, {c2, 2}}, 
  MaxIterations -> 10000] , {A, 0.1, 6 , .1}]
 

ListLinePlot[Table[{A, A*V[c1, c2] /. solasym[A]}, {A, 0.1, 6, .01}], 
  ScalingFunctions -> "Log"] // Quiet

Haben Sie eine Idee, wie ich eine bessere Präzision erzielen kann?

Vielen Dank

Antworten

1 DanielHuber Sep 11 2020 at 01:23

Ich benutze MMA 12.1. Wenn ich Ihren Code ausführe, erhalte ich keine Fehlermeldungen. Als Ergebnis erhalte ich folgende Handlung: