方程组线性化方法和牛顿迭代法基础
非线性方程组线性化和牛顿迭代法
非线性方程,就是因变量与自变量之间的关系不是线性的关系,这类方程很多,例如平方关系、对数关系、指数关系、三角函数等等。求解此类方程往往很难得到精确解,经常需要求近似解问题。
一元函数的线性化和牛顿迭代
设f(x)是一个非线性方程组,现在需要求解f(x)=0的根,并且以及有一个近似解xk-1,f(x)连续可导,那么将f(x)在xk-1这一点进行泰勒展开可以得到:
f
(
x
)
≈
f
(
x
k
−
1
)
+
f
′
(
x
k
−
1
)
⋅
(
x
−
x
k
−
1
)
f(x) \approx f\left(x_{k-1}\right)+f^{\prime}\left(x_{k-1}\right) \cdot\left(x-x_{k-1}\right)
f(x)≈f(xk−1)+f′(xk−1)⋅(x−xk−1)
此时求解的方程组就变为了:
f
(
x
k
−
1
)
+
f
′
(
x
k
−
1
)
⋅
(
x
−
x
k
−
1
)
=
0
f\left(x_{k-1}\right)+f^{\prime}\left(x_{k-1}\right) \cdot\left(x-x_{k-1}\right) = 0
f(xk−1)+f′(xk−1)⋅(x−xk−1)=0 此时方程变成了一个线性方程。如果一阶导数不等于0,那么可以使用牛顿迭代法进行更新新的近似解xk
x
k
=
x
k
−
1
−
f
(
x
k
−
1
)
f
′
(
x
k
−
1
)
x_{k}=x_{k-1}-\frac{f\left(x_{k-1}\right)}{f^{\prime}\left(x_{k-1}\right)}
xk=xk−1−f′(xk−1)f(xk−1)
将泰勒公式一阶方程近似为一个线性方程式,可得到一个迭代公式(注意敛散性和导数不为0的条件)
经过以上分析,就算是没有初始近似解,也可以从0开始迭代,经过多次迭代可以回到真实解附近。
matlab代码示例:
%% MATLAB 牛顿迭代(一元)
syms a %定义函数变量
f(a) = a^(3/2) + 2^a - 24; %方程式(其待求解为4)
df(a) = diff(f(a),a); %对其一阶求导
%% 牛顿迭代
x(1) = 0; %迭代赋初值
dt(1) = 1; %迭代增量初值,任意值大于迭代停止条件即可
ii = 1;
while abs(dt(ii))>1e-3 %牛顿迭代,当增量小于1E-3停止迭代
ii = ii + 1;
dt(ii) = - f(x(ii-1))/df(x(ii-1));
x(ii) = x(ii-1) + dt(ii);
end
%% 绘图
figure
plot(x)
xlabel('\fontname{宋体}\fontsize{10}迭代次数');
ylabel('\fontname{宋体}\fontsize{10}迭代值');
grid on
rtklib中牛顿迭代法的使用
求偏近点角Ek
求取卫星信号发射时刻偏近点角
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)