Termination tolerance in fsolve
조회 수: 9 (최근 30일)
이전 댓글 표시
Hello!
I am a student in engineering, and I'm using fsolve to solve a system of three non-linear equations in three unknowns. I'm using a non-default value of 1e-20 for the function tolerance (TolFun for optimset options). This is the output of the code:
%---------------------------------------------------------------------------------------------------------
Norm of First-order Trust-region
Iteration Func-count f(x) step optimality radius
0 4 5.15835e-11 5.66e-05 1
1 8 3.52966e-11 1.13575e-05 8.44e-06 1
2 12 1.54608e-13 3.25853e-06 6.07e-07 1
3 13 1.54608e-13 1.07169e-05 6.07e-07 1
4 14 1.54608e-13 2.67923e-06 6.07e-07 2.68e-06
5 15 1.54608e-13 6.69807e-07 6.07e-07 6.7e-07
6 19 4.96366e-14 1.67452e-07 3.23e-07 1.67e-07
7 20 4.96366e-14 1.67452e-07 3.23e-07 1.67e-07
8 24 1.06467e-14 4.18629e-08 9.78e-08 4.19e-08
9 25 1.06467e-14 1.04657e-07 9.78e-08 1.05e-07
10 29 7.30661e-15 2.61643e-08 4.46e-08 2.62e-08
11 33 6.5418e-15 2.61643e-08 3.66e-09 2.62e-08
12 34 6.5418e-15 6.54108e-08 3.66e-09 6.54e-08
13 38 6.51553e-15 1.63527e-08 2.09e-08 1.64e-08
14 39 6.51553e-15 1.63527e-08 2.09e-08 1.64e-08
15 43 6.37946e-15 4.08818e-09 5.59e-09 4.09e-09
Equation solved, inaccuracy possible.
The vector of function values is near zero, as measured by the value
of the function tolerance. However, the last step was ineffective.
%---------------------------------------------------------------------------------------------------------
From the final exit message it seems that the algorithm was able to find a solution that satisfies the enforced tolerance value. However, the final function value (which should be sum(equations.^2)) is 6.37946e-15, which is higher than 1e-20. Moreover no one of the three equations is satisfied with an error lower than 1e-20. So why is the final message 'The vector of function values is near zero, as measured by the value of the function tolerance'? Probably I haven't understood what TolFun actually is.
댓글 수: 0
채택된 답변
Steven Lord
2022년 4월 27일
See the Tip at the top of this documentation page. I suggest you increase your tolerance value to something greater than eps.
추가 답변 (1개)
Massimiliano Zanoli
2022년 4월 27일
You might have hit the numerical accuracy depending on what values the variables in your set of equations take. Check the eps at those values, stepping less than that will produce no change in the solution.
참고 항목
카테고리
Help Center 및 File Exchange에서 Systems of Nonlinear Equations에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!