python微元法计算函数曲线长度的方法


Posted in Python onNovember 08, 2018

计算曲线长度,根据线积分公式:

python微元法计算函数曲线长度的方法,令积分函数 f(x,y,z) 为1,即计算曲线的长度,将其微元化:

python微元法计算函数曲线长度的方法

其中

python微元法计算函数曲线长度的方法

根据此时便可在python编程实现,给出4个例子,代码中已有详细注释,不再赘述

'''
计算曲线长度,根据线积分公式:
\int_A^Bf(x,y,z)dl,令积分函数为1,即计算曲线的长度
'''
import numpy as np
from mpl_toolkits.mplot3d import *
import matplotlib.pyplot as plt

## 求二维圆周长,半径为1,采用参数形式
def circle_2d(dt=0.001,plot=True):
 dt = dt # 变化率
 t = np.arange(0,2*np.pi, dt)
 x = np.cos(t)
 y = np.sin(t)

 # print(len(t))
 area_list = [] # 存储每一微小步长的曲线长度

 for i in range(1,len(t)):
  # 计算每一微小步长的曲线长度,dx = x_{i}-x{i-1},索引从1开始
  dl_i = np.sqrt( (x[i]-x[i-1])**2 + (y[i]-y[i-1])**2 ) 
  # 将计算结果存储起来
  area_list.append(dl_i)

 area = sum(area_list)# 求和计算曲线在t:[0,2*pi]的长度

 print("二维圆周长:{:.4f}".format(area))
 if plot:
  fig = plt.figure()
  ax = fig.add_subplot(111)
  ax.plot(x,y)
  plt.title("circle")
  plt.show()


## 二维空间曲线,采用参数形式
def curve_param_2d(dt=0.0001,plot=True):
 dt = dt # 变化率
 t = np.arange(0,2*np.pi, dt)
 x = t*np.cos(t)
 y = t*np.sin(t)

 # print(len(t))
 area_list = [] # 存储每一微小步长的曲线长度

 # 下面的方式是循环实现
 # for i in range(1,len(t)):
 #  # 计算每一微小步长的曲线长度,dx = x_{i}-x{i-1},索引从1开始
 #  dl_i = np.sqrt( (x[i]-x[i-1])**2 + (y[i]-y[i-1])**2 ) 
 #  # 将计算结果存储起来
 #  area_list.append(dl_i)

 # 更加pythonic的写法
 area_list = [np.sqrt( (x[i]-x[i-1])**2 + (y[i]-y[i-1])**2 ) for i in range(1,len(t))]

 area = sum(area_list)# 求和计算曲线在t:[0,2*pi]的长度

 print("二维参数曲线长度:{:.4f}".format(area))

 if plot:

  fig = plt.figure()
  ax = fig.add_subplot(111)
  ax.plot(x,y)
  plt.title("2-D Parameter Curve")
  plt.show()

## 二维空间曲线
def curve_2d(dt=0.0001,plot=True):
 dt = dt # 变化率
 t = np.arange(-6,10, dt)
 x = t
 y = x**3/8 - 4*x + np.sin(3*x)

 # print(len(t))
 area_list = [] # 存储每一微小步长的曲线长度

 # for i in range(1,len(t)):
 #  # 计算每一微小步长的曲线长度,dx = x_{i}-x{i-1},索引从1开始
 #  dl_i = np.sqrt( (x[i]-x[i-1])**2 + (y[i]-y[i-1])**2 ) 
 #  # 将计算结果存储起来
 #  area_list.append(dl_i)

 area_list = [np.sqrt( (x[i]-x[i-1])**2 + (y[i]-y[i-1])**2 ) for i in range(1,len(t))]

 area = sum(area_list)# 求和计算曲线在t:[0,2*pi]的长度

 print("二维曲线长度:{:.4f}".format(area))

 if plot:
  fig = plt.figure()
  ax = fig.add_subplot(111)
  ax.plot(x,y)
  plt.title("2-D Curve")
  plt.show()

## 三维空间曲线,采用参数形式
def curve_3d(dt=0.001,plot=True):
 dt = dt # 变化率
 t = np.arange(0,2*np.pi, dt)
 x = t*np.cos(t)
 y = t*np.sin(t)
 z = 2*t

 # print(len(t))
 area_list = [] # 存储每一微小步长的曲线长度

 for i in range(1,len(t)):
  # 计算每一微小步长的曲线长度,dx = x_{i}-x{i-1},索引从1开始
  dl_i = np.sqrt( (x[i]-x[i-1])**2 + (y[i]-y[i-1])**2 + (z[i]-z[i-1])**2 ) 
  # 将计算结果存储起来
  area_list.append(dl_i)

 area = sum(area_list)# 求和计算曲线在t:[0,2*pi]的长度

 print("三维空间曲线长度:{:.4f}".format(area))

 if plot:
  fig = plt.figure()
  ax = fig.add_subplot(111,projection='3d')
  ax.plot(x,y,z)
  plt.title("3-D Curve")
  plt.show()

if __name__ == '__main__':

 circle_2d(plot=True)
 curve_param_2d(plot=True)
 curve_2d(plot=True)
 curve_3d(plot=True)

得到结果:

二维圆周长:6.2830
二维参数曲线长度:21.2558
二维曲线长度:128.2037
三维空间曲线长度:25.3421

python微元法计算函数曲线长度的方法

python微元法计算函数曲线长度的方法

python微元法计算函数曲线长度的方法

python微元法计算函数曲线长度的方法

以上这篇python微元法计算函数曲线长度的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python转码问题的解决方法
Oct 07 Python
python中使用urllib2伪造HTTP报头的2个方法
Jul 07 Python
Python简单生成随机姓名的方法示例
Dec 27 Python
Python3中关于cookie的创建与保存
Oct 21 Python
Python3实现的旋转矩阵图像算法示例
Apr 03 Python
python twilio模块实现发送手机短信功能
Aug 02 Python
python如何使用jt400.jar包代码实例
Dec 20 Python
基于Python 中函数的 收集参数 机制
Dec 21 Python
Python面向对象程序设计之继承、多态原理与用法详解
Mar 23 Python
django 扩展user用户字段inlines方式
Mar 30 Python
如何在scrapy中捕获并处理各种异常
Sep 28 Python
如何用python反转图片,视频
Apr 24 Python
python实现简单的单变量线性回归方法
Nov 08 #Python
python/sympy求解矩阵方程的方法
Nov 08 #Python
python生成lmdb格式的文件实例
Nov 08 #Python
python实现嵌套列表平铺的两种方法
Nov 08 #Python
python用列表生成式写嵌套循环的方法
Nov 08 #Python
在Python中实现shuffle给列表洗牌
Nov 08 #Python
python实现RabbitMQ的消息队列的示例代码
Nov 08 #Python
You might like
PHP利用str_replace防注入的方法
2013/11/10 PHP
php内核解析:PHP中的哈希表
2014/01/30 PHP
php实现window平台的checkdnsrr函数
2015/05/27 PHP
图片自动更新(说明)
2006/10/02 Javascript
js 优化次数过多的循环 考虑到性能问题
2011/03/05 Javascript
jquery操作checkbox示例分享
2014/07/21 Javascript
javascript函数中参数传递问题示例探讨
2014/07/31 Javascript
Node.js和MongoDB实现简单日志分析系统
2015/04/25 Javascript
简述JavaScript提交表单的方式 (Using JavaScript Submit Form)
2016/03/18 Javascript
bootstrap3 兼容IE8浏览器!
2016/05/02 Javascript
Vue.js组件tree实现省市多级联动
2016/12/02 Javascript
JavaScript正则表达式小结(test|match|search|replace|split|exec)
2016/12/08 Javascript
PHP实现本地图片上传和验证功能
2017/02/27 Javascript
简单谈谈vue的过渡动画(推荐)
2017/10/11 Javascript
基于vue-ssr服务端渲染入门详解
2018/01/08 Javascript
vue构建动态表单的方法示例
2018/09/22 Javascript
在微信小程序中使用vant的方法
2019/06/07 Javascript
js实现移动端图片滑块验证功能
2020/09/29 Javascript
解决vscode进行vue格式化,会自动补分号和双引号的问题
2020/10/26 Javascript
vue实现列表拖拽排序的功能
2020/11/02 Javascript
[01:00]一分钟回顾2018DOTA2亚洲邀请赛现场活动
2018/04/07 DOTA
Python标准库urllib2的一些使用细节总结
2015/03/16 Python
Python打印斐波拉契数列实例
2015/07/07 Python
Python设计足球联赛赛程表程序的思路与简单实现示例
2016/06/28 Python
Python爬虫框架scrapy实现的文件下载功能示例
2018/08/04 Python
学python安装的软件总结
2019/10/12 Python
Python装饰器使用你可能不知道的几种姿势
2019/10/25 Python
如何将你的应用迁移到Python3的三个步骤
2019/12/22 Python
哥伦比亚加拿大官网:Columbia Sportswear Canada
2020/09/07 全球购物
精伦电子Java笔试题
2013/01/16 面试题
品质标语大全
2014/06/21 职场文书
婚内房产协议书范本
2014/10/02 职场文书
九华山导游词
2015/02/03 职场文书
法学专业求职信范文
2015/03/19 职场文书
2015大一新生军训感言
2015/08/01 职场文书
Tomcat弱口令复现及利用
2022/05/06 Servers