1、利 用 迭 代 算 法 解 决 问 题 , 需 要 做 好 以 下 三 个 方 面 的 工 作 : 一 、 确 定 迭 代 变 量 。 在 可 以 用 迭 代 算 法 解 决 的 问 题 中 , 至 少 存 在 一 个 直接 或 间 接 地 不 断 由 旧 值 递 推 出 新 值 的 变 量 , 这 个 变 量 就 是 迭 代 变 量 。 二 、 建 立 迭 代 关 系 式 。 所 谓 迭 代 关 系 式 , 指 如 何 从 变 量 的 前 一 个 值 推 出其 下 一 个 值 的 公 式 ( 或 关 系 ) 。 迭 代 关 系 式 的 建 立 是 解 决 迭 代 问 题 的 关 键 ,通 常
2、 可 以 使 用 递 推 或 倒 推 的 方 法 来 完 成 。 三 、 对 迭 代 过 程 进 行 控 制 。 在 什 么 时 候 结 束 迭 代 过 程 ? 这 是 编 写 迭 代 程序 必 须 考 虑 的 问 题 。 不 能 让 迭 代 过 程 无 休 止 地 重 复 执 行 下 去 。 迭 代 过 程 的 控制 通 常 可 分 为 两 种 情 况 : 一 种 是 所 需 的 迭 代 次 数 是 个 确 定 的 值 , 可 以 计 算 出来 ; 另 一 种 是 所 需 的 迭 代 次 数 无 法 确 定 。 对 于 前 一 种 情 况 , 可 以 构 建 一 个 固定 次 数 的 循 环
3、 来 实 现 对 迭 代 过 程 的 控 制 ; 对 于 后 一 种 情 况 , 需 要 进 一 步 分 析出 用 来 结 束 迭 代 过 程 的 条 件 。最 经 典 的 迭 代 算 法 是 欧 几 里 德 算 法 , 用 于 计 算 两 个 整 数 a,b 的 最 大 公 约 数 。 其 计 算 原理 依 赖 于 下 面 的 定 理 :牛顿迭代法是牛顿在 17 世纪提出的一种求解方程 f(x)=0.多数方程不存在求根公式,从而求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。 设 r 是 f(x)=0 的根,选取 x0 作为 r 初始近似值,过点(x0,f(x0))做曲线
4、y=f(x)的切线 L,L 的方程为 y=f(x0)+f(x0)(x-x0),求出 L与 x 轴交点的横坐标 x1=x0-f(x0)/f(x0),称 x1 为 r 的一次近似值,过点(x1,f(x1))做曲线 y=f(x)的切线,并求该切线与 x 轴的横坐标 x2=x1-f(x1)/f(x1)称 x2 为 r 的二次近似值,重复以上过程,得 r 的近似值序列Xn,其中 Xn+1=Xn-f(Xn)/f(Xn),称为 r 的 n+1次近似值。上式称为牛顿迭代公式。 /*用牛顿迭代法求下面方程 x*x*x-5*x*x+16*x-80=0 的实根的过程是:1.你想在谁附近求解,这个范围或者这个数值大多
5、是题目已经给定了的(本例是根据输入的数值来计算的)2.令 f(x)=x*x*x-5*x*x+16*x-803.x1=X4.求 f(x1)5.对 f(x)求导,得到 f1(x),求 f1(x1)6.调整 x,使 x=x1-f(x1)/f1(x1) 7.符合条件 x-x11e-5,转到第 3 步8.不符合条件 x-x11e-5,则 x1 就是我们要求的实根*/#include #include /y=(x-5)*x+16)*x-80float f(float x) return (pow(x,3)-5*pow(x,2)+16*x-80);float f1(float x)return (3*pow(x,2)-10*x+16);void main()float x,x1,y1,y2;printf(“请输入一个任意实数:X=“);scanf(“%f“,printf(“我可以帮你找到这个方程的解n“);dox1=x;y1=f(x);y2=f1(x1);x=x1-y1/y2;while (fabs(x-x1)=1e-5);printf(“A root is %fn“,x1);