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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

镜花照无眠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值