目标

原函数: f(x) = 2x1x1 + x2x2 -2x1*x2 - 4x1 + 4
起始点 为(0,0)
精度 :误差要求小于 10**(-3)

过程:

直接上代码看注释吧()

import numpy as np
import math
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3Ddef f(x):return 2*x[0]**2 + x[1]**2 - 2*x[0]*x[1]-4*x[0]+4   def step(x):      # 计算每次迭代的步长,H为该函数的hessian矩阵H = np.matrix([[4, -2], [-2, 2]])a = np.matrix(grad(x))b = np.matrix(grad(x).reshape(2, 1))    # array.reshape() 是把原列表按顺序变成指定的形状,本来是行向量形状是(2,1),经过处理后就变成了列向量形状是(2,1)return a*b/(a*np.matrix(H)*b)     def grad(x):      #在该点的梯度,返回一个向量return np.array([4*x[0]-2*x[1]-4, 2*x[1]-2*x[0]])def accuracy(x):   #计算在该点的精度return math.sqrt(x[0]*x[0]+x[1]*x[1])if __name__=="__main__":x = np.array([0, 0])  # 定义初始点trace = []  # 用来记录迭代的轨迹deta = accuracy(grad(x)) # 精度while deta > 10**-3: # 一直循环,直到达到精度要求trace.append(np.append(x, f(x)))  t = float(step(x)) # step(x)为只有一个元素的矩阵(二维列表),所以先把他转化为浮点型x = x - t*grad(x)  # 更新点deta = accuracy(grad(x)) # 计算新的误差print(len(trace))  #看一下他迭代了多少次得到解# 一下是画图环节fig = plt.figure()ax = Axes3D(fig)X = np.arange(0, 3, 0.25)  # 先输出一下trace列表看看大致的范围再确定坐标,范围是(0,3)步长为 0.25Y = np.arange(0, 3, 0.25)X, Y = np.meshgrid(X, Y) # meshgrid是 网格 的意思,用来形成网格Z = 2*X**2 + Y**2 - 2*X*Y-4*X+4   # 求Z坐标的值   X,Y,Z都是列表plt.xlabel('x') #设置坐标轴的名称plt.ylabel('y')for p in trace:ax.scatter(*p)  # 显示轨迹点ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap='summer') #绘制函数在设置的坐标范围的图像 XYZ是坐标列表,后面两个是画图坐标的间隔,默认值就是1,越大跨度越大点越稀疏,cmap 是图的风格(颜色渐变等等),有很多自己去网上找plt.show()  # 显示

效果:
迭代次数为23

只看到两个点是因为被图覆盖了,如果只显示点,是这样的:


极值点为(2,2)

python实现最速下降法求二元函数极值并绘制3D图像相关推荐

  1. 遗传算法求二元函数极值怎么编码_使用遗传算法求二元函数的最小值

    二元函数为y=x1^2+x2^2,x∈[-5,5] NIND=121; %初始种群的个数(Number of individuals) NVAR=2; %一个染色体(个体)有多少基因 PRECI=20 ...

  2. 遗传算法求二元函数极值怎么编码_遗传算法求解一元函数二元函数最值

    ##--------------------------施工中----------------------------## import random import math import numpy ...

  3. 遗传算法求二元函数极值怎么编码_遗传算法求解二元函数极值源码

    网上看到了一个比较不错的讲解遗传算法的帖子,链接如下 http://blog.csdn.net/b2b160/article/details/4680853 但是却没有贴源代码,正好最近闲来无事,就尝 ...

  4. matlab求二元函数极值算法_最优化计算与matlab实现(3)——进退法

    参考资料 <精通MATLAB最优化计算(第二版)> 数值实现 Matlab 2019a 目录 石中居士:最优化计算与Matlab实现--目录​zhuanlan.zhihu.com 进退法 ...

  5. 遗传算法求二元函数极值怎么编码_用遗传算法求复杂函数的极值点

    确定遗传 在元素个体,遗传得到的个体和变异个体中选取最好的30个个体(对应的函数值最大的30个个体)作为下一次迭代的父样本. from random import randint from numpy ...

  6. PSO粒子群算法(鸟群算法)计算二元函数极值(C语言实现、matlab工具箱实现)

    算法讲解和感悟   PSO算法是经典的智能优化算法,在数学建模等比赛中非常常用,求解时的效果不错.对于智能优化算法,个人倾向于matlab实现,因为计算起来非常方便.但是这次因为老师的要求,准备C语言 ...

  7. python求最值_用Python实现最速下降法求极值的方法

    对于一个多元函数 ,用最速下降法(又称梯度下降法)求其极小值的迭代格式为 其中 为负梯度方向,即最速下降方向,αkαk为搜索步长. 一般情况下,最优步长αkαk的确定要用到线性搜索技术,比如精确线性搜 ...

  8. 用Python实现最速下降法求极值

    原文:https://blog.csdn.net/u012705410/article/details/47254437 用Python实现最速下降法求极值 对于一个多元函数f(x)=f(x1,x2, ...

  9. python迭代法求极值_用Python实现最速下降法求极值的方法

    对于一个多元函数 ,用最速下降法(又称梯度下降法)求其极小值的迭代格式为 其中 为负梯度方向,即最速下降方向,αkαk为搜索步长. 一般情况下,最优步长αkαk的确定要用到线性搜索技术,比如精确线性搜 ...

最新文章

  1. Oracle Exadata 一体机关机过程(虚拟机环境)
  2. 猛男把400+条猫咪叫声做成数据集,可识别猫咪的3种不同状态丨开源
  3. 团队-团队编程项目作业名称-需求分析;
  4. MySQL分片 --转自Peter Zaitsev对MySQL分片的建议
  5. C/C++可变参函数示例
  6. webflux系列--reactor功能
  7. 华中科技大学c语言期末考试题,华中科技大学C语言期末考库剖析.docx
  8. iPhone SE 3 5G版发布在即 旧款将降价到千元出头
  9. mysql 报错1005_MysqlERROR 1005错误处理
  10. 广西大学计算机英语复试的内容,广西大学计算机专业的研究生复试时
  11. anaconda windows theano keras 完全安装教程,没有gpu忽略那段话也成功了
  12. c++ 多线程 垃圾回收器_新一代垃圾回收器ZGC的探索与实践
  13. python请输入星期几的第一个_python如何获取星期几
  14. CNC编程工程师如何炼成?要哪些必备技能?
  15. 2021年电工(初级)考试试卷及电工(初级)考试平台
  16. NCURSES程序设计之魔数方阵
  17. Xcode使用githut做代码版本管理
  18. YOLO-Pose: Enhancing YOLO for Multi Person Pose Estimation Using Object Keypoint Similarity Loss 笔记
  19. rust写操作系统 rCore tutorial 学习笔记:实验指导零 创建项目与启动
  20. R语言使用rnorm函数生成正太分布数据、使用boxplot函数可视化箱图、中间黑线为中位数位置、上下框线为上下四分位数位置、上下触须为1.5倍四分位数间距、如果有孤立点表示异常值

热门文章

  1. 编程一定要有坚定的信仰!
  2. 计算机硬盘与软盘知识资料,计算机软盘和硬盘词汇
  3. Day06- 认识列表、获取元素
  4. Winpython环境下mayavi配置
  5. Java继承相关练习
  6. HTTP请求错误状态码大全(HTTP Status Code)
  7. openwrt 下调试实现wifi 开启/关闭及设置指示灯
  8. 深度评测 Acer 掠夺者刀锋500SE 2021 怎么样
  9. python杨辉三角代码,python实现杨辉三角的几种方法代码实例
  10. linux大文件分区工具,磁盘分区工具 GParted