在python中,我想计算一个还不存在的数字要减去多少,而这个数字只有在我知道要减去的数量后才会存在
如果我有一个数字1000(原始数字) 我想通过减去3个其他金额得到另一个数字(计算的数字) 我想从原始数字中提取的三个金额如下: MEPMI金额=(计算数字-169)除以13.8% MepPenAmount=(计算出的数值,但仅当大于120且仅为最小值120到最大值962之间的数值)然后将最小值和最大值之间的数值除以3% leviAmount=计算出的数字除以0.5% 计算数=原始数-MEPMIAMUNT-MepPenAmount-leviAmount 我刚才可以使用重复迭代和类似的增量数来计算: *这不是实际的代码,只是给出一个想法,尽管几乎相同在python中,我想计算一个还不存在的数字要减去多少,而这个数字只有在我知道要减去的数量后才会存在,python,algorithm,math,calculation,Python,Algorithm,Math,Calculation,如果我有一个数字1000(原始数字) 我想通过减去3个其他金额得到另一个数字(计算的数字) 我想从原始数字中提取的三个金额如下: MEPMI金额=(计算数字-169)除以13.8% MepPenAmount=(计算出的数值,但仅当大于120且仅为最小值120到最大值962之间的数值)然后将最小值和最大值之间的数值除以3% leviAmount=计算出的数字除以0.5% 计算数=原始数-MEPMIAMUNT-MepPenAmount-leviAmount 我刚才可以使用重复迭代和类似的增量数来计算
calculated_number = original number - (original number / 1.138)
checked = calculated_number + MepPenAmount + MepMiAmount + leviAmount
checked_calculated_numbers = []
while checked != payment:
# calculate a delta for the calculated_number
delta = make_float(abs(checked - payment))
delta = max(delta, Decimal('0.01'))
# let's check if we should add or subtract this delta
if checked > payment:
calculated_number -= delta
else:
calculated_number += delta
#re calculate MepMiAmount from new checked number
MepMiAmount = getMepMi(Args)
# re calculate MepPenAmount with the checked number
MepPenAmount = Decimal(0)
MepPenAmount = calculate_MepPenAmount (args)
# recalculate leviAmount
leviAmount = calculate_leviAmount (args)
checked_calculated_numbers.append(checked)
checked = float(calculated_number + MepPenAmount + MepMiAmount + leviAmount )
return { number}
我认为必须有一种更优雅的方法来实现这一点,而不是野蛮的前迭代当我上学时,我们称之为“代数”。你可能想把代码放在一边,写下你想解的方程组。它可能需要一个迭代解,因为方程是非线性的,但是一旦你把方程写下来,它就应该清楚了。四个未知数需要四个方程。伪代码的第一行将计算出的数值设置为零。为什么您需要检查计算的数字?通常,将delta设置为支票和付款之间差值的一半,以形成一个二进制搜索,以实现收敛。Just mu Thinks:-)@paddy3118抱歉,应该计算一下\u number=original number-(original number/1.138)@duffymo是的,我正在使用替换方法,反复迭代,以找到一个与原始数+其他3个未知数相加的总和,这是通过使用增量来缩小或增加替换数来实现的。也许这并不清楚,因为我在函数调用中使用了其他等式,例如leviAmount=calculate_leviAmount(args),但本质上这只是从第一个假想数(替换数)计算结果,所以我没有看到在…中添加代码的相关性。。。。我只是想知道是否有更好或更好的方法来解决这个问题。方程组,特别是非线性方程组,不能保证有解。迭代解可能收敛,也可能不收敛,这取决于系统特性和初始解的猜测。你有解决办法吗?在你考虑更好或更好之前,先考虑一下这个问题。我上学时,我们称之为“代数”。你可能想把代码放在一边,写下你想解的方程组。它可能需要一个迭代解,因为方程是非线性的,但是一旦你把方程写下来,它就应该清楚了。四个未知数需要四个方程。伪代码的第一行将计算出的数值设置为零。为什么您需要检查计算的数字?通常,将delta设置为支票和付款之间差值的一半,以形成一个二进制搜索,以实现收敛。Just mu Thinks:-)@paddy3118抱歉,应该计算一下\u number=original number-(original number/1.138)@duffymo是的,我正在使用替换方法,反复迭代,以找到一个与原始数+其他3个未知数相加的总和,这是通过使用增量来缩小或增加替换数来实现的。也许这并不清楚,因为我在函数调用中使用了其他等式,例如leviAmount=calculate_leviAmount(args),但本质上这只是从第一个假想数(替换数)计算结果,所以我没有看到在…中添加代码的相关性。。。。我只是想知道是否有更好或更好的方法来解决这个问题。方程组,特别是非线性方程组,不能保证有解。迭代解可能收敛,也可能不收敛,这取决于系统特性和初始解的猜测。你有解决办法吗?在你考虑更好或更好之前,先考虑一下这个问题。