牛顿法问题
Newton method issue
我对 Matlab 中的 Newton(tangent) 方法有疑问。
我写了一个程序:
- 显示给定函数
f
的图形,与非线性方程相关,我需要确定哪些解(因此我让用户使用图形确定第一个近似值,方法是在 [最接近解决方案的牛轴 -> f
与 [Ox) 的交集
确定方程的解,对应于一阶近似。
但是,还是不够。
是否可以对用户引入的一阶近似进行这种测试,以防止牛顿法阻塞(这意味着在选择的第一个附近没有局部最小值点近似值)?因此,当发生这种情况时,用户会知道选择的点是错误的,因为函数f
的图形有两条切线,所以程序不会给出任何东西,但会阻塞。
你能给我一些建议吗?
如果我没理解错的话,你用的是牛顿法,其公式为:
据我所知,牛顿法的收敛性(除了连续性要求外)应该满足两个条件:
1) 函数的导数在任何阶段都不应该为零。所以你可以在你的代码中插入这样的东西:
if dfdx < 1e-4
disp('Bad starting point')
break;
end
2) 导数的符号不应该随着迭代改变它的符号。因此,插入如下内容:
derivative = temp; %save the value of old derivative in variable
%code that counts derivative for new iteration
if sign(derivative)~=sign(temp)
disp('Bad starting point')
break;
end
如果您想添加更复杂的内容,可以添加二次收敛条件检查。该方法在 here 或维基百科中有详细描述。
祝你好运
我对 Matlab 中的 Newton(tangent) 方法有疑问。
我写了一个程序:
- 显示给定函数
f
的图形,与非线性方程相关,我需要确定哪些解(因此我让用户使用图形确定第一个近似值,方法是在 [最接近解决方案的牛轴 ->f
与 [Ox) 的交集
确定方程的解,对应于一阶近似。
但是,还是不够。
是否可以对用户引入的一阶近似进行这种测试,以防止牛顿法阻塞(这意味着在选择的第一个附近没有局部最小值点近似值)?因此,当发生这种情况时,用户会知道选择的点是错误的,因为函数
f
的图形有两条切线,所以程序不会给出任何东西,但会阻塞。你能给我一些建议吗?
如果我没理解错的话,你用的是牛顿法,其公式为:
据我所知,牛顿法的收敛性(除了连续性要求外)应该满足两个条件:
1) 函数的导数在任何阶段都不应该为零。所以你可以在你的代码中插入这样的东西:
if dfdx < 1e-4
disp('Bad starting point')
break;
end
2) 导数的符号不应该随着迭代改变它的符号。因此,插入如下内容:
derivative = temp; %save the value of old derivative in variable
%code that counts derivative for new iteration
if sign(derivative)~=sign(temp)
disp('Bad starting point')
break;
end
如果您想添加更复杂的内容,可以添加二次收敛条件检查。该方法在 here 或维基百科中有详细描述。
祝你好运