Precisión en FindRoot

Sep 10 2020

Estoy tratando de resolver un sistema de ecuación no lineal, y cuando lo resuelvo, aparece el siguiente mensaje

FindRoot::lstol: La búsqueda de línea disminuyó el tamaño del paso dentro de la tolerancia especificada por AccuracyGoaly, PrecisionGoalpero no pudo encontrar una disminución suficiente en la función de mérito. Es posible que necesite más dígitos de precisión de trabajo que MachinePrecision para cumplir con estas tolerancias.

Debido a la falta de precisión, no estoy seguro de mi resultado y cambiar las iteraciones y la precisión no cambia nada.

Aquí está mi código:

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

¿Tiene una idea de cómo puedo conseguir una mayor precisión?

Muchas gracias

Respuestas

1 DanielHuber Sep 11 2020 at 01:23

Estoy usando MMA 12.1. Si ejecuto su código, no recibo ningún mensaje de error. Como resultado, obtengo la siguiente trama: