精华内容
下载资源
问答
  • python中使用scipy.integrate求积分二重积分、三重积分import numpy as np from scipy.integrate import tplquad,dblquad,quad #积分 val1,err1=quad(lambda x:np.sin(x),#函数 0,#x下界0 np.pi)#x上界pi...

    python中使用scipy.integrate求积分、二重积分、三重积分

    import numpy as np  
    from scipy.integrate import tplquad,dblquad,quad
    
    #积分
    val1,err1=quad(lambda x:np.sin(x),#函数
                   0,#x下界0
                   np.pi)#x上界pi
    print ('积分结果:',val1)
    
    #二重积分
    val2,err2=dblquad(lambda y,x:np.sin(x)*np.cos(y),#函数
                      0,#x下界0
                      np.pi,#x上界pi
                      lambda x:x**2,#y下界x^2
                      lambda x:2*x)#y上界2*x
    print ('二重积分结果:',val2)
    
    #三重积分
    val3,err3=tplquad(lambda z,y,x:1/(np.sqrt(x+y**2+z**3)),#函数
                    0,#x下界0
                    1,#x上界1
                    lambda x:-x,#y下界-x
                    lambda x:x,#y上界x
                    lambda x,y:np.sin(x),#z下界sin(x)
                    lambda x,y:x+2*y)#z上界x+2*y
    print ('三重积分结果:',val3)

    其运算结果为

    积分结果: 2.0
    二重积分结果: -0.4989998520503062
    三重积分结果: -0.05881880054964517


    展开全文
  • 首先是对一元函数求积分,使用Scipy下的integrate函数: from scipy import integrate def g(x): return (1-x**2)**0.5 #用integrate下的quad函数可以同时求出积分结果和误差 res,err=integrate.quad(g,-1,1) #-1...
  • 用python一重积分二重积分

    千次阅读 2018-02-28 10:07:21
    首先是对一元函数求积分,使用Scipy下的integrate函数:from scipy import integrate def g(x): return (1-x**2)**0.5 #用integrate下的quad函数可以同时求出积分结果和误差 res,err=integrate.quad(g,-1,1) #-1和...

    首先是对一元函数求积分,使用Scipy下的integrate函数:

    from scipy import integrate
    def g(x):
        return (1-x**2)**0.5
    
    #用integrate下的quad函数可以同时求出积分结果和误差
    res,err=integrate.quad(g,-1,1) #-1和1表示积分上下限,如果是正无穷用np.inf
    print(res,err)

    得到的结果如下,前者是积分结果,后者是误差

    1.5707963267948986 1.0002356720661965e-09

    如果是二重积分,比如是关于t和x的积分:

    import numpy as np
    from scipy.integrate import dblquad #dblquad用于二重积分
    def main():
        print(dblquad(lambda t,x:np.sin(t)*np.exp(-x*t)/t**5,0.5,0.8,lambda x:0.2,lambda x:0.7))
    
    if __name__ == "__main__":
        main()

    在上面的括号中,被积函数是sint*exp(-xt)/t^5, 其中t的积分上下限是0.5和0.8,x的积分上下限是0.2和0.7,结果如下:

    (10.041536868759145, 1.3645801372419182e-11)


    展开全文
  • 基于Laguerre小波函数及其对应的积分算子矩阵给出了一个求二重积分的数值方法。该方法通过对被积函数进行恰当的离散化,将二重数值积分问题转化为矩阵运算,从而易于求解、方便计算。该方法不仅适用于积分区域是矩形...
  • 复化梯形公式求二重积分matlab源码

    千次阅读 2020-06-08 13:11:05
    复化梯形公式求二重积分matlab源码 %%%%%%%%%% 2020.6.5 %%%%%%%%% %%%%%%%%%%复化梯形公式求二重积分%%%%%%%%%%%%%%%%%%% Liu Deping %%%%%%%%%clear all;%%%被积函数积分上下限导入;s=input('请输入函数表达式...

    复化梯形公式求二重积分matlab源码

    这段代码具有很好的交互性和通用性,将代码复制到matlab编辑器之后,按照提示操作即可。傻瓜式操作,结果一目了然~

    %%%%%%%%%%     2020.6.5        %%%%%%%%%
    %%%%%%%%%%复化梯形公式求二重积分%%%%%%%%%
    %%%%%%%%%%     Liu Deping      %%%%%%%%%
    clear all;
    %%%被积函数及积分上下限导入;
    s=input('请输入函数表达式:f = ','s');
    f=inline(s);
    a = input('请输入积分变量x左边界a的值:');
    b = input('请输入积分变量x右边界b的值:');
    c = input('请输入积分变量y左边界c的值:');
    d = input('请输入积分变量y右边界d的值:');
    h1 = input('请输入积分变量x步长h1的值:');
    h2 = input('请输入积分变量y步长h2的值:');
    m=round((b-a)/h1);
    n=round((d-c)/h2);
    %%%系数矩阵T,t[i,j]为复化梯形公式的系数;
    TT=zeros(m+1,n+1);
    TT(1,1)=1;
    TT(m+1,1)=1;
    TT(1,n+1)=1;
    TT(m+1,n+1)=1;
    for i=2:m
        TT(i,1)=2;
        TT(i,n+1)=2;
    end
    for j=2:n
        TT(1,j)=2;
        TT(m+1,j)=2;
    end
    TT(TT==0)=4   %%系数表
     
    %%%计算各二维节点函数值,并存放于矩阵F中;
    F=zeros(m+1,n+1);
    for i=0:m
        for j=0:n
          F(i+1,j+1)=f(a+i*h1,c+j*h2);    
        end
    end 
     
    %%%结果输出;
    format long;
    fprintf('各节点函数值;')
    F
    fprintf('复化梯形公式计算结果;')
    Tnm=(b-a)*(d-c)/(4*m*n)*sum(sum(TT.*F))
    
    

    之后还有辛普森公式求二重积分,希望喜欢的小伙伴持续关注篱落~~成殇~~

    展开全文
  • 对于函数求矩形积分我们可以采用插值型求积公式既是牛顿科特斯公式,既是将积分区间 [a,b] 划分为n等分,步长h=(b-a)/n,选取Xk=a+K*h构造出来的牛顿—科特斯公式,牛顿-科特斯公式的系数的n越高一般代数精度越高,...

    最近有人要我帮求函数的二重积分,于是我勉强为其难的答应了,过程有点艰苦但是还是得坚持。
    对于函数求矩形积分我们可以采用插值型求积公式既是牛顿科特斯公式,既是将积分区间 [a,b] 划分为n等分,步长h=(b-a)/n,选取Xk=a+K*h构造出来的牛顿—科特斯公式,牛顿-科特斯公式的系数的n越高一般代数精度越高,但是在n>8的时候不具有稳定性,而辛普森公式是n=4的牛顿-科特斯公式,用辛普森公式可以简单又快速计算出积分结果但是误差大,所以为了提高精度采用复合求积法既是复合辛普森公式。
    而所知道的复合辛普森求积公式是求一重积分F(X)的,而我们要求的是二重积分F(X,Y)。F(x,y)=∬▒f(x,y)dxdy,而复合辛普森公式是
    Sn=h/6*[∫▒〖f(a)+4∑_(k=0)^(n-1)▒〖f(x_(k+1/2) )+〗〗 2∑_(k=1)^(n-1)▒〖f(x_k )+f(b)]〗
    这里求的是x的积分,对于求二重积分F(x,y)而言相当于对x求一次偏导,根据积分的可加性,复合辛普森公式可以变为:
    Sn=h/6*[∫▒〖f(a)+∫▒∑_(k=0)^(n-1)▒f(x_(k+1/2) ) +∫▒∑_(k=1)^(n-1)▒〖f(x_k )+∫▒f(b) 〗〗]
    对f(x,y)的一次积分有

    在这里插入图片描述

    因为我们要求f(x,y)的二重积分∬▒f(x,y)dxdy,我们可以将①式的每一项修改为
    Vn=h/6*[∬▒〖f(a)+∬▒〖∑_(k=0)^(n-1)▒f(x_(k+1/2) ) +∬▒∑_(k=1)^(n-1)▒〖f(x_k )+∬▒f(b) 〗〗〗]--②
    有此结构我们可以对②式进行修改,对每一项求x的偏积分,进而就是对每一项求一次复合辛普森,因此②式可变为
    Vn=h/6*[∫▒〖Sn(a,y)+∫▒∑_(k=0)(n-1)▒Sn(xi,y)dy+∫▒∑_(k=1)(n-1)▒〖Sn(xi,y)dy+∫▒Sn(b,y) 〗〗]i=a+k*h,h=1,2,…
    因此我们就可以得出

    Vn=Sn(Sn(x,yi),y),i=a+k*h,h=1,2,…

    所以我们的公式就出来了,现在要求其误差,因为一重积分的辛普森误差为:

    Rn=I-Sn,i=∑_(k=0)^(n-1)▒〖f(x)〗 dx


    Rn=-h/180*(h/2)4*∑_(k=0)(n-1)▒〖f^((4) ) (ξ_k ) 〗 dx,ξ_k 〖→(x〗_k,x_(k+1))
    因此对于二重积分f(x,y)我们可以看成x的偏积分的基础上再对y求积分,因此我们可以看成函数在x上的误差与y上的误差的乘积,经展开计算得到

    Rn(x,y)=((b-a)*(d-c))/180*h4*((f((4) ) (x,y))/(dx^4 )+(f^((4) ) (x,y))/(dy^4 ))

    因此我们就得出了如何用复合辛普森求二重积分并求其余项的公式,因此我们可以用代码将其表示出来,
    首先我们定义复合辛普森的求积公式

    double Simpson(double a, double b, double n, double y) {
    	double h = (b - a) / n;
    	double Sn = f(a, y) + f(b, y);
    	for (int i = 0; i <= n - 1; i++) {
    		Sn += 4 * f(a + (i + 1 / 2)*h, y) + 2 * (f(a + i * h, y));
    	}
    	return h / 6 * (Sn + f(b, y));
    }
    
    

    然后我们用for循环来对复合辛普森公式复用复合辛普森代码如下
    double mul = Simpson(a, b, n, c);for (int i = 0; i <= n - 1; i++) {mul += 4 * Simpson(a, b, n, c + k * (i + 1 / 2)) + 2 * Simpson(a, b, n, c + k * i);}mul += Simpson(a, b, n, d);mul = k / 6 * mul;
    式中mul是定义二重积分的值,for循环模拟复合辛普森y的步长从c到d的不断增加,既是
    ∫▒∑_(k=0)^(n-1)▒Sn(xi,y)dy ∫▒∑_(k=1)^(n-1)▒Sn(xi,y)dy
    然后在加上函数在点f(a,c)和f(b,d)的复合辛普森值。
    这样嵌套的复合辛普森求二重积分就完成了。
    至于误差我们计算出原函数的4阶导数,并将其用函数封装出来
    既是
    double diff_f(double x, double y) {double exy = 1 / exp((pow(x, 2) + pow(y, 2))/ 2);double diff = 1 / (2 * pi)*exy - pow(x, 2) / (2 * pi)*exy + 1 / pi * exy - pow(x, 2) / pi * exy - 3 * pow(x, 2)*exy + pow(x, 4)*exy;return diff;}
    其中diff是其4阶导数的表达式,exy是统一变量方便写表达式。
    接下来就可以计算误差了根据我们上述误差公式
    Rn(x,y)-((b-a)*(d-c))/180*h4*((f((4) ) (x,y))/(dx^4 )+(f^((4) ) (x,y))/(dy^4 ))
    我们可以将其写为
    double error_up = -(b - a)*(d - c) / 180 * (pow(h, 4)*diff_f(x1, y1) + pow(k, 4)*diff_f(x2, y2));
    接下来我们就来验证一下
    我们看一下我们要求的积分
    在这里插入图片描述
    我们先写出原函数

    //定义原函数f(x)
    double f(double x, double y) {
    	double result = 1 / (2 * pi)*(1 / exp((pow(x, 2) + pow(y, 2)) / 2));
    	return result;
    }
    

    然后定义函数的4阶偏导

    double diff_f(double x, double y) {
    	double exy = 1 / exp((pow(x, 2) + pow(y, 2)) / 2);
    	double diff = 1 / (2 * pi)*exy - pow(x, 2) / (2 * pi)*exy + 1 / pi * exy - pow(x, 2) / pi * exy - 3 * pow(x, 2)*exy + pow(x, 4)*exy;
    	return diff;
    }
    

    定义辛普森

    double Simpson(double a, double b, double n, double y) {
    	double h = (b - a) / n;
    	double Sn = f(a, y) + f(b, y);
    	for (int i = 0; i <= n - 1; i++) {
    		Sn += 4 * f(a + (i + 1 / 2)*h, y) + 2 * (f(a + i * h, y));
    	}
    	return h / 6 * (Sn + f(b, y));
    }
    
    

    接着我们定义一些常量:

    double a = -1;//x下限
    	double b = 1;//x上限
    	double c = -1;//y下线
    	double d = 1;//y上限
    	double n = 20;//分割区间大小
    	double k = (b - a) / n;//x的步长
    	double h = (d - c) / n;//y的步长
    	double x1, x2;
    	double y1, y2;
    

    然后先进行一重辛普森计算后计算二重辛普森并对其进行误差估计

    //对辛普森公式的积分复用辛普森公式算出二重积分。
    	double mul = Simpson(a, b, n, c);
    	for (int i = 0; i <= n - 1; i++) {
    		mul += 4 * Simpson(a, b, n, c + k * (i + 1 / 2)) + 2 * Simpson(a, b, n, c + k * i);
    	}
    	mul += Simpson(a, b, n, d);
    	mul = k / 6 * mul;
    	printf("二重积分的值是%lf\n", mul);
    	x1 = b, x2 = b, y1 = d, y2 = d;//根据推导出的的二重积分的误差公式在xy的定义域范围内取最大值时xy的值各为d。
    	double error_up = -(b - a)*(d - c) / 180 * (pow(h, 4)*diff_f(x1, y1) + pow(k, 4)*diff_f(x2, y2));//求误差上限
    	printf("二重积分的误差上限是%lf\n", error_up);
    

    接下来我们验证程序:
    为了程序的精确性,我们选取了多种步长下的计算,根据辛普森得知步长越小数据越精确,我们通过计算a,b,c,d分别为-1,1,-1,1时,n取不同值既是n=10,n
    =20,n=200时二重积分的值无限接近于0.47,而当n=200时误差为0.0000,而n取10的时候误差为0.000052
    n=10时候
    在这里插入图片描述
    n=20在这里插入图片描述
    n=200
    在这里插入图片描述
    可能数据不怎么明显这样我们把上下限调为2和-2那么我们再看一下结果
    这里我们就拿步长为20举例:
    在这里插入图片描述
    这时候就有人问了这个积分是有界的无穷积分
    在这里插入图片描述
    能不能求出来,仔细一想由于辛普森的边界要求是明确的数值,而无穷并不是一个数的概念而是一个量的概念,所以我们只能去近似他,我们上面已经看出当xy区间为[-2,2]时候积分值为0.918765,我们将区间扩大为3则有在这里插入图片描述
    再扩大为5有
    在这里插入图片描述
    这时候我们看出积分的值并没有改变多少,因此我们可以大致得出无穷积分的值为1。
    其实对于数据而言,因为误差时存在的不能消除,这是由于计算机是有截断误差的当位数很小的时候计算机会有截断数值造成数据不准确,为了减少截断误差的影响,我们应该将步长定义小一点。
    计算积分中的无穷积分,因为辛普森积分不适合计算无穷积分,一个是计算量大,而二是辛普森是计算矩形区域,对于无穷大而言,无穷不是数值,没有办法定义,所以我们这个辛普森无法计算无穷积分,而f(x,y)的三维曲线得知当xy的绝对值增大时函数的重积分数值越小,所以我们通过改变区间大小不断逼近无穷积分,当而二重积分值不随着xy的增大而变化时候我们就可以推导出函数无穷积分的值。因此我们只要做多次积分逼近即可。
    最后我做的可能不怎么对,如果有错的地方望指出。谢谢!
    代码下载地址

    展开全文
  • 复化辛普森公式求二重积分matlab源码及例题

    千次阅读 多人点赞 2020-06-08 17:04:18
    复化辛普森公式求二重积分matlab源码 直接拷贝到matlab编辑器,傻瓜式操作。具体算法自行探究,网上都有,小编只提供代码。用的好的请加个关注,篱落~~成殇~~再次先行谢过。 %%%%%%%%%% 2020.6.5 %%%%%%%%% %%%%...
  • (2)二重积分二重积分是二元函数在空间上的积分,同定积分类似,是某种特定形式的和的极限,本质是曲顶柱体的体积 (3)三重积分:设三元函数f(x,y,z)在区域Ω上具有一阶连续偏导数,将Ω任意分割为n个小区域,...
  • python中使用scipy.integrate求积分二重、三重) #1.1 """ from sympy import * #integrate(函数,(变量,下限, 上限)) x = symbols('x') print(integrate(2*x**2+1, (x, 0, 1))) """ from scipy.integrate ...
  • 二重积分的计算基础计算 —— 章技巧计算 —— 章特殊形式被积函数积分域的计算 ——章2. 二重积分的求导——节二重积分可以直接求导二重积分无法直接求导3. 二重积分的证明相关定理——节4. 二重积分的综合问题...
  • SciPy下实现求函数积分函数的基本使用,积分,高等数学里有大量的讲述,基本意思就是曲线下面积之和。 其中rn可认为是偏差,一般可以忽略不计,wi可以视为权重。 在SciPy里提供了很多的各类积分函数...
  • 多变量微积分笔记8——二重积分

    千次阅读 多人点赞 2018-03-09 11:58:25
    二重积分是二元函数在空间上的积分,同定积分类似,是某种特定形式的和的极限。本质是曲顶柱体体积。重积分有着广泛的应用,可以用来计算曲面的面积,平面薄片重心等。平面区域的二重积分可以推广为在高维空间中的...
  • 高等数学:二重积分

    千次阅读 2019-06-05 20:00:06
    二重积分法 1,在直角坐标系画出D的图像,先观察积分区间D,确定积分是x型还是y型 2,如果是x型(y型相似),就做辅助线,平行于y轴从下往上穿的直线,然后看图像,先穿到的图像上的点就是y的最小值,...
  • 1.复合函数的偏导数与全微分 2.函数的偏导数与全微分 三、极值与最值 1.无条件极值问题 2.条件极值(最值)问题 3.多元函数的最大值最小值问题 四、二重积分 1.计算二重积分 2.累次积...
  • 理解二重积分极坐标算法

    千次阅读 2020-06-23 23:29:16
    理解 自变量为r和θ,通过原点作射线,以x正半轴为始边,绕θ角度遍历区域D,当自变量微元后, 得到面积元素dσ,向Z轴积分,得到曲顶柱体体积的代数和。... 前者:以x型区域为例,则z先对y方向积分求
  • 一、问题的引入——不规则几何体的体积及密度不均匀的薄片的质量如何计算? 二、几个与重积分有关的实际问题 1. 曲顶柱体的体积...1. 二重积分的概念(积分和、积分域、被积函数、面积元素、积分表达式)...
  • 文章目录第十二讲 二重积分概念、性质和对称性计算 第十二讲 二重积分 概念、性质和对称性 根据保号性有 根据谁的函数越大,那积分出来也应该越大 轮换对称性 ...有些函数求不出原函数 ...
  • 当我们知道被积函数时,可以利用Scipy模块下的子模块integrate里的quad函数来求这个积分的值,本节以几个问题的形式展示SciPy下如何求积分。 问题一 函数为f(x)=x+1,求积分的上下限为[1,2],数学表达式为: 求解...
  • 数值积分函数极值

    2020-08-10 23:08:20
    一、积分: 1.双变量的一重积分: s = trapz(xi,yi); %xi、yi是两个同维向量。 2.单变量的一重积分: s = quad(Fun,a,b);...3.双变量的二重积分: s = dblquad(Fun,xmin,xmax,ymin,ymax); ...
  • 注:①可仿照定义平面图形可面积的方法建立空间立体可体积的概念,今后总是假定VVV的边界由光滑曲面组成,以保证积分区域是可体积的 2.将三重积分化为累次积分 定理21.15:若函数f(x,y,z)f(x,y,z)f(x,y,z)在...
  • 2.quad 基于变步长simpso法求积分 q = quad(fun,a,b,tol) 其中fun是被积函数文件名或函数句柄,a, b是积分下限和积分上限,tol是积分精度 3.dblquad 矩形区域二重数值积分 q = dblquad(fun,a,b,c,d,tol) 其中fun...
  • % 建立二元函数g(x,y)=xy I=dblquad(g,0,1,1,2) %g(x,y)在[0,1][1,2]上的二重积分 I = 0.7500 h=inline'x*exp(y)+z^2'x'y'z; % 建立三元函数 I=triplequad(h,0,1,0,1,0,1) %h(x,y,z)在[0,1][0,1] [0,1]上的三重...
  • fnint 利用样条函数求积分 fnval 计算样条函数区间内任意一点的值 fnplt 绘制样条函数图形 fopen 打开外部文件 for 构成for环用 format 设置输出格式 fourier Fourier 变换 fplot 返函绘图指令 fprintf 设置...
  • 1 一元函数的定积分: 2 重积分讨论的被积函数是多元函数 二重积分定义 25 性质和计算 不等号性质: 估值定理 26 如何AX0, (ABEF) 二重积分化为...
  • 积分的C语言实现

    千次阅读 多人点赞 2018-09-24 15:41:04
    想到求积分,我们第一步想到的可能是通过算出带求函数的不定积分,再将两个区间端点带进去做差。但是对于计算机而言计算一个函数的不定积分往往是很困难的,那么该如何实现呢? 这里我们就要回到定积分的最原始的...

空空如也

空空如也

1 2 3 4 5
收藏数 88
精华内容 35
关键字:

二重函数求积分