我正在尝试使用积分计算图表的面积。
用户应该给我3个号码:
然而,我的结果却一直不错。
我遇到的第一个困难是范围只接受整数。
另外z=(x2-x1)/N
如果我尝试使它成为一个浮点数,我不能让它继续前进,我不会让它浮动它接近零,所以Python向我显示错误,该步骤是零。
另外,我如何总结(z*(f(i)+f(i+z)/2)
?
这是我的代码:
# -*- coding: UTF-8 -*-
import math
def f(x) :
y = (-1/6.0)*(x-1)*(x-2)*(x+2)*(x-4)
return y
x1=int(raw_input ('Δωστε το χ1 οπου αρχιζει η μετρηση του ολοκληρωματος \n ')) #greek letters
x2=int(raw_input ('Δωστε χ2 οπου θελετε να ολοκληρωνεται η μετρηση \n '))
N=int(raw_input('Δωστε τον αριθμο n που θα ειναι το πληθος \n των τραπεζιων που θα χρησιμοπιουνται στη προσσεγγιση \n '))
z=(x2-x1)/N
for i in range(x1,x2,z):
z=float(z)
x1=float(x1)
x2=float(x2)
print (z*(f(i)+f(i+z))/2)
答案 0 :(得分:6)
您正在阅读x1
,将其转换为int
(读取:丢弃信息),然后在每次迭代时将其转换回浮点数。丢失的信息不会再出现。
z=(x2-x1)/N
因为你的值是整数,所以它将执行整数除法,即如果N> (x2 - x1),z
将为零。由于您总是希望选择较大的N
,z
始终为零。
因此,range()
不能起作用。
您需要做的是将输入读作浮点数:
number = float(raw_input("Please enter a number: "))
请注意,重复应用float()
并没有做任何有用的事情。因此,此代码不是必需的:
for ...
z=float(z)
x1=float(x1)
x2=float(x2)
另外我如何总结(z *(f(i)+ f(i + z)/ 2)?
你不能缩短它,因为f()
不是线性函数。
range()
的另一个问题是,step参数必须是整数。
您可以轻松创建自己的范围功能:
def frange(start, stop, steps):
x = start
difference = float(stop - start)
for step in range(0, steps):
next_x = start + difference * (1 + step) / steps
yield x, next_x - x
x = next_x
# -*- coding: UTF-8 -*-
import math
def f(x) :
y = (-1/6.0)*(x-1)*(x-2)*(x+2)*(x-4)
return y
x1 = float(raw_input ('Δωστε το χ1 οπου αρχιζει η μετρηση του ολοκληρωματος \n ')) #greek letters
x2 = float(raw_input ('Δωστε χ2 οπου θελετε να ολοκληρωνεται η μετρηση \n '))
N = int(raw_input('Δωστε τον αριθμο n που θα ειναι το πληθος \n των τραπεζιων που θα χρησιμοπιουνται στη προσσεγγιση \n '))
result = 0
for x, delta_x in frange(x1, x2, N):
result += delta_x * (f(x)+f(x+delta_x)) / 2
print result
答案 1 :(得分:2)
x1
,x2
,因此步长z
是浮动的。for
- 循环,while
- 循环可能更容易。x1 = float(raw_input ('Δωστε το χ1 οπου αρχιζει η μετρηση του ολοκληρωματος \n ')) #greek letters
x2 = float(raw_input ('Δωστε χ2 οπου θελετε να ολοκληρωνεται η μετρηση \n '))
N = int(raw_input('Δωστε τον αριθμο n που θα ειναι το πληθος \n των τραπεζιων που θα χρησιμοπιουνται στη προσσεγγιση \n '))
z = (x2-x1)/N
x = x1
while x < x2:
print (z*(f(x)+f(x+z))/2)
x += z