我无法从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
。这实际上是实际面积,但那只是因为我们使用的公式。对于非线性公式,由于顶部“线”的性质,会有不准确的地方。具体来说,在你的例子中,抛物线是弯曲的。
但这些不准确度越来越少,你使用越来越薄的切片,因为任何一条直线倾向于直线(线性)当你缩短它。在上面的例子中,如果你把它分成两个部分,那么总的面积是
12
和5.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/