您好,欢迎访问代理记账网站
  • 价格透明
  • 信息保密
  • 进度掌控
  • 售后无忧

python笔记--使用solve算出黄金分割比近似值

参考百度百科: 黄金分割是指将整体一分为二,较大部分与整体部分的比值等于较小部分与较大部分的比值,其比值约为0.618。 这个比例被公认为是最能引起美感的比例,因此被称为黄金分割。

因此列方程: (设x为较大部分, y为较小部分)

其中: x + y = 1

使用python解决问题时要先下载sympy模块, 复制下面命令进入cmd中

py -m pip install sympy -i https://pypi.douban.com/simple/

若要提示你更新pip包, 复制下面命令:

py -m pip install --upgrade pip -i https://pypi.douban.com/simple/

 

1. 导入sympy模块与math模块:

import sympy as sp
from math import *

2. 定义两个符号变量x, y

x, y = sp.symbols('x y')

3. 定义方程组: (要注意转换成 '表达式=0' 的形式, 我们取左边的表达式参与运算即可)

fx = x / (x + y) - y / x
fx2 = x + y - 1

4. 使用solve解方程:

result_list = sp.solve([fx, fx2], [x, y])

5. 我们打印看看结果是什么:

print(result_list)

结果如下:

[(-1/2 + sqrt(5)/2, 3/2 - sqrt(5)/2), (-sqrt(5)/2 - 1/2, sqrt(5)/2 + 3/2)]

其中对于每一个元组来说左边部分为x的值, 右边部分为y的值, 我们尝试使用math模块把他转换成小数形式:

x1 = eval(str(result_list[0][0]))
y1 = eval(str(result_list[0][1]))
x2 = eval(str(result_list[1][0]))
y2 = eval(str(result_list[1][1]))

输出打印结果:

print(f'x1={x1}')
print(f'y1={y1}')
print(f'x2={x2}')
print(f'y2={y2}')

结果为:

x1=0.6180339887498949
y1=0.3819660112501051
x2=-1.618033988749895
y2=2.618033988749895

又因为x与y都大于0, 所以要增加下面代码:

result = [(x1, y1), (x2, y2)]
for x, y in result:
    if x > 0 and y > 0:
        print('满足条件的值:')
        print(f'x={x}')
        print(f'y={y}')
最终结果为:
满足条件的值:
x=0.6180339887498949
y=0.3819660112501051

6. 所用代码如下:

import sympy as sp
from math import *

x, y = sp.symbols('x y')
fx = x / (x + y) - y / x
fx2 = x + y - 1
result_list = sp.solve([fx, fx2], [x, y])
print(result_list)
x1 = eval(str(result_list[0][0]))
y1 = eval(str(result_list[0][1]))
x2 = eval(str(result_list[1][0]))
y2 = eval(str(result_list[1][1]))
print(f'x1={x1}')
print(f'y1={y1}')
print(f'x2={x2}')
print(f'y2={y2}')
result = [(x1, y1), (x2, y2)]
for x, y in result:
    if x > 0 and y > 0:
        print('满足条件的值:')
        print(f'x={x}')
        print(f'y={y}')

我是刚刚学习的, 所以思路可能就显得非常乱, 请多多包含-_-


分享:

低价透明

统一报价,无隐形消费

金牌服务

一对一专属顾问7*24小时金牌服务

信息保密

个人信息安全有保障

售后无忧

服务出问题客服经理全程跟进