08-课件:55.2 迭代法
迭代公式的建立ppt课件
0.4x2(k)
2
9
迭代计算
x(0) 0 [0, 0, 0]T
x(1) 1
0.3
x (1) 2
1.5
x1(k x2(k
1) 1)
0.2x2(k) 0.1x3(k) 0.3
0.2x1(k )
0.1x3(k) 1.5
x3(k
1)
0.2x1(k )
将L+U= A - D代入
x(k1) D1b D1(D A) x(k ) (I D1A) x(k) D1b
写成
x(k1) Gx(k ) d
雅可比迭代矩阵
G I D1A
d D1b
27
雅可比迭代的矩阵形式为 x(k1) Gx(k) d
第五章 线性代数方程组的迭代法
5.1 迭代公式的建立 5.2 向量和矩阵的范数 5.3 迭代过程的收敛性
1
5.1 迭代公式的建立 设线性代数方程组
写成矩阵形式 Ax=b 其中
2
迭代法就是用某种极限过程去逐步逼近线性方程组精确解的方法。
基本思想:对给定的方程组 Ax b ,写成等价的形式
x Gx d
a x ( k 1) ij j j 1
n
a
ij
x
( j
k
)
)
j i 1
参数 称为松弛因子。
可以证明,为了保证迭代过程收敛,必须要求
0 2。
20
迭代-加速的形式
x ( k 1) i
(1 ) xi( k )
aii
( bi
迭代法
迭代法
迭代法也叫辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。
对非线性方程,利用递推关系式,从开始依次计算,来逼近方程的根的方法,若仅与有关,即,则称此迭代法为单步迭代法,一般称为多步迭代法;对于线性方程组,由关系从开始依次计算来过近方程的解的方法。
若对某一正整数,当时,与k 无关,称该迭代法为定常迭代法,否则称之为非定常迭代法。
称所构造的序列为迭代序列。
求通项公式的方法(用迭代法)已知数列{An},a1=2,an=2a(n-1)-1(n>或=2)求通项公式
an=2a(n-1)-1 an-1=2(a(n-1)-1 ) n>或=2
所以an-1 为等比数列
an-1=(a1-1)*2^(n-1)
an-1=2^(n-1)
an=2^(n-1)+1
牛顿迭代法求开方
数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。
方法使用函数的泰勒级数的前面几项来寻找方程的根。
牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根,此时线性收敛,但是可通过一些方法变成超线性收
敛。
另外该方法广泛用于计算机编程中。
用迭代法求平方根
对于A>1,求其平方根可构造用如下公式迭代:
f(x)=(1/a)(x+a/x),a=A/(A-1),迭代初值x0=[√A]+1,[x]为x的取整.如想求70的平方根,可令初值x0=9.
对于A1,用如上方法求出平方根后,在成10^(-n),即得结果.。
迭代法
第三章 线性代数方程组数值解法(迭代法)迭代法是解线性方程组的另一类方法,特别是适用于解大型稀疏线性方程组,如由某些偏微分方程数值解法中转化来的高阶线性代数方程组。
事实上,迭代法是求解多种数值问题的基本方法。
迭代法作为一种求解数值问题的通用方法,其基本思想是针对求解问题预先设计好某种迭代格式,从而产生求解问题的近似解的迭代序列,在迭代序列收敛于精确解的情况下,按精度要求取某个迭代值作为问题解的近似值,这就是求解数值问题的迭代法。
在这一章,我们的求解问题是线性方程组,下一章是非线性方程和非线性方程组,在不少其他问题中还会用到。
迭代法的内容包括下述两个主要方面: ① 针对具体问题构造具体的迭代格式。
② 研究迭代格式(序列)的收敛性并作误差分析。
3.1 解线性方程组迭代法的基本概念和基本迭代公式解线性代数方程组 b Ax = (3.1.1) (nn RA ⨯∈非奇异,0),,,(21≠=T n b b b b , Tn x x x x ),,,(21 =为解向量 )的迭代法的具体做法是: 把方程组(3.1.1)变形为等价形式)(x F x =我们这里只研究如上式的线性的形式 f Bx x +=(其中nn R B ⨯∈,nR f ∈ )例如把A分解为nn R M N M A ⨯∈-=,则( b M Nx Mx b x N M 11)(--+=→=- )如果令 N M B 1-=, b M f 1-= 这就是前面的迭代格式 f Bx x +=。
(对应的迭代公式是: ),,2,1,0()()1(n k f Bx xk k =+=+ 其中每一步迭代值仅依赖于前一步的迭代值。
称为单步迭代。
) 如果{)(k x }当 ∞→k 时有极限*x 存在, *)(lim x xk k =∞→则称迭代公式是收敛的;3.2 Jacobi 迭代法/Gauss —Seidel 迭代法这是解线性方程组的两种基本的方法。
1. Jacobi 迭代公式设方程组b Ax =中 nn ij Ra A ⨯∈=)(,ni R b b ∈=且 ),,2,1(0n i a ii =≠。
常用算法(一)——迭代法
常用算法——迭代法一、迭代法迭代法是用于求方程或方程组近似根的一种常用的算法设计方法。
设方程为f(x)=0,用某种数学方法导出等价的形式x=g(x),然后按以下步骤执行:(1)选一个方程的近似根,赋给变量x0;(2)将x0的值保存于变量x1,然后计算g(x1),并将结果存于变量x0;(3)当x0与x1的差的绝对值还小于指定的精度要求时,重复步骤(2)的计算。
若方程有根,并且用上述方法计算出来的近似根序列收敛,则按上述方法求得的x0就认为是方程的根。
上述算法用C程序的形式表示为:【算法】迭代法求方程的根{ x0=初始近似根;do {x1=x0;x0=g(x1);/*按特定的方程计算新的近似根*/} while ( fabs(x0-x1)>Epsilon);printf(“方程的近似根是%f\n”,x0);}迭代算法也常用于求方程组的根,令X=(x0,x1,…,xn-1)设方程组为:xi=gi(X) (I=0,1,…,n-1)则求方程组根的迭代算法可描述如下:【算法】迭代法求方程组的根{ for (i=0;i<n;i++)x=初始近似根;do {for (i=0;i<n;i++)y=x;for (i=0;i<n;i++)x=gi(X);for (delta=0.0,i=0;i<n;i++)if (fabs(y-x)>delta) delta=fabs(y-x);} while (delta>Epsilon);for (i=0;i<n;i++)printf(“变量x[%d]的近似根是%f”,I,x);printf(“\n”);}具体使用迭代法求根时应注意以下两种可能发生的情况:(1)如果方程无解,算法求出的近似根序列就不会收敛,迭代过程会变成死循环,因此在使用迭代算法前应先考察方程是否有解,并在程序中对迭代的次数给予限制;(2)方程虽然有解,但迭代公式选择不当,或迭代的初始近似根选择不合理,也会导致迭代失败。
迭代法
迭代法编辑迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法,即一次性解决问题。
迭代法又分为精确迭代和近似迭代。
“二分法”和“牛顿迭代法”属于近似迭代法。
迭代算法是用计算机解决问题的一种基本方法。
它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。
目录1算法▪确定迭代变量▪建立迭代关系式▪对迭代过程进行控制▪举例2递归的基本概念和特点1算法编辑迭代是数值分析中通过从一个初始估计出发寻找一系列近似解来解决问题(一般是解方程或者方程组)的过程,为实现这一过程所使用的方法统称为迭代法(Iterative Method)。
一般可以做如下定义:对于给定的线性方程组x=Bx+f(这里的x、B、f同为矩阵,任意线性方程组都可以变换成此形式),用公式x(k+1)=Bx(k)+f(括号中为上标,代表迭代k次得到的x,初始时k=0)逐步带入求近似解的方法称为迭代法(或称一阶定常迭代法)。
如果k趋向无穷大时limx(k)存在,记为x*,称此迭代法收敛。
显然x*就是此方程组的解,否则称为迭代法发散。
跟迭代法相对应的是直接法(或者称为一次解法),即一次性的快速解决问题,例如通过开方解决方程x +3= 4。
一般如果可能,直接解法总是优先考虑的。
但当遇到复杂问题时,特别是在未知量很多,方程为非线性时,我们无法找到直接解法(例如五次以及更高次的代数方程没有解析解,参见阿贝耳定理),这时候或许可以通过迭代法寻求方程(组)的近似解。
最常见的迭代法是牛顿法。
其他还包括最速下降法、共轭迭代法、变尺度迭代法、最小二乘法、线性规划、非线性规划、单纯型法、惩罚函数法、斜率投影法、遗传算法、模拟退火等等。
利用迭代算法解决问题,需要做好以下三个方面的工作:确定迭代变量在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
迭代法解非线性方程
%牛顿法求函数f在区间[a,b]上的一个零点
%f函数名,a区间左端点,b区间右端点,e根的 精度,root函数的零点 function [root,n]=newton2(f,a,b,e) %牛顿法求函数f在区间[a,b]上的一个零点 %f函数名,a区间左端点,b区间右端点,e根的 精度,root函数的零点,n迭代次数
D { x x x * }内 ( x ) 存在一阶连续的导数,
那么 (1)当 x D , | ' ( x ) | 1 时,迭代公式 xk 1 ( xk ) 是局部收敛的; (2)当 x D , | ' ( x ) | 1 时,迭代公式 xk 1 ( xk ) 是发散的。
目录 上页 下页 返回 结束
求解非线性方程的迭代法
3.弦截法的Matlab编程实现 function root=chord_cut(f,a,b,e)
%弦截法求函数f在区间[a,b]上的一个零点
%f函数名,a区间左端点,b区间右端点,e根的精 度,root函数的零点
function [root,n]=chord_cut2(f,a,b,e)
定理1的两个条件有时较难验证也较难满足, 这时常用的是局部收敛条件。 所谓局部收敛,指的是迭代公式在x*的某个邻 域是收敛的。 关于局部收敛有如下的定理。
目录 上页 下页 返回 结束
求解非线性方程的迭代法
3.迭代法的局部收敛性
定理 2 设方程 x ( x ) 有根 x * ,且在 x * 的某个邻域
目录 上页 下页 返回 结束
求解非线性方程的迭代法
y
( xk , f ( xk ))
x*
y f (x )
xk 1 x k
线性代数方程组迭代法PPT课件
超松弛法
收敛速度快
总结词
总结词
计算量较大
ABCD
详细描述
超松弛法具有较快的收敛速度,尤其对于大型线 性方程组,能够显著减少迭代次数。
详细描述
由于超松弛法的计算量较大,因此在实际应用中 可能需要考虑计算效率的问题。
CHAPTER 04
迭代法的实现步骤
初始化
设置初值
为方程组的解向量设定一个初始值。
迭代法的应用场景
当方程组的系数矩阵难以直接求解时 ,迭代法可以作为一种有效的替代方 案。
在科学计算、工程技术和经济领域中 ,许多问题可以转化为线性代数方程 组求解,而迭代法在这些领域有广泛 的应用。
迭代法的优缺点
优点
迭代法通常比直接法更加灵活和通用,对于大规模和高维度的线性代数方程组, 迭代法更加高效。
缺点
迭代法需要选择合适的迭代公式和参数,并且需要满足收敛条件,否则可能无 法得到正确的解。此外,迭代法的计算过程比较复杂,需要较高的计算成本。
CHAPTER 02
迭代法的基本原理
迭代法的数学模型
迭代法是一种求解线性代数方程组的数值方法,通过不断迭代逼近方程的 解。
迭代法的数学模型通常表示为:$x_{n+1} = T(x_n)$,其中$x_n$表示第 $n$次迭代时的近似解,$T(x)$表示迭代函数。
03
非线性方程组的迭代法在求解优化问题、控制问题 等领域有广泛应用。
在优化问题中的应用
01
迭代法在优化问题中也有广泛应用,如求解无约束优化问题、 约束优化问题和多目标优化问题等。
02
常见的优化问题迭代法包括梯度下降法、牛顿法和共轭梯度法
等。
这些方法通过不断迭代来逼近最优解,广泛应用于机器学习、
高校工程数学迭代法求方程根教学课件
作迭代格式
xk+1=(2xk3+5)/(3xk2-2) 取x0=2.5,得迭代序 列:x1=2.164179104,x2=2.097135356,x3=2.094555232, X4=2.094551482=x5,故 α x4
补充[例1]
作迭代格式 xk+1=(xk3-5)/2
令x0=2.5,得迭代序列:x1=5.3125,x2=72.46643066,
≤(qp+qp-1+…+q)|xk–xk-1|≤q/(1–q)•|xk–xk-1|
收敛性
令p→∞,由上式可得
|x*–xk|≤q/(1–q)•|xk–xk-1| 这个误差估计式说明,只要迭代值的偏差|xk–xk-1| 相当小,就可以保证迭代误差|x*–xk|足够小,因此 可用条件:
|xk–xk-1|<ε
k
,也就是 x* = g(x* ),即x* 是 g lim x lim g x k 1 k k k
的根,也就是f 的根。若{ xk}发散,则迭代 法失败。
迭代法原理
[例2-3-1] 求方程 f(x0)=x3–x–1=0 在x=1.5附近的一个根。 [解] 将方程(2.3.1)改写成下列形式 (2.3.2) 用所给的初始近似x0=1.5代入(2.3.2)的右端,得到 (2.3.1)
[例2-3-1a]
迭代初值仍取x0=1.5,则有: x1=2.375
x2=12.3976
继续迭代下去已经没有必要,因为结果显然会越 来越大,不可能趋向于某个极限。这种不收敛的 迭代过程称作是发散的。 一个发散的迭代过程,纵使进行了千百次迭代, 其结果也是毫无价值的。
补充[例1]
[例1] 用简单迭代法求区间(2,3)内方程x3-2x-5=0的根
第二节迭代法及其收敛性PPT课件
证明: 由微分中值定理可得
ek1 xk1 x g(xk)g(x) g(k)(xk x) g(k)ek
其中k在xk与x之间, 再由局部收敛可知
limek1 e k
k
lki mg(k)
g(x)
故迭代格式是线性收敛的.
定理7.2.3 设x是迭代函数g(x)的不动点,整数p 1, g(p)(x)在x
的邻域上连续,则迭代格式在x的邻域上是p阶收敛的充分必
1.732361 1.732051
注意 31.7,32从0计5算0 结8 果看到迭代法(1) 及(2)均不收敛,且它们均不满足定理3中的局部收敛条 件,迭代法(3)和(4)均满足局部收敛条件,且迭代法 (4)比(3)收敛快,因在迭代法(4)中 g(x*.)0
定义7.2.2 设迭代过程 xk1收g敛(x于k)方程
x2的根30
x* 3.
解 这里 f(x),可x2改写3为各种不同的等价形 式 xg,(x其) 不动点为 x*由此3构. 造不同的迭代法:
( 1 )x k 1 x k 2 x k 3 ,g ( x ) x 2 x 3 ,
g ( x ) 2 x 1 ,g ( x * g ) (3 ) 2 3 1 1 .
xg(x).
(2.1)
若要求 x满* 足 f (x*,) 则0 x;*反之g(亦x*然), 称 x为* 函数 g的( x一) 个不动点.
求 f的(x零) 点就等价于求 的不(x动) 点,选择一个 初始近似值 x,0 将它代入(2.1)右端,即可求得
x1 g(x0).
如此反复迭代计算
x k 1 g (x k) (k 0 ,1 , ).
34
又因 132g(x),故33 定 理2 1中条件1°也成立.
C语言迭代法详细讲解
迭代法迭代法也称辗转法,是一种不断用变量的旧值递推新值的过程,跟迭代法相对应的是直接法(或者称为一次解法),即一次性解决问题。
迭代法又分为精确迭代和近似迭代。
“二分法”和“牛顿迭代法”属于近似迭代法。
迭代算法是用计算机解决问题的一种基本方法。
它利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,在每次执行这组指令(或这些步骤)时,都从变量的原值推出它的一个新值。
利用迭代算法解决问题,需要做好以下三个方面的工作:一、确定迭代变量。
在可以用迭代算法解决的问题中,至少存在一个直接或间接地不断由旧值递推出新值的变量,这个变量就是迭代变量。
二、建立迭代关系式。
所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。
迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。
三、对迭代过程进行控制。
在什么时候结束迭代过程?这是编写迭代程序必须考虑的问题。
不能让迭代过程无休止地重复执行下去。
迭代过程的控制通常可分为两种情况:一种是所需的迭代次数是个确定的值,可以计算出来;另一种是所需的迭代次数无法确定。
对于前一种情况,可以构建一个固定次数的循环来实现对迭代过程的控制;对于后一种情况,需要进一步分析出用来结束迭代过程的条件。
例 1 :一个饲养场引进一只刚出生的新品种兔子,这种兔子从出生的下一个月开始,每月新生一只兔子,新生的兔子也如此繁殖。
如果所有的兔子都不死去,问到第12 个月时,该饲养场共有兔子多少只?分析:这是一个典型的递推问题。
我们不妨假设第 1 个月时兔子的只数为u 1 ,第 2 个月时兔子的只数为u 2 ,第 3 个月时兔子的只数为u 3 ,……根据题意,“这种兔子从出生的下一个月开始,每月新生一只兔子”,则有u 1 = 1 ,u 2 =u 1 +u 1 ×1 = 2 ,u 3 =u 2 +u 2 ×1= 4 ,……根据这个规律,可以归纳出下面的递推公式:u n =u n - 1 × 2 (n ≥ 2)对应u n 和u n - 1 ,定义两个迭代变量y 和x ,可将上面的递推公式转换成如下迭代关系:y=x*2x=y让计算机对这个迭代关系重复执行11 次,就可以算出第12 个月时的兔子数。
迭代算法PPT课件
与 FBP 一样,ASIR 将系统的光学特性理想化,通过将 FBP 数据和 ASIR 数据按不同比例加权融合,达到不同程度的降噪效果,可以将复杂问 题简单化,加快处理速度。在 Marin 等[7]的研究中,ASIR(约 10 幅 图像/s)所需的平均时间仅比标准 FBP 重建(约 15 幅图像/s)长 50 %,基本可以做到准实时重建,并且能较 FBP 重建明显提高图像质量。
讨论 传统FBP算法是一种解析重组算法,自CT应用以
来一直被商业CT广泛应用。其优点是重组速度快, 但它要求投影数据完备并且精确定量,该算法易 受统计波动的影响,对噪声和伪影都非常敏感, 投影数据量如果不足时,重组的图像质量就会明 显下降。并且FBP算法为了更加易于操作,做了很 多简化和假定,包括测量信号不含有光子统计错 误和电子噪声、X射线球管的焦点是无穷小点、探 测器模型也由位于每个单元中心的点构成、重组 的体素是没有形状和大小的点。由于忽略了光学 系统中真实的几何因素和统计噪声,FBP算法并不 是一个精确的CT图像重组方法。并且由于FBP算 法需要完备的数据,相应地也就要求较高的剂量。 在目前剂量问题日益引起公众重视的今天,FBP算 法显然已经不能完全满足临床的需要。
2 ASIR 技术成像的特点 GE 公司已经把 ASIR 技术装配到最先进的宝 石 CT(Discovery CT750 HD)和 128 层 CT(Optima CT660)上并 用于临床,重点是研究噪声消除、伪影抑制以及双能与能(量)敏 (感)成像,现已取得了比较满意的效果。在实际临床应用中,它又 具有以下几个技术特
减少辐射剂量,这将在临床上会得到更广
泛的应用,尤其对小病灶的检出和婴幼儿 的检查。
08-课件:55.2 迭代法
大连理工大学罗晓芳算法思想:利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,每次执行这组指令(或步骤)时,都从变量原值推出一个新值。
关键步骤:1、确定迭代变量:也就是直接或间接地不断由旧值递推出新值的变量。
2、建立迭代关系式: 指如何从变量的前一个值推出其下一个值的公式(或关系)。
3、对迭代过程进行控制。
在什么时候结束迭代过程?迭代算法一般结构小猴在一天内摘了若干个桃子,当天吃掉一半多一个;第二天吃掉剩下的一半桃子多一个;以后每天都吃尚存桃子的一半零一个。
直到第7天早上要吃时,只剩下一个了,问小猴共摘了多少个桃子?例4:小猴吃桃子问题问题分析:先从最后一天推出倒数第二天的桃子,再从倒数第二天推出倒数第三天的桃子,……设第n天的桃子为x,它是前一天的桃子数的一半少一个x n = xn-1/2-1前一天的桃子数为:xn-1=(xn+1)×2(递推公式)设迭代变量x x=(x+1)*2#include "stdio.h"int main(){int i, x;x=1;printf("第7 天的桃子数为:1只\n");for(i=6; i>=1; i--){x=(x+1)*2;printf("第%d 天的桃子数为:%d 只", i , x);printf("\n");}return 0;小猴吃桃子问题迭代关系,迭代:原值推出新值//迭代变量赋初值思考:小猴在一天内摘了94个桃子,当天吃掉一半多一个;以后每天都吃尚存桃子的一半多一个,问小猴直到第几天早上要吃时只剩下一个了?例5:用迭代法求a 的算术平方根。
公式:x n =0.5*(x n-1+a/x n-1)确定初值为x0,新值为x1 取a/2为x0的初值,迭代结束条件:|x1-x0|<=10-5.#include <stdio.h>#include <math.h>int main( ){ float a, x0, x1;scanf("%f",&a);x0=a/2; x1=(x0+a/x0)/2; while (fabs(x1-x0)>1e-5){x0=x1;x1=(x0+a/x0)/2; }printf("sqrt(a)=%f\n", x1);零非零|x1-x0|>10-5?x0=x1x1=(x0+a/x0)/2x0=a/2x1=(x0+a/x0)/2输出a ,x1迭代:原值推出新值// 迭代变量赋初值//新值变原值//将循环结束条件取反1.分析:程序采用逐位分离的方法。
迭代解法(全章)讲解ppt课件
10/18/2023
第六章 线性方程组的迭代解法
21
§3 常用的三种迭代解法
一、 Jacobi迭代法
对于线性方程组 Ax=b
(1)
设 det(A)≠ 0 ,aii ≠ 0,i=0,1,2,…,n ,按照如下方式对A
进行分裂:
A=L+D+U
(2)
10/18/2023
第六章 线性方程组的迭代解法
22
则由 Ax=b 得到 (L+D+U) x=b >D x=-(L+U)x+b
或 向量序列 {x(k)} 收敛于向量 x* ,当且仅当它的每一 个分量序列收敛于x* 的对应分量,即
10/18/2023
第六章 线性方程组的迭代解法
7
二、矩阵的范数
矩阵范数是反映矩阵“大小”的一种度量,具体定义如下。 定义6.3 设||·||是以n阶矩阵为变量的实值函数,且满足 条件:
(1) || A ||≥0,且|| A ||=0时,当且仅当A=0
矩阵1-范数:
列和
矩阵2-范数:
矩阵∞-范数:
行和
以上三种范数都满足矩阵范数的条件,通常将这三种 矩阵范数统一表示为||A ||p,P=1 ,2 ,∞。
10/18/2023
第六章 线性方程组的迭代解法
9
例6.2 设矩阵
求矩阵A的范数||A ||p,P=1 ,2 ,∞ 。 解 根据定义
由于 则它的特征方程为:
25
对于 n 元线性方程组 其一般式为:
从中解出:
得Jacobi迭代格式
通过|| x(k+1)-x(k)||<ε 控制迭代次数。
10/18/2023
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
大连理工大学
罗晓芳
算法思想:利用计算机运算速度快、适合做重复性操作的特点,让计算机对一组指令(或一定步骤)进行重复执行,每次执行这组指令(或步骤)时,都从变量原值推出一个新值。
关键步骤:
1、确定迭代变量:也就是直接或间接地不断由旧值递推出新值的变量。
2、建立迭代关系式: 指如何从变量的前一个值推出其下一个值的公式(或关系)。
3、对迭代过程进行控制。
在什么时候结束迭代过程?
迭代算法一般结构
小猴在一天内摘了若干个桃子,当天吃掉一半多一个;第二天吃掉剩下的一半桃子多一个;以后每天都吃尚存桃子的一半零一个。
直到第7天早上要吃时,只剩下一个了,问小猴共摘了多少个桃子?
例4:小猴吃桃子问题
问题分析:先从最后一天推出倒数第二天的桃子,再从倒数第二天推出倒数第三天的桃子,……
设第n天的桃子为x,它是前一天的桃子数的一半少一个
x n = x
n-1
/2-1
前一天的桃子数为:x
n-1=(x
n
+1)×2
(递推公式)设迭代变量x x=(x+1)*2
#include "stdio.h"
int main()
{
int i, x;x=1;printf("第7 天的桃子数为:1只\n");for(i=6; i>=1; i--){
x=(x+1)*2;
printf("第%d 天的桃子数为:%d 只", i , x);printf("\n");}
return 0;小猴吃桃子问题
迭代关系,迭代:原值推出新值//迭代变量赋初值思考:
小猴在一天内摘了94个桃子,
当天吃掉一半多一个;以后每天都吃尚存桃子的一半多一个,问小猴直到第几天早上要吃时只剩下一个了?
例5:用迭代法求a 的算术平方根。
公式:x n =0.5*(x n-1+a/x n-1)
确定初值为x0,新值为x1 取a/2为x0的初值,迭代结束条件:|x1-x0|<=10-5.
#include <stdio.h>#include <math.h>int main( )
{ float a, x0, x1;scanf("%f",&a);
x0=a/2; x1=(x0+a/x0)/2; while (fabs(x1-x0)>1e-5){
x0=x1;x1=(x0+a/x0)/2; }
printf("sqrt(a)=%f\n", x1);
零
非零
|x1-x0|>10-5?
x0=x1x1=(x0+a/x0)/2
x0=a/2x1=(x0+a/x0)/2
输出a ,x1
迭代:原值推出新值// 迭代变量赋初值//新值变原值//将循环结束
条件取反
1.分析:程序采用逐位分离的方法。
2.设x 为正整数,a=x%10分离个位
3.y=(a+5)%10每位加5后取个位
4.从个位开始保证逆序
5.x=x/10 为下次分离做准备,
6.
直到x=0结束。
例6:输入一个正整数,将其每位加5后取个位值逆向输出。
#include "stdio.h"int main( ){
int x, y ;
printf("Enter x:");
scanf("%d",&x);while(x!=0){
y=( (x%10)+5)%10;printf("%d", y);
x=x/10;}
//迭代变量赋初值迭代:原值推出新值例如:x=2645 输出结果是0917
x=2645 a=5 y=0x=264 a=4 y=9x=26 a=6 y=1x=2 a=2 y=7x=0
(x 是弧度i 取值[1,100] )例7:利用公式求sinx 的近似值
(循环嵌套)
...
)!
1i 2()1(!5!3sinx 1
i 21i 5
3
+--+⋅⋅⋅-+-=-+x x x x 1. 第i 项的分子是x 的2*i-1次方,例如i=3时,第i 项分子是x 52. 第i 项的分母是的(2*i-1)!,例如i=3时,第i 项分母是5!
3. 第i 项的运算符号是(-1)i+1
4. 双重循环实现sinx 的计算,内循环实现第i 项的分子和分母的计算,外循环实现累加
#include <stdio.h> #include <math.h> int main(){ int i,j;
double sum=0,flag=1;double x,t;
printf("输入角度\n");
scanf("%lf",&x); x=x*3.1415926/180; /*度化为弧度*/for(i=1;i<=100;i++){
t=1;
for(j=1;j<=2*i-1;j++)t=t*j;
sum=sum+flag*pow(x, 2*i-1)/t;flag=-flag;}
printf("sum=%f\n",sum);return 0;}
//开始求阶乘,注意容器在此处清空!
...
)!
1i 2()1(!5!3sinx 1
i 21i 5
3+--+⋅⋅⋅-+-=-+x
x x x
例8:利用公式求sinx 的近似值
(迭代法)
分析:循环累加问题也是迭代法的应用,本题采用两次迭代S i =S i-1+t 。
t i =-k*t i-1
1.
设i 为项数,s 为累加和,s=s+级数的下一项
2.第i 项的绝对值:x 2i-1/(2i-1)! 第i 项的运算符号(-1)i+1
3.第i+1项的绝对值等于x 2(i+1)-1/(2(i+1)-1)!= x 2i+1/(2i+1)!
4.因此,第i+1项的绝对值等于第i 项的绝对值乘x 2再除以(2i)*(2i+1)
5.
级数的下一项可用下面表达式实现:
下一项= -(上一项)*x*x/((2*i)*(2*i+1));
...
)!
1i 2()1(!5!3sinx 1
i 21i 5
3
+--+⋅⋅⋅-+-=-+x
x x x
#include "stdio.h "
int main()
{ int i;
double x,t,s=0;scanf("%lf ",&x);
x=x*3.1415926/180; ; /*度化为弧度*/t=x;for(i=1;i<=100;i++){
s=s+t;
t=-t*x*x/((2*i)*(2*i+1));}
printf("sin(x)=%f\n ",s);return 0;}//迭代关系,迭代:原值推出新值//迭代变量赋初值11
程序演示
...
)!1i 2()1(!5!3sinx 1
i 21i 5
3+--+⋅⋅⋅-+-=-+x
x x x
#include <stdio.h>int main ( ){ int i;
float temp, s=0, m=1.0, n=2.0;for (i=1; i<=10; i++){
s += m/n;temp = m+n;m = n;n = temp;}
printf (“s = %f ”, s);return 0;}
例9:求分数序列前10项之和⋅
⋅⋅,,,,85533221从第二项起,每一项的分子是前一项的分母,每一项分母是前一项分子与分母之和。
项数分子m 分母n
112221+2332+34
5
3+5
12
程序演示
每一项都是斐波那契数列:1,1,2,3,5,8,13,21 从第二项开始前后两数的商。
斐波那契数列1,1,2,3,5,8,13,21S 1=1,S 2=1 S i =S i-1+S i-2 i>=3。