科学计算-----第一天

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_37083038/article/details/102760775

import numpy as np
import scipy.optimize as opt
import pylab as pl

'''

学习了scipy的求最小值的函数,以及imshow函数

运行程序后,输入要用的最小值方法,然后会返回求解的过程

'''

method=input('请输入使用的最小值函数: ')
points=[]
def f(p):
    x,y=p
    z=(1-x)**2+100*(y-x**2)**2
    points.append((x,y,z))
    return z
def fprime(p):
    x,y=p
    dx=-2+2*x-400*x*(y-x**2)
    dy=200*y-200*x**2
    return np.array([dx,dy])
init_point=(-2,-2)
    
fmin_func=opt.__dict__[method]
if method in ['fmin','fmin_powell']:
    result=fmin_func(f,init_point)
elif method in ['fmin','fmin_bfgs','fmin_l_bfgs_b','fmin_tnc']:
    result=fmin_func(f,init_point,fprime)
elif method in ['fmin_cobyla']:
    result=fmin_func(f,init_point,[])
else:
    print('fmin function not found')

p=np.array(points) #将所有点传给p
xmin,xmax=np.min(p[:,0])-1,np.max(p[:,0])+1  
ymin,ymax=np.min(p[:,1])-1,np.max(p[:,1])+1
Y,X=np.ogrid[ymin:ymax:500j,xmin:xmax:500j] #返回一个列矩阵与行矩阵
Z=np.log10(f((X,Y)))
zmin,zmax=np.min(Z),np.max(Z)
#热图 heatmap
#pl.imshow(Z,extent=(xmin,xmax,ymin,ymax),origin='lower',aspect='auto')
pl.imshow(Z,extent=(xmin,xmax,ymin,ymax),origin='lower',aspect='auto')
pl.plot(p[:,0],p[:,1])  #将(x,y)的折线图画出来
pl.scatter(p[:,0],p[:,1],c=range(len(p))) #将(x,y)的点在图上显示出来
pl.xlim(xmin,xmax)
pl.ylim(ymin,ymax)
pl.show()

'''
imshow方法:在2D常规栅格(regular raster)上显示图像
extent图像在画布上的上下左右位置
origin 两种选择lower或upper,从最小开始或最大开始
aspect控制轴的纵横比
'''

当然我写博客主要是为了记录自己的学习,以及以后可以再改或者复习

猜你喜欢

转载自blog.csdn.net/qq_37083038/article/details/102760775