Precisione su FindRoot
Sto cercando di risolvere un sistema di equazioni non lineare e, quando lo risolvo, ricevo il seguente messaggio
FindRoot::lstol: La ricerca per riga ha ridotto la dimensione del passo entro la tolleranza specificata da AccuracyGoale PrecisionGoalma non è stata possibile trovare una diminuzione sufficiente nella funzione di merito. Potrebbe essere necessario più di cifre di precisione di lavorazione MachinePrecision per soddisfare queste tolleranze.
A causa della mancanza di precisione, non sono sicuro del mio risultato e la modifica delle iterazioni e dell'accuratezza non cambia nulla.
Ecco il mio codice:
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
Hai un'idea di come posso ottenere una migliore precisione?
Grazie mille
Risposte
Sto usando MMA 12.1. Se eseguo il codice, non ricevo alcun messaggio di errore. Di conseguenza ottengo la seguente trama: