zoukankan      html  css  js  c++  java
  • 数学工具(四)积分

    对下列式子求积分

    $$
    f(x)=sin(x)+0.5x
    $$

    即:

    $$
    int_{0}^{0.9}(sin(x)+0.5x)dxqquad
    $$

    import scipy.integrate as sci  #主要依赖的库
    import numpy as np
    import matplotlib.pyplot as plt
    

      

    # To support both python 2 and python 3
    from __future__ import division, print_function, unicode_literals
    
    # Common imports
    import numpy as np
    import os
    
    # to make this notebook's output stable across runs
    def reset_graph(seed=42):
        tf.reset_default_graph()
        tf.set_random_seed(seed)
        np.random.seed(seed)
    
    # To plot pretty figures
    %matplotlib inline
    import matplotlib
    import matplotlib.pyplot as plt
    plt.rcParams['axes.labelsize'] = 14
    plt.rcParams['xtick.labelsize'] = 12
    plt.rcParams['ytick.labelsize'] = 12
    

      

    #定义函数
    def f(x):
        return np.sin(x)+0.5*x
    
    积分上下限
    a=0.5
    b=9.5
    x=np.linspace(0,10)
    y=f(x)
    
    from matplotlib.patches import Polygon
    
    fig,ax=plt.subplots(figsize=(12,8))
    plt.plot(x,y,'b',lw=1.2)
    plt.ylim(ymin=0)
    
    #积分区域
    Ix=np.linspace(a,b)
    Iy=f(Ix)
    verts=[(a,0)]+list(zip(Ix,Iy))+[(b,0)] #zip 函数构成 元组列表
    poly=Polygon(verts,facecolor='0.7',edgecolor='0.3')
    ax.add_patch(poly)
    
    # labels
    plt.text(0.75 *(a + b) , 1.5, r"$int_a^b f(x)dx$" ,horizontalalignment='center' , fontsize=20)
    plt.figtext(0.9, 0.075, '$x$')
    plt.figtext (0.075, 0.9, '$f(x)$')
    ax.set_xticks([a,b])
    ax.set_xticklabels(['$a$', '$b$'])
    ax.set_yticks([f(a),f(b)])
    

      

    数值积分

    integrate 子库包含一组精选的函数,可以计算给定上下限的数学函数下的数值积分,这些函数的例子也介用于同定高斯求积的fixed_quad 、用于自适应求积的quad 和用于龙贝格积分的romberg。

    # 同定高斯求积的fixed_quad
    print(sci.fixed_quad(f,a,b)[0])
    
    #自适应求积的quad
    print(sci.quad(f,a,b)[0])
    
    #龙贝格积分的romberg
    print(sci.romberg(f,a,b))
    24.3669959671
    24.374754718086752
    24.3747547181

    还有一些积分的数以输入列表或者包含雨数值和输入值的ndarray 对象作为输入,这种函数的例子包插使用梯形法则的trapz ,和实现辛普森法则的simps。

    1 xi = np .linspace(0.5, 9.5, 25)
    2 #梯形法则
    3 print(sci. trapz(f(xi) , xi))
    4 
    5 #辛普森法则
    6 print(sci. simps(f(xi) , xi))
    View Code
    24.3527332715
    24.3749641846
  • 相关阅读:
    gcc, ld
    STM32,ARM,Keil工具相关
    ISC BIND DNS
    Linux系统iptables查看、设置、保存、备份和恢复
    JupyterHub的安装与配置——让Jupyter支持多用户
    Linux通过Shell脚本命令修改密码不需要交互
    Nginx使用Location匹配URL进行伪静态
    MySQL无法启动重启竟是因为改了Linux主机名
    17个C语言可以做的小案例项目
    HUSTOJ增加其他语言出现RuntimeError解决办法
  • 原文地址:https://www.cnblogs.com/jin-liang/p/9399340.html
Copyright © 2011-2022 走看看