# Precision on FindRoot

I am trying to solve a non linear system of equation, and when I solve it, I have the following message

FindRoot::lstol: The line search decreased the step size to within tolerance specified by AccuracyGoal and PrecisionGoal but was unable to find a sufficient decrease in the merit function. You may need more than MachinePrecision digits of working precision to meet these tolerances.

Because of the lack of precision, I'm not sure of my result and changing the iterations and accuracy changes nothing.

Here is my 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



Have you an idea how I can get better precision?

Thank you a lot

• Rationalize both equations and apply higher WorkingPrecision to FindRoot. Commented Sep 10, 2020 at 14:04

• (1) There are error messages printed by the Table that precedes the ListLinePlot. (2) Isn't the reason you don't get errors using the OP's plotting code because the code suppresses the messages with Quiet? (I'm using V12.1.1.) Commented Sep 10, 2020 at 18:52