Độ chính xác trên FindRoot
Tôi đang cố gắng giải một hệ phương trình phi tuyến tính và khi tôi giải nó, tôi có thông báo sau
FindRoot::lstol: Tìm kiếm dòng đã giảm kích thước bước xuống trong dung sai được chỉ định bởi AccuracyGoalvà PrecisionGoalnhưng không thể tìm thấy mức giảm đủ trong hàm đáng giá. Bạn có thể cần nhiều hơn các chữ số MachinePre precision về độ chính xác làm việc để đáp ứng các dung sai này.
Vì thiếu độ chính xác, tôi không chắc chắn về kết quả của mình và việc thay đổi số lần lặp lại và độ chính xác không thay đổi gì.
Đây là mã của tôi:
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
Bạn có ý tưởng về cách tôi có thể có được độ chính xác tốt hơn không?
Cảm ơn bạn rất nhiều
Trả lời
Tôi đang sử dụng MMA 12.1. Nếu tôi chạy mã của bạn, tôi không nhận được bất kỳ thông báo lỗi nào. Kết quả là tôi nhận được âm mưu sau: