python高次方程求根公式_Python退火算法在高次方程的应用

退火算法就是钢铁在淬炼过程中失温而成稳定态时的过程,热力学上温度(内能)越高原子态越不稳定。这篇文章主要介绍了Python退火算法在高次方程的应用,需要的朋友可以参考下

文章目录

一,简介

二,计算方程

三,总结

一,简介

退火算法不言而喻,就是钢铁在淬炼过程中失温而成稳定态时的过程,热力学上温度(内能)越高原子态越不稳定,而温度有一个向低温区辐射降温的物理过程,当物质内能不再降低时候该物质原子态逐渐成为稳定有序态,这对我们从随机复杂问题中找出最优解有一定借鉴意义,将这个过程化为算法,具体参见其他资料。

二,计算方程

我们所要计算的方程是f(x) = (x - 2) * (x + 3) * (x + 8) * (x - 9),是一个一元四次方程,我们称为高次方程,当然这个函数的开口是向上的,那么在一个无限长的区间内我们可能找不出最大值点,因此我们尝试在较短区间内解最小值点,我们成为最优解。

解法一:毫无疑问,数学方法多次求导基本可以解出,但是这个过程较复杂,还容易算错,我就不赘述了,读者有时间自己可以尝试解一下。

解法二:这个解法就是暴力解决了,我们这里只求解区间[-10,10]上的最优解,直接随机200个点,再除以10(这样可以得到非整数横坐标),再依此计算其纵坐标f(x),min{f(x)}一下,用list的index方法找出最小值对应位置就行了,然后画出图形大致瞄一瞄。

直接贴代码:

import random

import matplotlib.pyplot as plt

list_x = []

# for i in range(1):

#   #print(random.randint(0,100))

#   for i in range(0,100):

#     print("sss",i)

#

#   list_x.append(random.randint(0,100))

for i in range(-100,100):

list_x.append(i/10)

print("横坐标为:",list_x)

print(len(list_x))

list_y = []

for x in list_x:

# print(x)

#y = x*x*x - 60*x*x -4*x +6

y = (x - 2) * (x + 3) * (x + 8) * (x - 9)

list_y.append(y)

print("纵坐标为:",list_y)

#经验证,这里算出来的结果6.5和最优解1549都是对的

print("最小值为:",min(list_y))

num = min(list_y)

print("最优解:",list_y.index(num)/10)

print("第",list_y.index(num)/10-10,"个位置取得最小值")

plt.plot(list_x, list_y, label='NM')

#plt.plot(x2, y2, label='Second Line')

plt.xlabel('X') #横坐标标题

plt.ylabel('Y') #纵坐标标题

#plt.title('Interesting Graph\nCheck it out',loc="right")  #图像标题

#plt.title('Interesting Graph\nCheck it out')

plt.legend(Swift Codehttps://www.gendan5.com/swiftcode.html

plt.legend()  #显示Fisrt Line和Second Line(label)的设置

plt.savefig('C:/Users/zhengyong/Desktop/1.png')

plt.show()

得到如下结果:

那么我们得出最优解的坐标是(6.5,-1549.6875)


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部