Python calcula integrales definidas basándose en el principio de integración y visualiza el proceso de animación del cálculo de integrales numéricas


1. Descripción del problema

Hay un problema de la siguiente manera:
Por favor agregue la descripción de la imagen

∫ 0 1 x 3 + 1 = [ 1 4 x 4 + x ] 0 1 = 1,25 \int_{0}^{1} x^{3}+1=\left[\frac{1}{4} x^ {4}+x\derecha]_{0}^{1}=1,2501X3+1=[41X4+x ]01=1 . 2 5


En segundo lugar, la implementación del código.

1. Y calcula el valor de ∫ 0 1 x 3 + 1 según el principio de integración 1. \text { Y calcula según el principio de integración} \int_{0}^{1} x^{3}+1 \text { El valor }1. Y calculado en base al principio de integración  01X3+valor de 1  

def func(x):
    return x ** 3 + 1

down = 0
upper = 1
interval = np.linspace(start=down, stop=upper, num=100)
result = 0
for i in range(0, len(interval) - 1):
    left = interval[i]
    right = interval[i + 1]
    width = right - left
    height = func(left)
    area = width * height
    result += area

print(f"{result:.2f}")

El resultado es el siguiente:

Al tomar 50 rectángulos para calcular la integración numérica, ya se puede obtener el resultado de 1.24.

2. Visualiza el proceso de animación de la integral 2.\text { } Visualiza el proceso de animación de la integral2. Visualiza el proceso de animación de integración _ 

Importe las dependencias requeridas:

import numpy as np
import matplotlib.path as path
import matplotlib.pyplot as plt
import matplotlib.patches as patches
from IPython.display import HTML
from matplotlib.animation import FuncAnimation
import warnings

warnings.filterwarnings("ignore")

Entre ellos, numpy se usa para generar datos de puntos, path se usa para generar rutas y patches se usa para dibujar imágenes a través de conexiones de rutas.

La función de actualización es la siguiente:

# 更新函数
def update(frame):
    global points, verts, codes
        
    # x轴间隔距离  每个bin
    dx = (interval[1] - interval[0]) / bins
    points = np.append(points, [[frame, func(frame)]], axis=0)
    verts = np.append(verts,
                          [[frame, 0], [frame, func(frame)], [frame+dx, func(frame)], [frame+dx, 0]], axis=0)
        ln[0].set_data(list(zip(*points)))

        codes.extend([path.Path.MOVETO] + [path.Path.LINETO] * 3)

        barpath = path.Path(verts, codes)
        patch = patches.PathPatch(barpath,
                                  facecolor='blue',
                                  edgecolor='yellow', alpha=0.6)
        ax.add_patch(patch)

        return patch, ln[0]

Inicialice el objeto fig con FuncAnimation para iniciar la animación:

fig, ax = plt.subplots(figsize=(6, 4), dpi=100)
    
    ax.axis(interval)
    
    global points, verts, codes
    
    codes = []
    verts = np.empty((0, 2), np.float64)
    points = np.empty((0, 2), np.float64)
    
    plt.rcParams['font.sans-serif'] = ['Times New Roman']
    plt.rcParams['axes.unicode_minus'] = False
    
    ln = plt.plot([], [], 'ro')
    # 设置坐标轴刻度标签的大小
    plt.tick_params(axis='x', direction='out',
               labelsize=12, length=3.6)
    plt.tick_params(axis='y', direction='out',
               labelsize=12, length=3.6)
    # x y 轴标签   标题   字体设置
    plt.xlabel("x", 
           fontdict={
    
    "size": 16, "weight": "bold", "color": "black"})
    plt.ylabel("f(x)",
           fontdict={
    
    "size": 16, "weight": "bold", "color": "black"}
          )
    plt.grid(alpha=0.48, ls=":")

    # FuncAnimation动画  传入fig对象、更新函数 frames
    anim = FuncAnimation(fig, update,
                         frames=np.linspace(*interval[:2], bins),
                        )

El código de Python se ejecuta de la siguiente manera:

inserte la descripción de la imagen aquí


Estudio complementario:

Supongo que te gusta

Origin blog.csdn.net/fyfugoyfa/article/details/123509263
Recomendado
Clasificación