要求 (在一页A4纸内完成)
1.程序源代码
2.列表记录对应b的不同取值的收敛点3.作出收敛点关于b的取值图 (类似上页的图)
数学建模的一次作业,似乎是可以通过Matlab写的,不过我没学也懒得学就算了吧。总之先让chatgpt帮忙写了一些,就是比如要用什么库,用什么函数生成图像之类的,然后修改就可以了。
import numpy as np
import matplotlib.pyplot as plt
def f(x, b1): # 定义差分方程
return b1 * x * (1 - x)
def converge(b): # 定义函数来计算收敛点
converge_points = [] # 计算不同 b 值的收敛点
x = 0.2
count = 0
cover = []
converge_points.append(b)
for i in range(100):
x = f(x, b)
cover.append(x)
for i in range(98, -1, -1):
if round(cover[99], 2) == round(cover[i], 2): # 开始由于精度取到了四,但是画点缺失。改2就没问题了,计算机精度有点问题吧大概。
count = 99 - i
break
for i in range(count):
converge_points.append(round(cover[99 - i], 4)) # 计算不同 b 值的收敛点
plt.plot(b, round(cover[99 - i], 4), 'b.') # 绘制收敛点关于 b 的取值图
print(converge_points) # 输出收敛点
b_range = np.arange(2.5, 3.501, 0.01) # b 取值范围和间隔
for i in b_range:
converge(round(i, 2))
plt.xticks(np.arange(2.5, 3.5, 0.15))
plt.yticks(np.arange(0, 1, 0.1))
plt.title('Converge points vs b')
plt.xlabel('b')
plt.ylabel('Converge point')
plt.show()
输出是每个b值得收敛点,以及用此做的图像。