将数学公式转换为 Python 代码
Convert Mathematical Formula into Python Code
我有这些数学方程式,我必须将它们转换成 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()
现在,当我创建上面的对象 class 并执行程序时,出现以下错误:
**OverflowError: (34, 'Result too large')**
在此方面提供一点帮助将不胜感激!
做一个中间变量来取日利息项会更容易,这样你就不会被所有的括号搞糊涂了。但最重要的问题是你用还款金额覆盖了利率 (self.p),所以这需要在 class:
中是一个不同的字段
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 并不是 class 固有的,因此它应该 return 一个值而不是更新状态:
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)
我有这些数学方程式,我必须将它们转换成 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()
现在,当我创建上面的对象 class 并执行程序时,出现以下错误:
**OverflowError: (34, 'Result too large')**
在此方面提供一点帮助将不胜感激!
做一个中间变量来取日利息项会更容易,这样你就不会被所有的括号搞糊涂了。但最重要的问题是你用还款金额覆盖了利率 (self.p),所以这需要在 class:
中是一个不同的字段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 并不是 class 固有的,因此它应该 return 一个值而不是更新状态:
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)