[计算机数值分析]迭代法求根过程的加速

Spring-_-Bear 的 CSDN 博客导航

对于收敛的迭代过程,只要迭代足够多次,就可以使得结果达到任意精度,但有时迭代过程收敛缓慢,从而使计算量变得很大,因此对迭代过程加速的研究显得尤为重要。

x k x_{k} xk 是根 x ∗ x^{*} x 的某个近似值,用迭代公式校正一次得

x ‾ k + 1 = φ ( x k ) \overline{x}_{k+1}=\varphi(x_{k}) xk+1=φ(xk)

假设 φ ′ ( x ) \varphi'(x) φ(x) 在所考察得范围内改变不大,其估计值为 L,则有

x ∗ − x ‾ k + 1 ≈ L ( x ∗ − x k ) x^{*} - \overline{x}_{k+1} \approx L(x^{*}-x_{k}) xxk+1L(xxk)

由此解出 x ∗ x^{*} x

x ∗ ≈ 1 1 − L x ‾ k + 1 − L 1 − L x k x^{*}\approx\frac{1}{1-L}\overline{x}_{k+1}-\frac{L}{1-L}x_{k} x1L1xk+11LLxk

也就是说,如果将迭代值 x ‾ k + 1 \overline{x}_{k+1} xk+1 与迭代初值 x k x_{k} xk 进行加权平均,可以期望所得到得解是比 x ‾ k + 1 \overline{x}_{k+1} xk+1 更好的近似根。

总的来说,通过给定估计值 L 的控制,对一次迭代值跟迭代初值进行加权平均,我们有理由相信加权后的解相比加权前的解可以是更好的近似根。

运行示例:

  1. 此为 未对迭代过程加速,找到符合精度要求的近似根,需要迭代 9 次。

在这里插入图片描述

  1. 此为加速迭代过程,估计值 L 取 0.2,迭代 4 次后找到符合精度要求的根。显然,加速的效果是显著的。

在这里插入图片描述

程序源码:

#include <iostream>
#include <cmath>

using namespace std;

/**
 * 原函数 f(x) = (x+1)^(1/3)
 */
double f(double x)
{
    return pow(x + 1, 1.0 / 3);
}

int main(void)
{
    double x0;
    cout << "请输入迭代初值:";
    cin >> x0;

    double accrucy;
    cout << "请输入精度:";
    cin >> accrucy;

    int n;
    cout << "请输入您想要的最大迭代次数:";
    cin >> n;

    double L;
    cout << "请输入估计值 L:";
    cin >> L;

    double x2;
    int count = 0;
    do
    {
        double x1 = f(x0);
        // 对迭代值 x1 与 x0 进行加权平均得到 x2
        x2 = 1.0 / (1 - L) * x1 - L / (1 - L) * x0;

        if (abs(x0 - x2) < accrucy)
        {
            cout << "近似解为:" << x2 << endl;
            break;
        }

        // 继续下一次迭代,直至找到符合精度要求的根或最大迭代次数用完
        cout << "第" << ++count << "次迭代!\t迭代函数的值为:" << x2 << "\t此次迭代精度为:" << abs(x2 - x0) << endl;
        double item = x0;
        x0 = x2;
        x2 = item;

        if (count > n)
        {
            cout << "迭代次数耗尽,迭代结束!未找到符合精度要求的根!!!" << endl;
            break;
        }
    } while (abs(x0 - x2) >= accrucy);

    return 0;
}
  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
摘要:牛顿迭代法是《数值分析》这门课程一个重要的计算方法和思想。这次的课程设计是通过在学习所学习到的牛顿迭代的方法的思想计算方程:求方程 x3+x2-3x-3=0 在1.5附近根。并通过VISUALC++编译程序计算出方程的根。并通过这次的课程设计对所学习的知识进行进一步的总结和完善从而对原有的知识进行深化和巩固。牛顿迭代法的主要功能:计算方程时可以比较快速方便的计算出来结果但并不影响计算出来结果的精确度,运用于多种工业设计和数学设计方面。 关键词: 牛顿 迭代 方程 根 Abstract: The Newton iteration method is "Numerical analysis" in this curriculum an important computational method and the thought.The method thought computation equation in the study which this time curriculum design is through studies Newton who iterates: Asks equation x3+x2-3x-3=0 in 1.5 neighbor roots.And calculates the equation through the VISUALC++ compiler the root.Thus and designs through this time curriculum to the knowledge which studies carries on the further summary and the consummation carries on the deepening to the original knowledge and consolidated.Newton iteration method main function: When computation equation but may the quite fast convenience computation finally not affect calculates the result the precision, utilizes in many kinds of industrial design and mathematics design aspect. Key words: Newton iterates the equation root 1 牛顿迭代法的简介 1.1 牛顿迭代法的概述 牛顿迭代法(Newton's method)又称为牛顿-拉夫逊方法(Newton-Raphson method),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x) = 0的根。 设r是f(x) = 0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线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的近似值序列,其x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式。 解非线性方程f(x)=0的牛顿法是把非线性方程线性化的一种近似方法。把f(x)在x0点附近展开成泰勒级数 f(x) = f(x0)+(x-x0)f'(x0)+(x-x0)^2*f''(x0)/2! +… 取其线性部分,作为非线性方程f(x) = 0的近似方程,即泰勒展开的前两项,则有f(x0)+f'(x0)(x-x0)=f(x)=0 设f'(x0)≠0则其解为x1=x0-f(x0)/f'(x0) 这样,得到牛顿法的一个迭代序列:x(n+1)=x(n)-f(x(n))/f'(x(n))。 1.2 牛顿迭代法的优点 迭代法是求方程近似根的一个重要方法,也是计算方法的一种基本方法,它的算法简单,是用于求方程或方程组近似根的一种常用的算法设计方法。 牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x) = 0的单根附近具有平方收敛,而且该法还可以用来求方程的重

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

春天熊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值