【问题标题】:Riemann sum python黎曼和python
【发布时间】:2020-06-06 23:55:36
【问题描述】:

我需要创建一个 python 函数,我可以在其中找到具有黎曼和的曲面。这就是我所拥有的,根据我老师的反馈,我非常接近它,但它并没有像我想要的那样正常工作。老师还说了一些关于 try-catch 什么意思我需要做一个额外的代码来控制答案(如果我没有错的话)要找到表面,要求上限和下限以及在线下你想要多少个矩形就像在程序中一样。

(编辑)我做了一个新程序,你们能检查一下是否正确。

import math

def f(x): return math.sqrt(x) #Function in the left!

a = int(input("What is the lowerlimit?:"))
b = int(input("What is the upperlimit?:"))
n = int(input("How many division intervals do you want?:"))

dx = (b-a)/n;

xi = 0;
sum = 0;
for i in range(n):
xi = xi+dx;
sum = sum + f(xi)
print("The surface under the line is ", (sum*dx))

#einde programma!






import math

定义 f(x):

return math.sqrt(x) #左边的函数!

def 肯定输入(消息): 而真: 尝试: c = int(输入(消息))

  if c <= 0:
      raise ValueError

    break

except ValueError:

print("糟糕!那不是有效的号码。再试一次...")

a = positiveinput("下限是多少?:")

b = positiveinput("上限是多少?:")

c = positiveinput("你想要多少个除法间隔?:")

a = int(input("下限是多少?:"))

b = int(input("上限是多少?:"))

c = int(input("你想要多少分割间隔?:"))

dx = float((b-a)/c)

xi = a

总和 = dx

对于范围内的 i(0,c):

xi = a - dx

总和 = 总和 + f(xi)

print("线下的曲面是", (sum*dx))

【问题讨论】:

  • 我认为您的老师的意思是您应该在转换为 int 之前检查输入。因为如果您输入 abc 而不是数字,您的程序将会崩溃
  • “它无法正常工作。”请解释 - 举例说明发生错误的情况,解释发生了什么错误,以及应该发生什么。
  • 小区间偏差过大
  • @EmreEmre 看我的回答,你在低下限出错的原因是因为你没有设置正确的下限。应该是 a 而不是 0

标签: python riemann


【解决方案1】:

上面的代码有几个问题:

1) 最重要的是,你实际上并没有计算出正确的答案,因为你假设下限等于 0。而不是写 xi=0 你应该写 xi=a !!! (请注意,这将使用每个矩形的远端来计算高度 - 如果你想使用下端,并且不想更改任何其他代码,你需要编写 xi = a - dx 所以你从 @987654324 开始@。(话虽如此,我不会这样做,但这是在不更改任何其他内容的情况下解决此问题的方法。

2) 验证错误:您应该检查几件事:

  • ab 的值是有效的数字(注意它们不应该是整数,只是数字)。您可以使用float() 将某些内容转换为数字,就像使用int() 将其转换为整数一样。
  • n 是一个整数且不等于 0,因为当您尝试除以 n 时会引发错误,
  • n 不是负数,因为这会导致您得到错误的值(使用原样的代码)。

话虽如此,我不会按原样编写代码。使用 for 循环然后增加你的值并不是一件非常 Pythonic 的事情。您可能有兴趣了解您实际上可以使用 range 函数指定下限和上限。实验:

for i in range(3,11,0.5):
   print(i)

看看会发生什么。我不会给你一个完整的解决方案,因为这是一个家庭作业,你自己解决它对你最有好处,但希望这能为你指明这些事情会为你指明正确的方向。

【讨论】:

    【解决方案2】:

    正如@Sadap 所说,您可以尝试这样的事情:

    def positiveinput(message):
        while True:
          try:
            n = int(input(message))
            if n <= 0:
              raise ValueError
            break
          except ValueError:
            print("Oops!  That was no valid number.  Try again...")
    
    a = positiveinput("What is the lowerlimit?:")
    b = positiveinput("What is the upperlimit?:")
    n = positiveinput("How many division intervals do you want?:")
    

    以此代码为指导,您可以完成@tim-mccurrach 在此帖子的答案中编写的错误验证列表。您也可以查看link,他们以不同的方式计算黎曼和。有关try-catch 的文档,您可以输入此link

    【讨论】:

    • 虽然这行得通,但这在用户体验方面并不是最佳的,因为最后一次输入中的错误会迫使用户重新开始。
    猜你喜欢
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-26
    • 1970-01-01
    • 2013-07-15
    • 1970-01-01
    相关资源
    最近更新 更多