You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何提升Python迭代计算代码精度以复现数学点云图?

迭代函数点云绘制的问题修复

你遇到的核心问题并非单纯的精度不足,而是变量更新顺序错误:计算新的y时,你使用了已经更新过的x值,而非迭代前的原始x,这直接导致迭代逻辑偏离原公式,进而提前进入循环。此外,可通过提升数值精度进一步避免舍入误差。

修复步骤

1. 修正变量更新顺序

迭代时需要先保存原始的x和y值,再用原始值计算新的x和y:

import matplotlib.pyplot as plt

x = 0.0
y = 0.0
vecx = []
vecy = []

for i in range(5000):
    # 保存当前迭代的原始x、y值
    old_x = x
    old_y = y
    # 用原始值计算新的x和y
    x = 1.3 + 0.3*old_x + 0.6*old_x*old_y - 0.6*old_y - old_y**2
    y = 0.1 - 0.7*old_x + 0.5*(old_x**2) - 0.8*old_x*old_y + 0.1*old_y - 0.6*(old_y**2)
    vecx.append(x)
    vecy.append(y)
    
plt.plot(vecx, vecy, 'b.', markersize=1)
plt.show()

2. 提升数值精度(可选)

如果仍担心舍入误差,可使用Python的decimal模块设置更高精度的浮点数计算:

import matplotlib.pyplot as plt
from decimal import Decimal, getcontext

# 设置精度为50位小数
getcontext().prec = 50

x = Decimal('0.0')
y = Decimal('0.0')
vecx = []
vecy = []

for i in range(5000):
    old_x = x
    old_y = y
    x = Decimal('1.3') + Decimal('0.3')*old_x + Decimal('0.6')*old_x*old_y - Decimal('0.6')*old_y - old_y**2
    y = Decimal('0.1') - Decimal('0.7')*old_x + Decimal('0.5')*(old_x**2) - Decimal('0.8')*old_x*old_y + Decimal('0.1')*old_y - Decimal('0.6')*(old_y**2)
    vecx.append(float(x))
    vecy.append(float(y))
    
plt.plot(vecx, vecy, 'b.', markersize=1)
plt.show()

说明

修正变量更新顺序后,迭代逻辑将严格遵循原公式,即可生成预期的复杂点云。decimal模块的高精度计算可进一步减少迭代过程中的舍入误差,适合对精度要求极高的场景。

内容的提问来源于stack exchange,提问作者Dessie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 06:29:59