Độ chính xác trên FindRoot

Sep 10 2020

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

1 DanielHuber Sep 11 2020 at 01:23

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: