我试图使用积分计算图形的面积.
用户应该给我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)
Run Code Online (Sandbox Code Playgroud)
您正在阅读x1,将其转换为int(读取:丢弃信息),然后在每次迭代时将其转换回浮点数.丢失的信息不会再出现.
z=(x2-x1)/N
Run Code Online (Sandbox Code Playgroud)
因为你的值是整数,所以它将执行整数除法,即如果N>(x2 - x1),z则为零.而且既然你总是想选择一个大的N,z总是零.
因此,range()不能不工作.
您需要做的是将输入作为浮点数读取:
number = float(raw_input("Please enter a number: "))
Run Code Online (Sandbox Code Playgroud)
请注意,float()重复应用不会有用.因此,此代码不是必需的:
for ...
z=float(z)
x1=float(x1)
x2=float(x2)
Run Code Online (Sandbox Code Playgroud)
另外我如何总结(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
Run Code Online (Sandbox Code Playgroud)
# -*- 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
Run Code Online (Sandbox Code Playgroud)
x1,x2因此步长z为浮点数。for在这里,使用 -loop代替while-loop 可能更容易。x1 = float(raw_input ('\xce\x94\xcf\x89\xcf\x83\xcf\x84\xce\xb5 \xcf\x84\xce\xbf \xcf\x871 \xce\xbf\xcf\x80\xce\xbf\xcf\x85 \xce\xb1\xcf\x81\xcf\x87\xce\xb9\xce\xb6\xce\xb5\xce\xb9 \xce\xb7 \xce\xbc\xce\xb5\xcf\x84\xcf\x81\xce\xb7\xcf\x83\xce\xb7 \xcf\x84\xce\xbf\xcf\x85 \xce\xbf\xce\xbb\xce\xbf\xce\xba\xce\xbb\xce\xb7\xcf\x81\xcf\x89\xce\xbc\xce\xb1\xcf\x84\xce\xbf\xcf\x82 \\n ')) #greek letters\nx2 = float(raw_input ('\xce\x94\xcf\x89\xcf\x83\xcf\x84\xce\xb5 \xcf\x872 \xce\xbf\xcf\x80\xce\xbf\xcf\x85 \xce\xb8\xce\xb5\xce\xbb\xce\xb5\xcf\x84\xce\xb5 \xce\xbd\xce\xb1 \xce\xbf\xce\xbb\xce\xbf\xce\xba\xce\xbb\xce\xb7\xcf\x81\xcf\x89\xce\xbd\xce\xb5\xcf\x84\xce\xb1\xce\xb9 \xce\xb7 \xce\xbc\xce\xb5\xcf\x84\xcf\x81\xce\xb7\xcf\x83\xce\xb7 \\n '))\nN = int(raw_input('\xce\x94\xcf\x89\xcf\x83\xcf\x84\xce\xb5 \xcf\x84\xce\xbf\xce\xbd \xce\xb1\xcf\x81\xce\xb9\xce\xb8\xce\xbc\xce\xbf n \xcf\x80\xce\xbf\xcf\x85 \xce\xb8\xce\xb1 \xce\xb5\xce\xb9\xce\xbd\xce\xb1\xce\xb9 \xcf\x84\xce\xbf \xcf\x80\xce\xbb\xce\xb7\xce\xb8\xce\xbf\xcf\x82 \\n \xcf\x84\xcf\x89\xce\xbd \xcf\x84\xcf\x81\xce\xb1\xcf\x80\xce\xb5\xce\xb6\xce\xb9\xcf\x89\xce\xbd \xcf\x80\xce\xbf\xcf\x85 \xce\xb8\xce\xb1 \xcf\x87\xcf\x81\xce\xb7\xcf\x83\xce\xb9\xce\xbc\xce\xbf\xcf\x80\xce\xb9\xce\xbf\xcf\x85\xce\xbd\xcf\x84\xce\xb1\xce\xb9 \xcf\x83\xcf\x84\xce\xb7 \xcf\x80\xcf\x81\xce\xbf\xcf\x83\xcf\x83\xce\xb5\xce\xb3\xce\xb3\xce\xb9\xcf\x83\xce\xb7 \\n '))\nz = (x2-x1)/N\nx = x1\nwhile x < x2:\n print (z*(f(x)+f(x+z))/2)\n x += z\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
190 次 |
| 最近记录: |