牛顿法求方程的根(C&Matlab&Python语言实现)
目录
1、概述
详细知识点我在前面的牛顿迭代法开方已经总结啦,这里就稍做补充。下面我们就直接给出案例,然后分享代码和结果。
2、案例
3、程序源代码
(1)C语言实现
#include<stdio.h>
#include<math.h>
int main()
{
double pow(double x,double y);
double x0,x,f1,f2;
x0=1;
do
{
x=x0; //初值
f1=pow(x,7)-28*pow(x,4)+14;
f2=7*pow(x,6)-112*pow(x,3); //对函数 f1 求导
x0=x-f1/f2; //迭代公式
}
while(fabs(x0-x)>1e-5);
printf("%9.8f\n",x0);
return 0;
}
(2)Matlab实现
%Newton 迭代法
x=1;
while abs(x.^(7)-28*x.^(4)+14)>0.00001
x=x-(x.^(7)-28*x.^(4)+14)/(7*x.^(6)-112*x.^(3));
end
vpa(x,8)
[注]Matlab中vpa()函数的应用。(本例中精度为保留8位有效数字)
(3)Python实现
import numpy as np
from sympy import *
import matplotlib.pyplot as plt
plt.style.use('ggplot') #设置绘图风格
plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] #处理中文乱码
plt.rcParams['axes.unicode_minus']=False #坐标轴负号的处理
x = symbols('x')
x1= 0 #区间下限
x2= 0.11 #区间上限
x0 = (x1+x2)/2 #迭代初始值
x_list = [x0]
i = 0
def f(x):
f = x**7-28*x**4+14
return f
x_values = []
y_values = []
while True:
if diff(f(x),x).subs(x,x0) == 0: #导数为零
print('极值点:',x0)
break
else:
x0 = x0 - f(x0)/diff(f(x),x).subs(x,x0) #diff()求导,subs()指定位置求导
x_list.append(x0)
'''if len(x_list) > 1:
i += 1
error = abs((x_list[-1] - x_list[-2]) / x_list[-1])
if error < 10 ** (-6):
print(f'迭代第{i}次后,误差小于10^-5')
break
else:
pass'''
#误差为零时:
if len(x_list) > 1:
i += 1
error = abs((x_list[-1] - x_list[-2]) / x_list[-1])
x_values.append(i)
y_values.append(error)
if error == 0:
print(f'迭代第{i}次后,误差等于0')
break
else:
pass
print(f'所求方程式的根为{x_list[-1]}')
#横坐标是迭代次数,纵坐标是误差值
plt.plot(x_values,
y_values,
color = 'steelblue', # 折线颜色
marker = '*', # 折线图中添加圆点
markersize = 3, # 点的大小
)
# 修改x轴和y轴标签
plt.xlabel('迭代次数')
plt.ylabel('误差值')
# 显示图形
plt.show()
迭代第44次后,误差等于0
所求方程式的根为3.03057732650459
(4)Python中Sympy库
在(3)中有一个Python中很重要的一个库:sympy。遇到复杂计算找python绝对不让你失望,sympy是一个Python的科学计算库,用一套强大的符号计算体系完成诸如多项式求值、求极限、解方程、求积分、微分方程、级数展开、矩阵运算等等计算问题。虽然Matlab的类似科学计算能力也很强大,但是Python以其语法简单、易上手、异常丰富的三方库生态,个人认为可以更优雅地解决日常遇到的各种计算问题。
SymPy是一个符号计算的Python库。它的目标是成为一个全功能的计算机代数系统,同时保持代码简洁、易于理解和扩展。它完全由Python写成,不依赖于外部库。
SymPy支持符号计算、求导,求偏导,高精度计算、模式匹配、绘图、解方程、微积分、组合数学、离散数学、几何学、概率与统计、物理学等方面的功能。
4、总结
计算结果是正确的。
5、参考文献
https://blog.csdn.net/Dontla/article/details/106201901
https://blog.csdn.net/cj151525/article/details/95756847
牛顿迭代法(Newton’s Method)迭代求根的Python程序_Fo*(Bi)的博客-CSDN博客_newton迭代法python
相关文章
- python 字符串转成数字_python数字转十六进制字符串
- 使用python的Django库开发一个简单的数据可视化网站(一)- 基本环境安装及配置
- 苹果电脑python官网下载步骤-Python下载和安装图文教程[超详细]
- python编程是什么-Python编程
- 哪些软件是python编写出来的_用Python编程需要什么软件?
- python hashlib_Python hashlib模块实例使用详解
- 简述python变量的命名规则_Python 变量命名规则
- Python&R语言-python和r相遇
- python常见运维脚本_Python运维常用脚本[通俗易懂]
- Python数组切片_python print数组
- python输出unicode编码_Python以utf8编码读取文件
- python语言关键字是_Python 关键字
- Python 冒泡排序_python
- python判断文件后缀_Python 判断文件后缀是否被篡改
- python如何生成随机数_Python生成50个随机数
- 正则表达式Python_python正则表达式匹配字符串
- 携程 爬虫_python自动化和爬虫先学哪个
- python爬虫之lxml库xpath的基本使用
- python-Python与MongoDB数据库-使用Python执行MongoDB查询(三)
- Ubuntu18.04 一键升级Python所有第三方包 及安装python包的方法
- python中对象、类型和元类之间的关系详解大数据
- Python 线程、进程和协程详解编程语言
- python学习Linux、Python,体验自由的乐趣(lexlinux)
- Python实现快速连接Redis数据库(python连接redis)
- 10 个 Python 图像编辑工具
- 利用Neo4j和Python进行无缝图形数据库支持(neo4j python)
- python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
- Python自定义函数的创建、调用和函数的参数详解
- 让你的python代码更加pythonic(简练、明确、优雅)