【问题标题】:Convert Mathematical Formula into Python Code将数学公式转换为 Python 代码
【发布时间】:2021-05-20 19:53:36
【问题描述】:

我有这些数学方程式,我必须将它们转换成 Python 代码。我已经尝试了几个小时,但无法得到正确的结果。 以下是我目前编写的数学方程及其代码。

class Mortgage:
    def __init__(self,L,Y,p,k):
        self.L = L
        self.Y = Y
        self.p = p
        self.k = k
        self.equation1()
    def equation1(self):
        self.p = self.L * ((1 + (self.p/365)) ** (365 * self.Y))
        p2 =(((1 + (self.p/365)) ** (self.k)) - 1) / (((1 + (self.p/365)) ** (365 * self.Y)) -1)
        print(p2)
        self.p *= p2
    def equation2(self,n):
        self.b = self.L * ((1 + (self.p/365)) ** (365 * n))
        b1 = ((1 + self.p/365) ** (365 * n)) -1
        b2 = ((1 + self.p/365) ** (self.k)) -1
        b3 = b1/b2
        p = self.p * b3
        self.b -= p
    def show_outputs(self):
        n = 0
        b = self.equation2(n)
        x = []
        y = []
        y.append(b)
        x.append(0)
        while b > 0:
            n += 1
            b = self.equation2(n)
            x.append(n)
            y.append(b)
        print(x)
        print(y)

m = Mortgage(200000, 10, 4.8, 14)
m.show_outputs()

现在,当我创建上述类的对象并执行程序时,我收到以下错误:

**OverflowError: (34, 'Result too large')**

我们将不胜感激!

【问题讨论】:

  • 请修正缩进,并提供实际调用该方法的代码。
  • 请注意,在等式1 中,您使用语句 self.p = self.L * ((1 + (self.p/365)) ** (365 * self.Y)) 覆盖 self.p 的值,并再次使用语句 self.p *= p2
  • @trincot 我已经更新了代码。你能再回顾一下吗?谢谢!
  • 请注意,在方程 2 中,方程的结果应随着 n 的增加而减小。但方程式并没有这样做..

标签: python python-3.x math syntax equation


【解决方案1】:

制作一个中间变量来获取每日利息项会更容易,因此您不会对所有括号感到困惑。但最重要的问题是你用还款额覆盖了利率(self.p),所以这需要是类中的一个不同字段:

class Mortgage:
    def __init__(self,L,Y,p,k):
        self.L = L
        self.Y = Y
        self.p = p
        self.k = k
        self.rpy = L # temporary value
        self.equation1()
    def equation1(self):
        dy_int = 1 + (self.p/365)
        self.rpy = self.L * dy_int ** (365 * self.Y)
        p2 = (dy_int ** self.k  - 1) / (dy_int ** (365 * self.Y) -1)
        self.rpy *= p2

另外,根据我对数值的解读,p 是一个比例,而不是百分比,所以 5% 的利息将有 p == 0.05

相比之下,Bn 并不是该类真正固有的,因此它应该返回一个值而不是更新状态:

    def equation2(self,n):
        dy_int = 1 + (self.p/365)
        bn = self.L * dy_int ** (365 * n)
        b1 = dy_int ** (365 * n) - 1
        b2 = dy_int ** self.k - 1
        b3 = b1/b2
        bn -= self.rpy * b3
        return bn
    def show_outputs(self):
        x = []
        for n in range(self.Y+1):
            b = self.equation2(n)
            x.append((n,b))
        print(x)

【讨论】:

  • 我也用调用方法编辑了代码。请注意,等式 2 中的 b 值应随着“n”值的增加而减小。但是代码没有这样做..
  • @SyedZubair 请注意,4.8 作为 p 值是 480% 的利率。
  • @SyedZubair 你的show_outputs 试图从equation2 方法中取回一个值,但这并没有返回任何东西。
  • 在您的帮助下解决了这个问题。只需将利率除以 100 就可以了。
猜你喜欢
  • 1970-01-01
  • 2021-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多