一,介绍
积分的简介
积分是一种添加切片以找到整体的方法。积分可用于查找区域、体积、中心点和许多有用的东西。但是,最简单的方法是从找到函数和 x 轴之间的区域开始,如下所示:
1.面积是什么?是片
我们可以在几个点上计算函数,并像这样将宽度 Δx 的切片相加(但答案不是很准确):
我们可以使 Δx 小得多,并添加许多小切片(答案越来越好):
当切片的宽度接近于零时,答案就接近真正的答案。我们现在将 dx 写为表示 Δx 切片的宽度接近于零。
这就是积分的基本概念。
接下来用manim实现一下改内容
二,get_riemann_rectangles()
是 Manim 中用于生成 Riemann 矩形图的函数
-
get_riemann_rectangles(graph, x_range=None, dx=0.1, input_sample_type='left',
-
stroke_width=1, stroke_color=ManimColor('#000000'), fill_opacity=1, color=
-
(ManimColor('#58C4DD'), ManimColor('#83C167')), show_signed_area=True,
-
bounded_graph=None, blend=False, width_scale_factor=1.001)
get_riemann_rectangles()
是 Manim 中用于生成 Riemann 矩形图的函数,通常用于教学或可视化数学概念,如积分、面积的计算等。以下是对该函数及其参数的详细解释:
函数功能
该函数生成一组矩形,表示在给定的曲线下的 Riemann 积分近似。矩形的高度由曲线在指定范围内的值决定,宽度由 dx
参数确定。
参数解释
-
graph:
- 描述要绘制的曲线或函数的 Mobject(如
FunctionGraph
对象)。
- 描述要绘制的曲线或函数的 Mobject(如
-
x_range:
- 矩形的 x 轴范围,通常是一个元组,例如
(xmin, xmax)
。若为None
,将使用图形的默认范围。
- 矩形的 x 轴范围,通常是一个元组,例如
-
dx:
- 矩形的宽度,设置每个矩形在 x 轴上的宽度。默认值为
0.1
。
- 矩形的宽度,设置每个矩形在 x 轴上的宽度。默认值为
-
input_sample_type:
- 确定在
dx
范围内采用哪种高度采样方式。可以是:-
'left'
: 使用左端点作为矩形高度。 -
'right'
: 使用右端点作为矩形高度。 -
'mid'
: 使用区间中点作为矩形高度。
-
- 确定在
-
stroke_width:
- 矩形边缘的宽度,默认
1
。
- 矩形边缘的宽度,默认
-
stroke_color:
- 矩形边缘颜色,使用
ManimColor
对象定义,默认是黑色 ('#000000'
)。
- 矩形边缘颜色,使用
-
fill_opacity:
- 矩形填充透明度,取值范围
0
(完全透明)到1
(完全不透明),默认1
。
- 矩形填充透明度,取值范围
-
color:
- 矩形填充的颜色,允许使用一个颜色元组来绘制具有不同渐变色的矩形,默认是
(ManimColor('#58C4DD'), ManimColor('#83C167'))
。
- 矩形填充的颜色,允许使用一个颜色元组来绘制具有不同渐变色的矩形,默认是
-
show_signed_area:
- 布尔值,决定是否显示有符号的面积。默认
True
,表示会根据曲线位置决定矩形的填充方向。
- 布尔值,决定是否显示有符号的面积。默认
-
bounded_graph:
- 可选参数,用于限制矩形的绘制范围,可以提供另一个图形对象。
- blend:
- 布尔值,决定是否平滑填充的矩形。默认为
False
。
- width_scale_factor:
- 用于更改矩形宽度的比例因子,默认值
1.001
,常用于避免矩形之间的重叠。
示例1:
-
from manim import *
-
-
class GetAreaExample000(Scene):
-
def construct(self):
-
.background_color = WHITE
-
ax = Axes().add_coordinates().set_color(PURPLE)
-
curve = (lambda x: 2*(x*x*x)+(x**2)/9+x/4+2, x_range=[-2, 2], color=BLACK)
-
area = ax.get_area(
-
curve,
-
x_range=(-1.5, 1),
-
color=(BLUE, GREEN_D),
-
opacity=0.2,
-
)
-
# 创建 Riemann 矩形
-
riemann_rects = ax.get_riemann_rectangles(
-
curve,
-
x_range=[-1.5, 1],
-
dx=0.5,
-
input_sample_type='left',
-
stroke_color=WHITE,
-
fill_opacity=0.85,
-
color=(GREEN,RED ),
-
#fill_opacity=0.5,
-
show_signed_area=True
-
)
-
text=MathTex(r"f(x)",color=BLACK).shift(2*LEFT+2*DOWN)
-
y_label = ax.get_y_axis_label("y").set_color(BLACK)
-
x_label = ax.get_x_axis_label("x").set_color(BLACK)
-
grid_labels = VGroup(x_label, y_label)
-
(ax, curve, area,grid_labels,riemann_rects,text)
运行结果:
示例2:
-
from manim import *
-
-
class GetAreaExample0001(Scene):
-
def construct(self):
-
.background_color = WHITE
-
ax = Axes().add_coordinates().set_color(PURPLE)
-
curve = (lambda x: 2*(x*x*x)+(x**2)/9+x/4+2, x_range=[-2, 2], color=BLACK)
-
area = ax.get_area(
-
curve,
-
x_range=(-1.5, 1),
-
color=(BLUE, GREEN_D),
-
opacity=0.2,
-
)
-
# 创建 Riemann 矩形
-
riemann_rects = ax.get_riemann_rectangles(
-
curve,
-
x_range=[-1.5, 1],
-
dx=0.15,
-
input_sample_type='left',
-
stroke_color=WHITE,
-
fill_opacity=0.85,
-
color=(GREEN,RED ),
-
#fill_opacity=0.5,
-
show_signed_area=True
-
)
-
text=MathTex(r"f(x)",color=BLACK).shift(2*LEFT+2*DOWN)
-
y_label = ax.get_y_axis_label("y").set_color(BLACK)
-
x_label = ax.get_x_axis_label("x").set_color(BLACK)
-
grid_labels = VGroup(x_label, y_label)
-
(ax, curve, area,grid_labels,riemann_rects,text)
运行结果:
示例3:
-
from manim import *
-
-
class GetAreaExample0002(Scene):
-
def construct(self):
-
.background_color = WHITE
-
ax = Axes().add_coordinates().set_color(PURPLE)
-
curve = (lambda x: 2*(x*x*x)+(x**2)/9+x/4+2, x_range=[-2, 2], color=BLACK)
-
area = ax.get_area(
-
curve,
-
x_range=(-1.5, 1),
-
color=(BLUE, GREEN_D),
-
opacity=0.2,
-
)
-
# 创建 Riemann 矩形
-
riemann_rects = ax.get_riemann_rectangles(
-
curve,
-
x_range=[-1.5, 1],
-
dx=0.05,
-
input_sample_type='left',
-
stroke_color=RED,
-
fill_opacity=1,
-
color=(RED,RED_E ),
-
#fill_opacity=0.5,
-
show_signed_area=True
-
)
-
text=MathTex(r"f(x)",color=BLACK).shift(2*LEFT+2*DOWN)
-
y_label = ax.get_y_axis_label("y").set_color(BLACK)
-
x_label = ax.get_x_axis_label("x").set_color(BLACK)
-
grid_labels = VGroup(x_label, y_label)
-
(ax, curve, area,grid_labels,riemann_rects,text)
运行结果:
示例4:
-
class GetRiemannRectanglesExample(Scene):
-
def construct(self):
-
.background_color = WHITE
-
ax = Axes(y_range=[-2, 10]).add_coordinates().set_color(PURPLE)
-
quadratic = (lambda x: 0.5 * x ** 2 - 1.5,color=BLACK)
-
-
-
rects_right = ax.get_riemann_rectangles(
-
quadratic,
-
x_range=[-4.5, -3],
-
dx=0.75,
-
color=(TEAL, BLUE_B, DARK_BLUE),
-
input_sample_type="right",
-
)
-
-
-
rects_left01 = ax.get_riemann_rectangles(quadratic, x_range=[-2.5, 0], dx=0.15, color=YELLOW)
-
rects_left02 = ax.get_riemann_rectangles(quadratic, x_range=[0, 2.5], dx=0.05, color=GREEN)
-
-
bounding_line = (lambda x: 1.5 * x, color=BLUE_B, x_range=[3.85, 6]).set_color(RED)
-
bounded_rects = ax.get_riemann_rectangles(
-
bounding_line,
-
bounded_graph=quadratic,
-
dx=0.1,
-
x_range=[4, 5],
-
show_signed_area=False,
-
color=(YELLOW,YELLOW_E),
-
)
-
-
(
-
ax, bounding_line, quadratic, rects_right, rects_left01,rects_left02, bounded_rects
-
)
运行结果: