import math
import matplotlib
import matplot
import numpy as np
import matplotlib.pyplot as plt
plt.rcParams['font.family'] = ['sans-serif']
plt.rcParams['font.sans-serif'] = ['SimHei']
# 为了显示中文
def HH(m,n):
"""
问题一,输入m,n参数,返回一个(m+1)*(n+1)的矩阵
"""
##创建空列表
a=[]
##在空列表中进行添加列表
for i in range(0,m+1):
##a列表元素添加列表
a.append([])
for j in range(0,n+1):
a[i].append(0)
for i in range(0,m+1):
a[i][0]=math.exp(i/m)
for i in range(0,n+1):
a[0][i]=math.exp(i/n)
for i in range(0,n+1):
a[m][i]=math.exp(i/n+1)
# print(a)
for i in range(1,n+1):
for t in range(1,m):
a[t][i]=a[t][i-1]+m*m/n*(-2*a[t][i-1]+a[t+1][i-1]+a[t-1][i-1])
return a
# HH(4,5)
def plot_question2(t1,m,n):
"""
问题二,输入一个t1 输入一组m ,n得到对应矩阵
图里包含两个图像
第一个是连续的直线y=exp(t1/n+x)
另一个是对应矩阵的a[x][t1]的一串散点 (两图像不同颜色)
横轴为x 范围(0,1)
"""
x = np.arange(0,1,1/(m+1))
y1 = np.exp(t1/n+x)
plt.title("对比图像")
plt.plot(x, y1,label='y=exp(t1/n+x)')
a= get_column_list(t1,m,n)
y2 = np.array(a)
plt.plot(x, y2,label='m: '+ str(m) + ' n: '+str(n)+' 拟合曲线')
plt.legend()
plt.show()
def get_column_list(t,m,n):
"""
给m,n
取逻辑上第t列数据
t最小为1
"""
a=HH(m,n)
data=[]
# print(a)
for i in range(0,m+1):
data.append(a[i][t-1])
print(data)
return data
def get_five_column_list(t,m1,n1,m2,n2,m3,n3,m4,n4,m5,n5):
data=get_column_list(t,m1,n1)
x = np.arange(0,1,1/(m1+1))
y = np.array(data)
plt.plot(x,y,label='m: '+ str(m1) + ' n: '+str(n1))
data=get_column_list(t,m2,n2)
x = np.arange(0,1,1/(m2+1))
y = np.array(data)
plt.plot(x,y,label='m: '+ str(m2) + ' n: '+str(n2))
data=get_column_list(t,m3,n3)
x = np.arange(0,1,1/(m3+1))
y = np.array(data)
plt.plot(x,y,label='m: '+ str(m3) + ' n: '+str(n3))
data=get_column_list(t,m4,n4)
x = np.arange(0,1,1/(m4+1))
y = np.array(data)
plt.plot(x,y,label='m: '+ str(m4) + ' n: '+str(n4))
data=get_column_list(t,m5,n5)
x = np.arange(0,1,1/(m5+1))
y = np.array(data)
plt.plot(x,y,label='m: '+ str(m5) + ' n: '+str(n5))
plt.legend()
plt.show()
plot_question2(3,3,3)
get_column_list(2,3,3)
get_five_column_list(3,3,3,4,4,5,5,6,6,7,7)