Matlab求解非线性方程(1)——不动点迭代法

非线性方程$f(x)=0$的解法

迭代技术用来求解方程的根、线性和非线性方程组的解以及微分方程的解。

  • 迭代:重复执行一个计算过程,直到找到答案

  • 不动点(fixed point):函数$g(x)$的不动点,指一个实数$P$,满足$P=g(P)$。从图形角度分析,不动点是$y=g(x)$和$y=x$的交点。

  • 不动点迭代法:将方程$f(x)=0$提取出一个$x$放到等式右边,迭代得到的结果$x$就是解。

  • 残差:相邻$P$作差,如$\vert P_{n+1}-P_n\vert$

  • 容差:$\vert P_{n+1}-P_n\vert\le tol(一个规定值,容差)$,即迭代法是收敛的。

有一个用于逐项计算的规则或函数$g(x)$,并且有一个起始点$P_0$,迭代规则$P_{k+1}=g(P_k)$,迭代序列值$\lbrace P_k\rbrace$有如下模式:$$\left\lbrace \begin{array}{l} P_0\\P_1=g(P_0)\\ P2=g(P_1)\\\cdots\\ P_k=g(P_{k-1})\\ P_{k+1}=g(P_k) \end{array}\right.$$

定义1:函数$g(x)$的一个不动点(fixed point)是指一个实数$P$,满足$P=g(P)$。从图形角度分析,不动点是$y=g(x)$和$y=x$的交点。

定义2:迭代$P_{n+1}=g(P_n)$,其中$n=0,1,\cdots$称为不动点迭代。

定理1:设$g$是一个连续函数,且$\lbrace P_n\rbrace_{n=0}^{\infty}$是由不动点迭代生成的序列。如果$\lim_{n\to\infty}P_n=P$,则$P$是$g(x)$的不动点。

不动点存在性条件

定理2:设函数$g\in C[a,b]$。如果对于所有$x\in [a,b]$,映射$y=g(x)$的范围满足$y\in[a,b]$,则函数$g$在$[a,b]$内有一个不动点。

fea57782e7802b37b6b4939d7f0e17ca.png

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
%不动点迭代
clear;
clc;
%初值
P0=0.3;
%容差
tol=1e-8;
%最大迭代次数
max=2000;
%赋初值
P(1)=P0;
%cos(sinx)=x
for k=1:max
P(k+1)=cos(sin(P(k)));
err(k+1)=abs(P(k+1)-P(k));%残差

if err(k+1)<tol %残差<容差
p=P(k+1);
break;
end

end
%画出残差,y轴坐标用对数表示
semilogy(err)

fprintf("不动点迭代的结果: %f",p)
打赏
  • Copyrights © 2020-2021 haoyu fang
  • 访问人数: | 浏览次数:

请我喝杯啤酒吧~

支付宝
微信