使用Newton-Raphson法求解交点遇导数无穷大问题求助
嘿,我来帮你拆解下这里的两个关键错误:
1. 圆的分支选错了!
你从$x2+y2=16$解出$y=(16-x2){1/2}$,这是**上半圆(y≥0)的表达式,但你的起始点$(4,-4)$对应的是下半圆(y≤0)**啊!正确的代入应该是取负号的分支:$y=-\sqrt{16-x^2}$。
把这个正确的y代入第二个方程$e^{x/3} + \frac{1}{5}y =1$,得到的目标函数应该是:
$$f(x) = 5 - 5e^{x/3} - \sqrt{16-x^2}$$
对应的导数也会变成:
$$f'(x) = -\frac{5}{3}e^{x/3} + \frac{x}{\sqrt{16-x^2}}$$
2. 起始点根本不在第一条曲线上
你选的$(4,-4)$其实不满足$x2+y2=16$(代入算的话是$16+16=32≠16$),而且当x=4时,$\sqrt{16-x^2}=0$,不管你用哪个分支,都会让原导数里的分母直接归零,导数自然就成了无穷大,这肯定没法迭代。
方案一:修正函数+换合适的起始点
- 先用上面修正后的$f(x)$和$f'(x)$;
- 换一个离$(4,-4)$近、且不在x=±4处的起始点,比如$(3,-3)$——这个点代入圆方程得$9+9=18≈16$,代入第二个方程得$e^1 + (-3)/5≈2.718-0.6=2.118≈1$,作为起始点很合适。
用这个起始点跑第一次迭代试试:
- $f(3)=5 -5e^1 - \sqrt{16-9}≈5-13.59-2.645≈-11.235$
- $f'(3)= -\frac{5}{3}e^1 + \frac{3}{\sqrt{7}}≈-4.53+1.134≈-3.396$
- $x_1=3 - \frac{-11.235}{-3.396}≈3-3.308≈-0.308$
接下来继续迭代就能逐步收敛到交点了。
方案二:用多元牛顿-拉夫逊法(更稳妥)
其实你完全可以不用消元,直接联立两个方程用多元牛顿法求解,这样就不会遇到分支选择的麻烦。
设定两个函数:
- $f_1(x,y)=x2+y2-16$
- $f_2(x,y)=e^{x/3}+\frac{1}{5}y-1$
迭代公式是:
$$\begin{bmatrix}x_{n+1} \ y_{n+1}\end{bmatrix} = \begin{bmatrix}x_n \ y_n\end{bmatrix} - J^{-1}\begin{bmatrix}f_1(x_n,y_n) \ f_2(x_n,y_n)\end{bmatrix}$$
其中雅可比矩阵$J$为:
$$J=\begin{bmatrix}2x & 2y \ \frac{1}{3}e^{x/3} & \frac{1}{5}\end{bmatrix}$$
这个方法下,你用$(4,-4)$作为起始点也完全没问题,因为这个点的雅可比矩阵行列式不为0(可逆),可以正常迭代计算。
内容的提问来源于stack exchange,提问作者carsof

