当前位置: 首页 > news >正文

【数值计算方法】23维高斯积分的python实现

原文链接:https://www.cnblogs.com/aksoam/p/18343674
更多精彩,关注博客园主页,不断学习!不断进步!

我的主页

csdn很少看私信,有事请b站私信

博客园主页-发文字笔记-常用

有限元鹰的主页 内容:

  1. ABAQUS数值模拟相关
  2. Python科学计算
  3. 开源框架,编程学习笔记

哔哩哔哩主页-发视频-常用

FE-有限元鹰的个人空间 内容:

  1. 模拟案例
  2. 网格划分
  3. 游戏视频,及其他搬运视频

文章目录

  • 我的主页
    • 博客园主页-发文字笔记-常用
    • 哔哩哔哩主页-发视频-常用
  • 二维高斯积分
  • 三维高斯积分
  • 验证

本文只给出pythont实现和例题,数学推导见【数值计算方法】数值积分&微分-python实现 - FE-有限元鹰 - 博客园

二维高斯积分

python实现二维高斯积分:


def Integ2dGuassLegendre(f,lowLimit:List[float]=[-1,-1], upLimit:List[float]=[1,1], n:int=3)->float:"""给定积分区域[lowLimit,upLimit]和高斯积分点个数n(>=1),计算二维高斯-勒让德积分公式"""a,b,c,d=lowLimit[0],upLimit[0],lowLimit[1],upLimit[1]if n<=0:raise ValueError("高斯-勒让德积分时,n必须大于0")if n==1:return 4*f(0,0)if a==-1 and b==1 and c==-1 and d==1:# 标准型积分#计算权重和积分点位置x_is,w_is=legendre_gauss_points_and_weights(n)y_js,w_js=legendre_gauss_points_and_weights(n)return np.sum([w_is[ind_x]*w_js[ind_y]*f(xi,yj) for ind_x,xi in enumerate(x_is) for ind_y,yj in enumerate(y_js) ])else:# 非标准型积分,积分区域:[a,b]x[c,d]xt1=lambda t1: 0.5*(b-a)*t1+0.5*(b+a)yt2=lambda t2: 0.5*(d-c)*t2+0.5*(d+c)t1_is,w_is=legendre_gauss_points_and_weights(n)t2_js,w_js=legendre_gauss_points_and_weights(n)return np.sum([w_is[ind_x]*w_js[ind_y]*f(xt1(t1i),yt2(t2j))*(b-a)*(d-c)*0.25 for ind_x,t1i in enumerate(t1_is) for ind_y,t2j in enumerate(t2_js) ])

三维高斯积分

python实现:

def Integ3dGuassLegendre(f,lowLimit:List[float]=[-1,-1,-1], upLimit:List[float]=[1,1,1], n:int=3)->float:"""给定积分区域[lowLimit,upLimit]和高斯积分点个数n(>=1),计算二维高斯-勒让德积分公式"""a,b=lowLimit[0],upLimit[0]c,d=lowLimit[1],upLimit[1]g,h=lowLimit[2],upLimit[2]if n<=0:raise ValueError("高斯-勒让德积分时,n必须大于0")if n==1:return 8*f(0,0)if a==-1 and b==1 and c==-1 and d==1:# 标准型积分#计算权重和积分点位置x_is,w_is=legendre_gauss_points_and_weights(n)y_js,w_js=legendre_gauss_points_and_weights(n)z_js,w_ks=legendre_gauss_points_and_weights(n)return np.sum([w_is[ind_x]*w_js[ind_y]*w_ks[ind_z]*f(xi,yj,zk) for ind_x,xi in enumerate(x_is) for ind_y,yj in enumerate(y_js) for ind_z,zk in enumerate(z_js)])else:# 非标准型积分,积分区域:[a,b]x[c,d]x[g,h]xt1=lambda t1: 0.5*(b-a)*t1+0.5*(b+a)yt2=lambda t2: 0.5*(d-c)*t2+0.5*(d+c)zt3=lambda t3: 0.5*(h-g)*t3+0.5*(h+g)t1_is,w_is=legendre_gauss_points_and_weights(n)t2_js,w_js=legendre_gauss_points_and_weights(n)t3_ks,w_ks=legendre_gauss_points_and_weights(n)return np.sum([w_is[ind_x]*w_js[ind_y]*w_ks[ind_z]*f(xt1(t1i),yt2(t2j),zt3(t3k))*(b-a)*(d-c)*(h-g)*0.125 for ind_x,t1i in enumerate(t1_is) for ind_y,t2j in enumerate(t2_js) for ind_z,t3k in enumerate(t3_ks)])

验证

from formu_lib import *
import numpy as np
from scipy.integrate import dblquad
# 定义被积函数
def integrand(x, y):return np.exp(x*x+y*y)# 计算二重积分
result, error = dblquad(integrand, -1, 1, lambda x: -1, lambda x: 1)
print("numpy 二重积分结果:", result)
ans1=Integ2dGuassLegendre(integrand,[-1, -1],[1, 1],n=5)
print(f"本地二重积分结果:{ans1}")from scipy.integrate import tplquad
# 定义被积函数
def integrand3(x, y, z):return np.exp(x*x+y*y+z*z)# 计算三重积分
result3, error = tplquad(integrand3, -1, 1, lambda x: -1, lambda x: 1, lambda x, y: -1, lambda x, y: 1)
ans2=Integ3dGuassLegendre(integrand3,[-1,-1,-1],[1,1,1],n=5)print("numpy三重积分结果:", result3)
print(f"本地三重积分结果:{ans2}")

输出:

  • numpy 二重积分结果: 8.557400519221307
  • 本地二重积分结果:8.557173227239266
  • numpy三重积分结果: 25.03299361973213
  • 本地三重积分结果:25.03199627931168

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • git revert和git reset工作中使用
  • Prometheus 常见参数
  • 【自学深度学习梳理3】卷积神经网络
  • 【链表OJ】常见面试题 3
  • Linux kill命令给进程发信号
  • 寻找二叉树中两个节点的最低公共祖先
  • 2024小学生古诗文大会暑期备考:吃透历年真题和知识点(持续)
  • 简单的docker学习 第1章 docker 概述
  • springcloud loadbalancer nacos无损发布
  • 【数据结构】线段树
  • 临床数据科学中如何用R来进行缺失值的处理(上)
  • 24/8/6算法笔记 不同核函数
  • 读友好的缓存淘汰算法
  • Go语言依赖管理:如何配置和恢复Go模块镜像
  • 【python】Linux升级版本
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • canvas绘制圆角头像
  • node-sass 安装卡在 node scripts/install.js 解决办法
  • pdf文件如何在线转换为jpg图片
  • Rancher-k8s加速安装文档
  • Redis在Web项目中的应用与实践
  • 深度学习在携程攻略社区的应用
  • 一、python与pycharm的安装
  • 一文看透浏览器架构
  • 第二十章:异步和文件I/O.(二十三)
  • 通过调用文摘列表API获取文摘
  • #Linux(帮助手册)
  • (1)Jupyter Notebook 下载及安装
  • (附源码)计算机毕业设计SSM疫情下的学生出入管理系统
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (三)elasticsearch 源码之启动流程分析
  • (转)JAVA中的堆栈
  • ****Linux下Mysql的安装和配置
  • .dwp和.webpart的区别
  • .Net mvc总结
  • .Net Redis的秒杀Dome和异步执行
  • .Net程序帮助文档制作
  • .net访问oracle数据库性能问题
  • .NET上SQLite的连接
  • .NET业务框架的构建
  • .NET中两种OCR方式对比
  • @column注解_MyBatis注解开发 -MyBatis(15)
  • @SpringBootApplication 注解
  • @TableId注解详细介绍 mybaits 实体类主键注解
  • [2024] 十大免费电脑数据恢复软件——轻松恢复电脑上已删除文件
  • [AHK] WinHttpRequest.5.1报错 0x80092004 找不到对象或属性
  • [Android开源]EasySharedPreferences:优雅的进行SharedPreferences数据存储操作
  • [C#][opencvsharp]opencvsharp sift和surf特征点匹配
  • [C#]winform部署yolov9的onnx模型
  • [CP_AUTOSAR]_系统服务_DEM模块(一)功能及模块间依赖关系介绍
  • [DEBUG] spring boot-如何处理链接中的空格等特殊字符
  • [HEOI2013]ALO
  • [Java][Liferay] File system in liferay
  • [kimi笔记]为什么csc.exe不可以双击运行
  • [linux c]linux do_div() 函数用法