欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Homework Matplotlib

程序员文章站 2022-06-02 12:41:51
...

11.1

基础题,直接写出表达式即可。这里代码格式参照课件样例

import numpy as np
import matplotlib.pyplot as plt

x=np.linspace(0,2,1000) #[0,2]
y=np.sin(x-2)**2*np.exp(-x**2)
plt.plot(x,y)
plt.xlabel('x') #axis label
plt.ylabel('f(x)') #axis label
plt.title('11.1') #title
plt.show()

Homework Matplotlib

11.2

本题题意较为复杂,需要随机生成向量逼近目标值。2-范数可用numpy的函数直接求得,实现起来不难。

import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns

sns.set_style('whitegrid')
X = np.random.random_integers(10,20,(20,10)) #矩阵X
vB = np.random.randn(10) #向量b
vZ = np.random.randn(20) #向量z
vY = X.dot(vB)-vZ #向量y
minB=np.zeros(10) #目标值
minV=np.linalg.norm(vY) #默认2-范数
tArr=np.zeros(4000)
eB=np.random.randn(4000,10) #随机生成4000个向量组
for I in range(0,4000):
    t1=X.dot(eB[I])-vY
    tArr[I]=np.linalg.norm(t1)
minB=eB[np.argmin(tArr)] #选择2-范数最接近的
plt.plot(vB,'rx',label='True coefficients') #设置输出格式
plt.plot(minB,'bo',label='Estimated coefficients')
plt.xlim((-0.1,9.1)) #范围
plt.ylim((-2.2,2.2))
plt.xlabel('index')
plt.ylabel('value')
plt.title('11.2')
plt.xticks(np.arange(0,10,1)) #步长
plt.yticks(np.arange(-2, 2.5, 0.5))
plt.legend(loc='upper right',frameon = True) #设置图例
plt.show() #显示

Homework Matplotlib
可见系数的实际拟合情况较差

11.3

本题要用到Scipy的内容,scipy.stats是针对numpy数据的统计函数。我选择的是α=4,β=8的伽马分布,这是一个单峰的概率分布函数,E=α*β。为了显示方便,将所得值缩小了64倍。hist()函数中,bins是条形的个数;density是条形总面积,取1时,图像近似概率密度函数。gaussian_kde()是Scipy下的高斯核密度估计函数,以离散数据为参数,生成对应的概率密度值。evaluate()函数将数组参数整合到特定的自变量数列上,生成目标数组。

import numpy as np
import matplotlib.pyplot as plt
from scipy import stats

z=np.random.gamma(4,8,10000)
z=z/64
# 伽马分布
plt.hist(z,bins=25,density=1,facecolor='b',edgecolor='black') #直方图
gkde=stats.gaussian_kde(z)
Ax=np.linspace(0,2,256)
Ggkde=gkde.evaluate(Ax)
plt.plot(Ax,Ggkde,color='r',label='gkde') #核密度
plt.title("11.3")
plt.legend()
plt.show()
Homework Matplotlib