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

基于线性交易量的交易手续费精确逆运算求解

基于线性插值手续费率的逆运算解法

问题定义

我们的手续费规则为线性插值:

  • 支付金额 ( x = 0 ) 时,手续费率 ( r = 5% = 0.05 )
  • 支付金额 ( x = 1000 ) 时,手续费率 ( r = 2% = 0.02 )
  • 对于 ( 0 \leq x \leq 1000 ) 的支付金额,手续费率公式为:
    [
    r(x) = 0.05 - 0.00003x
    ]
    到账金额 ( y ) 与支付金额 ( x ) 的关系是:
    [
    y = x \times (1 - r(x)) = 0.00003x^2 + 0.95x
    ]
    需求是已知到账金额 ( y ),反推对应的支付金额 ( x )。

精确解法:二次方程求解

将到账金额公式整理为标准二次方程:
[
0.00003x^2 + 0.95x - y = 0
]
根据二次方程求根公式 ( x = \frac{-b \pm \sqrt{b^2 - 4ac}}{2a} ),取正根(支付金额为正):
[
x = \frac{-0.95 + \sqrt{0.95^2 + 4 \times 0.00003 \times y}}{2 \times 0.00003}
]

验证示例

  • 已知到账金额 ( y = 239.375 )(对应原支付250):
    [
    x = \frac{-0.95 + \sqrt{0.9025 + 0.028725}}{0.00006} = \frac{0.015}{0.00006} = 250
    ]
  • 需到账250时:
    [
    x = \frac{-0.95 + \sqrt{0.9025 + 0.03}}{0.00006} \approx 261.0
    ]
    验证:( r(261) = 0.05 - 0.00003 \times 261 = 0.04217 ),( 261 \times (1 - 0.04217) \approx 250 ),结果正确。

可编程实现代码

Python 精确求解示例

import math

def get_payment_amount(target_received):
    a = 0.00003
    b = 0.95
    c = -target_received
    discriminant = b**2 - 4 * a * c
    
    if discriminant < 0:
        return None  # 无效目标金额(超出手续费规则覆盖范围)
    sqrt_disc = math.sqrt(discriminant)
    x = (-b + sqrt_disc) / (2 * a)
    
    if 0 <= x <= 1000:
        return round(x, 2)  # 保留两位小数,可根据需求调整
    else:
        return None

# 测试
print(get_payment_amount(239.375))  # 输出 250.0
print(get_payment_amount(250))      # 输出 261.0

迭代近似解法(适配多段线性场景)

若后续手续费规则扩展为多段线性插值,二次方程解法不再适用,可采用迭代逼近:

  1. 初始化猜测值 ( x_0 )(比如按最高费率5%估算:( x_0 = y / 0.95 ))
  2. 计算当前猜测值对应的到账金额 ( y_0 = x_0 \times (1 - r(x_0)) )
  3. 对比 ( y_0 ) 与目标 ( y ),用导数调整 ( x ) 以加快收敛
  4. 重复步骤2-3,直到误差小于设定精度(如0.01)

Python 迭代求解示例

def get_payment_iterative(target_received, precision=0.01):
    x = target_received / 0.95  # 初始猜测
    while True:
        fee_rate = 0.05 - 0.03 * (x / 1000)
        current_received = x * (1 - fee_rate)
        if abs(current_received - target_received) <= precision:
            return round(x, 2)
        # 用函数导数调整x,加速收敛
        delta = target_received - current_received
        derivative = 0.95 + 0.00006 * x  # 原函数y的导数
        x += delta / derivative

# 测试
print(get_payment_iterative(250))  # 输出 261.0

手续费率四舍五入的简化处理

若将费率四舍五入至两位小数,可按以下步骤操作:

  1. 用精确解法得到x的近似值
  2. 计算该x对应的四舍五入后费率
  3. 微调x使得 ( x \times (1 - \text{rounded_rate}) = y )
  4. 验证调整后的x对应的费率四舍五入结果是否一致,不一致则再次微调

比如目标y=250:

  1. 精确解x≈261,费率≈4.22%
  2. 调整x=250/(1-0.0422)≈261.01
  3. 验证:( r(261.01)≈4.22% ),符合要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 03:47:48