数值分析——求方程解的不动点迭代法和斯特芬森法(Python实现)
一、不动点迭代法求方程的解
import sympy
#迭代的方程为 f(x)=pow(x,3)-x-1
def psi(x):return pow(x+1,1/3)def dif(x0): #求导函数用于判断最后的是否局部收敛x = sympy.Symbol('x')Y = pow(x+1,1/3)difY=(sympy.diff(Y, x))a=difY.subs(x,x0)return adef Fix(x0):p0=psi(x0)x1=p0k=0while k>=0:if abs(x1-x0)<10e-9:print("方程的根为",x1)print("迭代次数为",k)if abs(dif(x0))<1:print("此迭代局部收敛")else:print("此迭代非局部收敛")breakelse:x0=x1p0=psi(x0)x1=p0print("第",k+1,"次迭代值为",x0)k=k+1return x0 Fix(1.5)
运行结果
第 1 次迭代值为 1.3572088082974532
第 2 次迭代值为 1.3308609588014277
第 3 次迭代值为 1.325883774232348
第 4 次迭代值为 1.324939363401885
第 5 次迭代值为 1.3247600112927027
第 6 次迭代值为 1.3247259452268871
第 7 次迭代值为 1.324719474534364
第 8 次迭代值为 1.3247182454489357
第 9 次迭代值为 1.324718011988197
第 10 次迭代值为 1.3247179676430874
方程的根为 1.3247179592198772
迭代次数为 10
此迭代局部收敛
二、斯特芬森(Stephens)迭代法
# 斯蒂芬斯加速迭代,同样的例题,不动点迭代法用这个迭代方程还无法迭代,需要另一个迭代方程
#但这种方法即使是使用不动迭代的那个方程依旧可以迭代,而且这个方法迭代两次,用不动点迭代要十次迭代
import sympy
#迭代的方程为 f(x)=pow(x,3)-x-1 与不动点迭代是同个例子,但迭代方程不同
def psi(x):return pow(x,3)-1 #这个迭代方程用不动点迭代方法无法迭代,发散def dif(x0): #求导函数用于判断最后的是否局部收敛x = sympy.Symbol('x')Y = pow(x+1,1/3)difY=(sympy.diff(Y, x))a=difY.subs(x,x0)return adef Fix(x0): #x0是选取的初值p0=psi(x0)y0=p0z0=psi(y0)k=0while k>=0:if abs(y0-x0)<10e-9:print("方程的根为",x0)print("迭代次数为",k)if abs(dif(x0))<1:print("此迭代局部收敛")else:print("此迭代非局部收敛")breakelse:x0=x0-((y0-x0)**2)/(z0-2*y0+x0)y0=psi(x0)z0=psi(y0)print("第",k+1,"次迭代值为",x0)k=k+1return x0 Fix(1.5)
运行结果
第 1 次迭代值为 1.4162929745889388
第 2 次迭代值为 1.355650441476644
第 3 次迭代值为 1.3289487772840107
第 4 次迭代值为 1.3248044890410438
第 5 次迭代值为 1.3247179939688145
第 6 次迭代值为 1.3247179572447527
方程的根为 1.3247179572447527
迭代次数为 6
此迭代局部收敛
数值分析——求方程解的不动点迭代法和斯特芬森法(Python实现)相关推荐
- 5.C语言二分法求方程解
用二分法求方程解 #include <stdio.h> #include <math.h> double f(double x){return x*x-2*x-1; } dou ...
- matlab用牛顿迭代法求解方程,牛顿迭代法求方程解 程序如下
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 function [x_reality,n_reality] = Newt( f_name,x_start,tolerance,n_limit) %% % ...
- c语言韦达定理求方程解,解一元二次方程练习题(韦达定理)
<解一元二次方程练习题(韦达定理)>由会员分享,可在线阅读,更多相关<解一元二次方程练习题(韦达定理)(13页珍藏版)>请在人人文库网上搜索. 1.解一元二次方程练习题(配方法 ...
- c语言韦达定理求方程解,巧用韦达定理简化解题过程
高中的平面解析几何,是用代数方法来研究平面几何图形的问题,它所提出的问题以及问题的结论都是几何形式,而中间的论证和推导基本上是用代数方法.有许多题型中都会涉及二次函数韦达定理的综合应用. 韦达定理反映 ...
- 用牛顿迭代法求方程的根matlab,牛顿迭代法求方程解 程序如下
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 function [x_reality,n_reality] = Newt( f_name,x_start,tolerance,n_limit) %% % ...
- matlab牛顿迭代法 方程的根,牛顿迭代法求方程解 程序如下
该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 function [x_reality,n_reality] = Newt( f_name,x_start,tolerance,n_limit) %% % ...
- 用matlab求方程解的三种方法
方法一:二分法 function [x] =bisection(f,a,b,e) if f(a)*f(b)>=0 x='there is no root in (a,b ...
- 不动点迭代法和牛顿迭代法
不定点迭代法 方程的根 不动迭代法的概念 代码实现 import numpy import numpy as np from sympy import * import math import mat ...
- 求平方根的算法 牛顿迭代法和二分法
牛顿法: public double sqr(double n){double x=n,y=0.0;while (Math.abs(x-y)>0.0001){y=x;x=(x+n/x)/2;}r ...
最新文章
- valgrind概述及错误分析
- c++矩阵转置_C语言:数据结构-稀疏矩阵的压缩存储
- 从其它地方复制的代码到VS 提示无法识别的标记的解决办法
- java应该怎么学习?
- python中参数传递_python中参数传递
- 2011 - 12 - 12记录2011 - 12 - 11
- python在线怎么发音-Python如何实现文本转语音
- shell脚本基础 循环机构
- 多元函数偏导数连续、存在与可微的关系
- 通过rundll32调用系统对话框
- 机械制造作业考研题目答案分享——回转体的加工
- Idea突然不停indexing的问题
- Python批量自动下载获取图片
- (超详细)MapReduce工作原理及基础编程
- 【MTK Front Camera Bringup】
- Redis客户端常用命令大全
- LIS2MDL磁力计驱动
- java启动器_Minecraft Java版新启动器正式开放
- 【名片制作】深灰色背景·简单名片设计
- 数据库周刊28│开发者最喜爱的数据库是什么?阿里云脱口秀聊程序员转型;MySQL update误操作;PG流复制踩坑;PG异机归档;MySQL架构选型;Oracle技能表……