当前位置: 首页 > article >正文

python黄金分割数

1/ 黄金分割数

黄金分割数 golden_ratio
黄金比例,又称黄金分割,是一个数学常数,一般以希腊字母 ϕ \phi ϕ表示。
代数式定义:

ϕ = a + b a = 1 + b a = a b \phi=\frac{a+b}{a}=1+\frac{b}{a}=\frac{a}{b} ϕ=aa+b=1+ab=ba

1 ϕ = ϕ − 1 = Φ \frac{1}{\phi}=\phi -1=Φ ϕ1=ϕ1=Φ

1 + b a = 1 + 1 ϕ = ϕ 1+\frac{b}{a}=1+\frac{1}{\phi}=\phi 1+ab=1+ϕ1=ϕ

ϕ = = 1 + 5 2 ≈ 1.618 \phi==\frac{1+\sqrt5}{2}≈1.618 ϕ==21+5 1.618 (负舍)

Φ ≈ 0.618 Φ≈0.618 Φ0.618

2/ 贵金属分割

贵金属分割连分数:
n + 1 n + 1 n + 1 n + 1 . . . n+\frac{1}{n+\frac{1}{n+\frac{1}{n+\frac{1}{...}}}} n+n+n+n+...1111
n=1 黄金分割 1 + 5 2 \frac{1+\sqrt5}{2} 21+5
n=2 白银分割 1 + 2 1+\sqrt2 1+2
n=3 青铜分割 3 + 1 3 2 \frac{3+\sqrt13}{2} 23+1 3

3/ 计算分割数

计算 ϕ \phi ϕ ϕ = 1 + 5 2 \phi = \frac{1 + \sqrt{5}}{2} ϕ=21+5

import decimal

# 设置精度
decimal.getcontext().prec = 110  # 适当增加精度以确保计算准确

# 计算黄金分割数
sqrt_5 = decimal.Decimal(5).sqrt()
phi = (decimal.Decimal(1) + sqrt_5) / decimal.Decimal(2)

# 输出结果,精确到小数点后100位
print(f"{phi:.100f}")
# 1.6180339887498948482045868343656381177203091798057628621354486227052604628189024497072072041893911375

计算 Φ, Φ = 1 1 + Φ Φ = \frac{1}{1 + {Φ}} Φ=1+Φ1

fài = 1.0
for i in range(100):
    fài = 1 / (1 + fài)
print("{:.3f}".format(fài)) # 0.618
print("{:.4f}".format(fài)) # 0.6180
print("{:.5f}".format(fài)) # 0.61803
print("{:.7f}".format(fài)) # 0.6180340
"""
def golden_ratio(depth):
    fài = 1.0
    for i in range(depth):
        fài = 1 / (1 + fài)
    return fài
depth = 100 # 设置迭代深度
print(f"Golden ratio (approximated to depth {depth}): {golden_ratio(depth)}")
# Golden ratio (approximated to depth 100): 0.6180339887498948
"""

精确到小数点后百位

import decimal
decimal.getcontext().prec = 110  # 适当增加精度以确保计算准确
phi = decimal.Decimal(1)
for _ in range(100):
    phi = 1 / (1 + phi)
print(f"{phi:.100f}") # 输出结果,精确到小数点后100位
#0.6180339887498948482045868343656381177203096998094118264936291294152016354093729191617385189497190563

4/ 画黄金螺旋

r = a e b θ r = a e^{b \theta} r=aebθ
在黄金螺旋中,比例常数 b ≈ ln ⁡ ( θ ) 90 \frac{\ln(\theta)}{90} 90ln(θ) θ \theta θ 是黄金分割数(约为1.618)。
在这里插入图片描述

import numpy as np
import matplotlib.pyplot as plt

# 黄金分割数
phi = (1 + np.sqrt(5)) / 2

# 定义参数
a = 0.1  # 可以调整螺旋的起始半径
n_points = 1000  # 点的数量
theta = np.linspace(0, 4 * np.pi, n_points)  # 角度

# 计算 r
r = a * np.exp(np.log(phi) * theta / (np.pi / 2))

# 转换到笛卡尔坐标
x = r * np.cos(theta)
y = r * np.sin(theta)

# 绘制图形
plt.figure(figsize=(8, 8))
plt.plot(x, y)
plt.title('Goldene Spirale')
plt.axis('equal')
plt.grid()
plt.show()

http://www.kler.cn/a/292095.html

相关文章:

  • L11.【LeetCode笔记】有效的括号
  • 终端快捷键学习笔记
  • pytest在conftest.py中实现用例执行失败进行截图并附到allure测试报告
  • w~视觉~合集23
  • Python学习------第八天
  • Python调用API翻译Excel中的英语句子并回填数据
  • 华为达芬奇人像引擎2.0,人像体验有哪些升级
  • 计算机毕业设计选题推荐-客栈管理系统-酒店预订-民宿管理系统-Java/Python项目实战
  • IDEA 2024最新软件下载
  • HarmonyOS开发实战( Beta5版)线程间通信场景最佳实践
  • linux curl命令介绍以及使用
  • React 通用后台管理项目
  • 消息队列RabbitMQ
  • 第8讲 ,ISP 串口程序下载
  • C# 字符串(String)使用教程
  • LeetCode2.两数相加
  • Monorepo学习笔记
  • react 子组件调用父组件方法,获取的数据不是最新值
  • 常用网络协议理解
  • 加锁造成的线程优先级反转
  • 搜维尔科技:使用Facewaer面部捕捉系统制作栩栩如生的脸部动画
  • Maven 的 pom.xml 文件中<dependency> 元素及其各个参数的解释
  • EmguCV学习笔记 C# 10.1 人脸检测 CascadeClassifier类
  • C语言猜数小游戏
  • SpringBoot2:请求处理原理分析-请求Path与接口的映射关系(HandlerMapping)
  • 51单片机——蜂鸣器