解x=g(x)的简单迭代法
- 格式:ppt
- 大小:836.50 KB
- 文档页数:15
迭代法求解⽅程(组)的根⾸先,迭代法解⽅程的实质是按照下列步骤构造⼀个序列x0,x1,…,xn,来逐步逼近⽅程f(x)=0的解:1)选取适当的初值x0;2)确定迭代格式,即建⽴迭代关系,需要将⽅程f(x)=0改写为x=φ(x)的等价形式;3) 构造序列x0,x1,……,xn,即先求得x1=φ(x0),再求x2=φ(x1),……如此反复迭代,就得到⼀个数列x0, x1,……,xn,若这个数列收敛,即存在极值,且函数 φ(x)连续,则很容易得到这个极限值,x*就是⽅程f(x)=0的根。
举个例⼦:求解⽅程: f(x) =x^3-x-1=0 在区间 (1,1.5)内的根。
⾸先我们将⽅程写成这种形式:⽤初始根x0=1.5带⼊右端,可以得到这时,x0和x1的值相差⽐较⼤,所以我们要继续迭代求解,将x1再带⼊公式得直到我们我们得到的解的序列收敛,即存在极值的时候,迭代结束。
下⾯是这个⽅程迭代的次数以及每次xi的解(i=0,1,2....)我们发现当k=7和8的时候,⽅程的解已经不再发⽣变化了,这时候我们就得到了此⽅程的近似解。
1#define eps 1e-82int main()3{4x0=初始近似根;5do{6x1=x0;7x0=g(x1); //按特定的⽅程计算新的近似根8}while(fabs(x0-x1)>eps);9printf("⽅程的近似根是%f\n",x0);10}注意:如果⽅程⽆解,算法求出的近似根序列就不会收敛,那么迭代过程就会变成死循环。
因此,在使⽤迭代算法前应先考察⽅程是否有解,并在算法中对迭代次数给予限制。
下⾯再写⼀个求解⽅程组的例⼦加深⼀下理解:算法说明:⽅程组解的初值X=(x0,x1,…,xn-1),迭代关系⽅程组为:xi=gi(X)(i=0,1,…,n-1),w为解的精度,maxn为迭代次数。
算法如下:算法核⼼:1int main()2{3for(i=0; i<n; i++)4x[i]=初始近似根;5do6{7k=k+1;8for(i=0; i<n; i++)9y[i]=x[i];10for(i=0; i<n; i++)11x[i]=gi(X); //按特定的⽅程计算新的近似根12c=0;13for(i=0; i<n; i++)14c=c+fabs(y[i]-x[i]);//c要每次重新设初值为015}while(c>eps and k<maxn );16for(i=0; i<n; i++)17print("变量的近似根是",x[i]);18}选取初始向量精确度为1e-8,迭代次数为100求解代码如下:1#include<iostream>2#include<cstdio>3#include<cstring>4#include<cmath>5#define eps 1e-86using namespace std;7const int maxn=100;8double x[10],y[10];9int main()10{11for(int i=1;i<=4;i++)12x[i]=0;13int cnt=0;14double c=0;15do{16for(int i=1;i<=4;i++)17y[i]=x[i];18for(int i=1;i<=4;i++)19{20x[1]=(6+x[2]-2*x[3])/10;21x[2]=(25+x[1]+x[3]-3*x[4])/11;22x[3]=(-11-2*x[1]+x[2]+x[4])/10;23x[4]=(15-3*x[2]+x[3])/8;24}25c=0;26for(int i=1;i<=4;i++)27c+=(fabs(y[i]-x[i]));28}while(c>eps&&cnt<maxn);29for(int i=1;i<=4;i++)30printf("x%d = %.4lf\n",i,x[i]);31}运⾏结果如下:迭代法求解⽅程的过程是多样化的,⽐如⼆分逼近法求解,⽜顿迭代法等。
不动点迭代格式
不动点迭代格式是将不动点迭代法公式进行变形得到的形式。
具体来说,不动点迭代法是为了求方程组的根,其等价形式为 x=g(x),迭代形式为
xk+1=g(xk)。
将不动点迭代法应用到求解∇f(x)=0,就是在求极值点。
例如,对于求解∇f(x)=0,将其改造成 x=g(x) 的形式,得到
∇f(x)=0⇒x=x−α(x)∇f(x),其中α(x):Rd→R。
这个公式可以对应梯度下降法。
此外,不动点迭代格式还可以通过不同的变形适用于不同的问题。
例如,在凸优化问题中采用不同的迭代格式可以得到不同的算法,如共轭梯度法等。
以上内容仅供参考,如需更多信息,建议查阅不动点迭代法的相关书籍或论文。
2 迭代法2.1 迭代法的一般概念迭代法是数值计算中一类典型方法,不仅用于方程求根,而且用于方程组求解,矩阵求特征值等方面。
迭代法的基本思想是一种逐次逼近的方法。
首先取一个精糙的近似值,然后用同一个递推公式,反复校正这个初值,直到满足预先给定的精度要求为止。
对于迭代法,一般需要讨论的基本问题是:迭代法的构造、迭代序列的收敛性天收敛速度以及误差估计。
这里,主要看看解方程迭代式的构造。
对方程(1.1),在区间],[b a 内,可改写成为:)(x x ϕ= (2.1)取],[0b a x ∈,用递推公式:)(1k k x x ϕ=+, Λ,2,1,0=k(2.2)可得到序列:∞==0210}{,,,,k k k x x x x x ΛΛ(2.3) 当∞→k 时,序列∞=0}{k k x 有极限x ~,且)(x ϕ在x ~附近连续,则在式(2.2)两边极限,得,)~(~x x ϕ=即,x ~为方程(2.1)的根。
由于方式(1.1)和方程(2.1)等价,所以,x x ~*= 即,*lim x x k k =∞→ 式(2.2)称为迭代式,也称为迭代公式;)(x ϕ可称为迭代函数。
称求得的序列∞=0}{k k x为迭代序列。
2.2 程序和实例下面是基于MATLAB 的迭代法程序,用迭代格式)(1n n x g p =+,求解方程)(x g x =,其中初始值为0p 。
**************************************************************************function[p,k,err,P]=fixpt(f1021,p0,tol,max1)% f1021是给定的迭代函数。
% p0是给定的初始值。
% tol 是给定的误差界。
% max1是所允许的最大迭代次数。
% k 是所进行的迭代次数加1。
% p 是不动点的近似值。
% err 是误差。
% P = {p1,p2,…,pn}P(1) = p0;for k = 2:max1P(k) = feval('f1021', P(k-1));k, err = abs(P(k) - P(k-1))p = P(k);if(err<tol),break;endif k == max1disp('maximum number of iterations exceeded');endendP=P;****************************************************************************例2.1 用上述程序求方程0sin 2=-x x 的一个近似解,给定初始值5.00=x ,误差界为510-。