猫史档案馆


【Python作品分享】二分法求方程的近似解【作品秀】

用户:SUS丶UnSUS丶Un查看:0 回复:0 评论:0 创建时间:2020-12-12T21:15:53


【作品展示】

center_image

 

【作品介绍】

城垣文学社作品

此程序在GitHub及编程猫社区上发表开源

传送链接喵NTFago/Approximate-solution-of-equation-by-dichotomy

 

【作品源代码】

import matplotlib.pyplot as plt # 绘图
import numpy as np              # 科学计算
import math                     # 解析式定义
"""
-------math库常用函数-------
math.e   自然常数e
math.pi  圆周率pi
math.degrees(x)	 弧度转度
math.radians(x)	 度转弧度
math.log(x[, base])	 返回x的以base为底的对数,base默认为e
math.log10(x)	 返回x的以10为底的对数
math.pow(x, y)	 返回x的y次方
math.sqrt(x)	 返回x的平方根
math.sin(x)	 返回x(弧度)的三角正弦值(cos,tan,asin,acos,atan亦如此)
"""

# 自行定义函数部分, 也可以用numpy库来定义
def f(x):
    func = math.log(x) + 2 * x - 6   # 函数解析式
    return func


# 控制台获取输入
ε = float(input("请输入精度值:"))
a = float(input("请输入区间[a, b]中a的值:"))
b = float(input("请输入区间[a, b]中b的值:"))

# 循环主体
while math.fabs(a - b) >= ε:    # 为了程序的精度相匹配,使用math库中的fabs方法进行绝对值运算
    c = (a + b) / 2
    if f(a) * f(c) < 0:
        b = c
    elif f(c) == 0:
        a = c
        break
    else:
        a = c

print("函数的零点为:{}".format(a))

# --------------绘图部分----------------
x = np.linspace(a, b*3, int(a*b*5))  # 线性生成值
y = np.log10(x) + 2 * x - 6    # 解析式

plt.figure(figsize=(10, 6))  # 设置图象宽高
plt.plot(x, y, label='函数图像', color='red', linewidth=1)  # 绘图
plt.xlabel('x')  # 标记x
plt.ylabel('y')  # 标记y
# 定义y轴长度
plt.vlines(x=0, ymin=-10, ymax=10, colors="k", linestyles="solid")
# 定义x轴长度
plt.hlines(y=0, xmin=-1, xmax=10, colors="k", linestyles="solid")

plt.rcParams['font.sans-serif'] = ["SimHei"]  # 定义字体为黑体
plt.rcParams['axes.unicode_minus'] = False  # 用正常来显示负号
plt.title('f(x)的图象')  # 设置标题
plt.legend(loc='best')  # 自动分配图例到最佳位置
plt.show()  # 显示图象

 

【提示】

部分含有Python第三方库相关内容的作品,在海龟编辑器网页端无法运行哦!如遇到这种情况,可以打开下面的链接,下载海龟编辑器客户端:

https://python.codemao.cn


回复

上一页1 页 / 共 0下一页