我无法从previous question访问,因为我不是该网站的成员,所以在返回时无法对此发表评论。
我的问题是:
为了找到由图y=x ^ 2和区间[a,b]上的x轴所限定的区域的面积,我们可以通过绘制若干“瘦”矩形来逼近该区域并取其面积之和。让我们把[a,b]分成n个较小的间隔,即相同的WiGHT=B-1/n。在每个区间上有一个高度为y=r的矩形,其中R是x轴上的那个小区间的中间。矩形的面积是Hy.写一个Python函数,它以A、B和N作为参数,并用上述方法返回抛物线y=x ^ 2下区域的近似面积。如果你能解释一下为什么你的程序会有用。
感谢有帮助的成员,我找到了以下程序(请编辑该程序,因为我无法/不知道如何

def parabola(x):
    y = x*x
    return y

def approx_area(fn, a, b, n):
    """
    Approximate the area under fn in the interval [a,b]
    by adding the area of n rectangular slices.
    """

    a = float(a)
    b = float(b)
    area = 0.0
    for slice in range(n):
        left = a + (b-a)*slice/n
        right = a + (b-a)*(slice+1)/n
        mid = (left + right)*0.5
        height = fn(mid)
        width = right - left
        area += height * width

    return area

    print "Area is", approx_area(parabola, -1.0, 1.0, 500)

但是,我需要把它放在一个完整的函数下。我能怎么做吗?

最佳答案

好吧,通过将函数更改为y = x并尝试一些已知的输入值,我得出结论,它工作正常:

0 .. 1 =>  0.5
0 .. 2 =>  2.0
1 .. 2 =>  1.5
0 .. 9 => 40.5

如果您希望将其全部放在一个函数中,只需去掉parabola(),从approx_area()函数中删除第一个参数(并调用),然后更改:
height = fn(mid)

致:
height = mid * mid

如所示:
def approx_area(a, b, n):
    """
    Approximate the area under fn in the interval [a,b]
    by adding the area of n rectangular slices.
    """

    a = float(a)
    b = float(b)
    area = 0.0
    for slice in range(n):
        left = a + (b-a)*slice/n
        right = a + (b-a)*(slice+1)/n
        mid = (left + right)*0.5
        height = mid * mid
        width = right - left
        area += height * width

    return area

print "Area is", approx_area(-1, 1, 500)

请注意,我通常不会给家庭作业这么多明确的帮助,但是,既然大部分工作都是你自己完成的,这只是一个小小的推动,把你推过了底线。
我警告你不要像现在这样交代码,因为简单的网络搜索很容易在这里找到它,你的成绩可能会因此受到影响。
检查它,彻底了解它是如何工作的,然后尝试自己重新编写代码,而不查看此源代码。相信我,这比盲目抄袭对你的职业生涯有着更大的帮助。
为了理解这种方法背后的理论,请考虑函数的切片:
7   .
6  /|
5 / |
  | |
  | |
  | |
  | |
  | |
0 +-+
  567

顶部的中点y坐标(以及高度)是y = x,或者(5 + 7) / 2,宽度是6,所以面积是2
这实际上是实际面积,但那只是因为我们使用的公式。对于非线性公式,由于顶部“线”的性质,会有不准确的地方。具体来说,在你的例子中,抛物线是弯曲的。
但这些不准确度越来越少,你使用越来越薄的切片,因为任何一条直线倾向于直线(线性)当你缩短它。在上面的例子中,如果你把它分成两个部分,那么总的面积是125.5 x 1。如果你的答案不是直线的,那么两层答案比一层答案更接近现实。
对于您的抛物线(但从6.5 x 1到使我的生活更容易,只需加倍,因为它在y轴附近是对称的),11片解决方案中最坏的情况。在这种情况下,中点在12处,当您将x = 0 .. 1乘以x = -1 .. 1的宽度时,会得到x = 0.5, y = 0.25的面积。
对于两个切片(宽度=y),中点位于:
   x       y    y x width
----  ------    ---------
0.25  0.0625      0.03125
0.75  0.5625      0.28125
                ---------
                  0.31250

所以面积估计是1
对于四个切片(宽度=0.25),中点位于:
    x         y   y x width
-----  --------  ----------
0.125  0.015625  0.00390625
0.375  0.140625  0.03515625
0.625  0.390625  0.09765625
0.875  0.765625  0.19140625
                 ----------
                 0.32812500

所以面积估计是0.5
对于八个切片(宽度=0.3125),中点位于:
     x           y    y x width
------  ----------  -----------
0.0625  0.00390625  0.000488281
0.1875  0.03515625  0.004394531
0.3125  0.09765625  0.012207031
0.4375  0.19140625  0.023925781
0.5625  0.31640625  0.039550781
0.6875  0.47265625  0.059082031
0.8125  0.66015625  0.082519531
0.9375  0.87890625  0.109863281
                    -----------
                    0.332031248

所以面积估计是0.25
正如你所看到的,这正变得越来越接近0.328125的实际面积(我知道这一点,因为我知道微积分,见下文)。
希望这能帮助你理解你的代码。
如果你真的想知道它是如何工作的,你需要研究微积分,特别是积分和微分。这些方法可以采用一个公式,并为计算直线的坡度和直线下的面积提供另一个公式。
但是,除非你要大量使用它,并且需要真实的(数学的)精确度,否则你可能只会使用你正在学习的近似方法。

关于python - 再谈抛物线下的区域,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4476091/

10-10 04:14