博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
1.2方程求根之不定点迭代法
阅读量:7112 次
发布时间:2019-06-28

本文共 4527 字,大约阅读时间需要 15 分钟。

目录

目录

前言

本章节讲的是另一种基础的求解方程的方法,不定点迭代法。

(一)不定点迭代法的分析

1.定义:

一般地,为了求解非线性方程:

\[ f(x)=0 \]
将其转换为等价的形式:
\[ x = \varphi(x) \]
其中$\varphi(x) $ 称为迭代函数。由于(1)与(2)具有相同的解:

则构造迭代公式有:

\[ x_{k+1} = \varphi(x_k), k=0,1,2··· \]
给定初值\(x_0\) ,并且\(\varphi(x)\) 是连续函数,则有:
\[ x^* = \lim_{k \to \infty} x_{k+1} = \lim_{k \to \infty} \varphi(x_{k})= \varphi(\lim_{k \to \infty} x_{k}) = \varphi(x^*) \]

可得\(x^*\) 是方程的(4)的解,也是方程(1)\(f(x)=0\) 的解。

上面的方法就称为:不定点迭代法

2.条件:

  1. \(\varphi(x)\) 在[a,b]内连续,在(a,b)内可导。
  2. 对于任意的\(x \in [a,b]\) ,则有\(\varphi(x) \in [a,b]\)
  3. 在[a,b]内,存在一个常数L(0<L<1),使得\(|\varphi\prime(x)|\leq L < 1\),局部收敛

3.思想:

在收敛函数的前提下,不断的逼近真实值,直到满足我们的精度要求。

如下图,我们可以看到,给定初始值\(p_0\)后,经过几次的迭代,取值P很逼近两函数的交点,也就是方程的解。

思想.jpg

4.误差:

要使\(x^*-x_k \leq \varepsilon\) ,只需要\(|x_{k+1}-x_k| \leq \varepsilon\)

即可以用迭代前后两次的近似根的绝对值大小,来判断\(x_k\)使否满足精度要求,从而终止迭代的条件。

(二)代码实现

1.流程图:

不定点迭代法.jpg

2.源代码:

(1)feval函数:

def feval(string, a):    """        根据值来计算数学表达式。    :param string: 含有x未知数的数学表达式    :param a: 自变量x的具体数值    :return:  数学表达式的计算结果    """    count = string.count("x")    string = string.replace('x', '%f')    t = (a, ) * count    result = eval(string % t)    return result

(2)不定点迭代法:

"""    不定点迭代法,不断的逼近求解的方法"""from my_math.func_math import fevaldef item_fun(expr, x_0, r):    """        不定点迭代法求解方程的根    :param expr: 迭代函数的表达式    :param r: 误差    :return: 结果值    """    k = 0    # 第一次两点的差距    x_1 = feval(expr, x_0)    x_2 = feval(expr, x_1)    f_1 = abs(x_2 - x_1)    # 第二次两点的差距    x_1 = feval(expr, x_2)    x_2 = feval(expr, x_1)    f_2 = abs(x_2 - x_1)    # 判断迭代函数是否收敛    if f_1 <=  f_2:        print("函数不收敛")        result = None    else:        while abs(x_2-x_1) > r:            x_1 = feval(expr, x_2)            x_2 = feval(expr, x_1)            k += 1            print('*' * 20)            print("次数", k)            print("x_k", x_1)            print("x_(k+1)", x_2)        result = x_2    print("最后的结果是:", result)    return resultif __name__ == '__main__':    item_fun("1+1/(x**2)", 1.45, 10**-15)    # 最后的结果是: 1.4655713791984073

(三)案例演示

1.求解:\(f(x)=x^3-x-1=0\)

(1)迭代函数的选择

\(f(x)​\)转化为等价的两种形式

\[ x=\varphi_1(x)=\sqrt[3]{x+1} \]

\[ x = \varphi_2(x)=x^3-1 \]

1)\(f(x)\) 的图像:

01.1.png

01.2.png

可知,其在1.2~1.4之间有解决。

2)\(\varphi_1(x)=\sqrt[3]{x+1}\) 的图像:

01.png

02.png

函数收敛,取其初始值是:1.4

3)\(\varphi_2(x)=x^3-1\)的图像:

03.png

04.png

函数不收敛,不满足要求。

(2)运行结果

1)对于\(x=\varphi_1(x)=\sqrt[3]{x+1}\) 有:

要求其误差是:不超过10^-5

初始值是:1.4


次数: 1

x_k: 1.324736389945562
x_(k+1) :1.3247213843988477


次数 2

x_k: 1.324718535206007
x_(k+1) :1.324718155312702
最后的结果是: 1.324718155312702

取其结果是:1.32472
2)对于\(x = \varphi_2(x)=x^3-1\)有:

函数不收敛

最后的结果是: None

2.求解:\(f(x)=x^3-x^2-1=0\)

(1)函数的选择

将函数转化为下面几种等价的形式

\[ x=\varphi(x_1)=1+\frac{1}{x^2} \]

\[ x=\varphi(x_2)=\sqrt[3]{1+x^2} \]

\[ x=\varphi(x_3)=\frac{1}{\sqrt{x-1}} \]

\[ x=\varphi(x_4)=\sqrt{x^3-1} \]

\[ x=\varphi(x_5)=\frac{1}{x^2-x} \]

\(f(x)​\) 的图像

06.png

05.png

可知,其在1.0~1.5之间有根。

(2)运行结果

要求其误差是:不超过10^-5

初始值是:1.5

1)对于\(\varphi(x_1)=1+\frac{1}{x^2}\)

次数: 1

x_k: 1.4620902736993255
x_(k+1): 1.4677909186639455
********************
…………
********************
次数: 9
x_k: 1.465568837830036
x_(k+1): 1.4655726498903963
最后的结果是: 1.4655726498903963

取其结果是:1.46557
2)对于\(\varphi(x_2)=\sqrt[3]{1+x^2}\)

次数: 1

x_k: 1.466243022306503
x_(k+1): 1.4658768155675745
********************
…………
********************
次数: 4
x_k: 1.4655770399093733
x_(k+1): 1.4655738557111386
最后的结果是: 1.4655738557111386

取其结果是:1.46557
3)对于\(\varphi(x_3)=\frac{1}{\sqrt{x-1}}\)

函数不收敛

最后的结果是: None

取其结果是:无
4)对于\(\varphi(x_4)=\sqrt{x^3-1}\)

函数不收敛

最后的结果是: None

取其结果是:无
5)对于\(\varphi(x_5)=\frac{1}{x^2-x}\)

函数不收敛

最后的结果是: None

取其结果是:无

3.求解:\(f(x) = x^2-3=0\)

(1)函数的选择

将函数转化为下面几种等价的形式

\[ x = \varphi(x_1)=x^2+x-3 \]

\[ x = \varphi(x_2)=\frac{3}{x} \]

\[ x=\varphi(x_3)=x-\frac{1}{4}(x^2-3) \]

\[ x=\varphi(x_4)=\frac{1}{2}(x+\frac{3}{x}) \]

\(f(x)​\)的图像

07.png

08.png

可知,函数有两个根,其在-2与2附近之间有根。

(2)运行结果

要求其误差是:不超过10^-5

初始值是:-2与2

1)对于:\(\varphi(x_1)=x^2+x-3\)

函数不收敛

最后的结果是: None

取其结果值:无
2)对于:\(\varphi(x_2)=\frac{3}{x}\)

函数不收敛

最后的结果是: None

取其结果值:无
3)对于:\(\varphi(x_3)=x-\frac{1}{4}(x^2-3)\)

当初值为2时。


次数: 1

x_k: 1.732056325884
x_(k+1): 1.732051503216
最后的结果是: 1.732051503216

取为:1.73205

当初值为-2时。


次数: 1

x_k: 1.7079058866077501
x_(k+1): 1.728670273791
********************
次数: 2
x_k: 1.731595007775
x_(k+1): 1.73198968899375
********************
次数: 3
x_k: 1.7320426599749998
x_(k+1): 1.7320497615377501
最后的结果是: 1.7320497615377501

取为:1.73205

取其结果值:1.73205
4)对于:\(\varphi(x_4)=\frac{1}{2}(x+\frac{3}{x})\)

初始值是:2.0时,

最后的结果是: 1.7320508075688879

取为:1.7205

初始值是:-2.0时,

最后的结果是: -1.7320508075688879

取为:-1.73205

取其结果值:1.73205与-1.73205

作者:Mark

日期:2019/02/18 周一

转载于:https://www.cnblogs.com/zyg123/p/10395478.html

你可能感兴趣的文章
Linux相关知识笔记
查看>>
[Android学习笔记]View的draw过程学习
查看>>
【1】HTTP协议和Socket接口区别
查看>>
EntityFramework Core 1.1有哪些新特性呢?我们需要知道
查看>>
Sql Server 2008/2005 数据库还原出现 3154错误
查看>>
JavaSE复习(四)File类与IO流
查看>>
Permutation test: p, CI, CI of P 置换检验相关统计量的计算
查看>>
Delegate,Action,Func,Predicate的使用与区别
查看>>
c#自动登录网页,浏览页面
查看>>
插件开发建议
查看>>
变量声明和函数声明提升
查看>>
SQL Server 数据库定时自动备份
查看>>
Python回调函数用法实例
查看>>
解决:ajax新窗口打开url,被禁止的问题
查看>>
ajax里的status和readystate
查看>>
ZigBee的发展也有“碎片化”zigbee模块
查看>>
WebLogic 两处任意文件上传漏洞动态分析(CVE-2018-2894)
查看>>
Swift之类型安全和类型推断
查看>>
Js修复四则运算浮点数精度问题
查看>>
记录一个解决IOS极光推送解决问题方法的网址csdn
查看>>