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的print用法示例
Feb 11 Python
Python 字符串操作方法大全
Mar 11 Python
python thrift搭建服务端和客户端测试程序
Jan 17 Python
python docx 中文字体设置的操作方法
May 08 Python
Python使用pymysql从MySQL数据库中读出数据的方法
Jul 25 Python
查看python下OpenCV版本的方法
Aug 03 Python
Python爬虫基础之XPath语法与lxml库的用法详解
Sep 13 Python
Python 中判断列表是否为空的方法
Nov 24 Python
keras 自定义loss损失函数,sample在loss上的加权和metric详解
May 23 Python
python 实现性别识别
Nov 21 Python
10个顶级Python实用库推荐
Mar 04 Python
python中数组和列表的简单实例
Mar 25 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网站备份程序代码分享
2011/06/10 PHP
简单实用的.net DataTable导出Execl
2013/10/28 PHP
PHP中使用Imagick读取pdf并生成png缩略图实例
2015/01/21 PHP
Laravel 5框架学习之Blade 简介
2015/04/08 PHP
IE与firefox之jquery用法区别
2008/10/03 Javascript
jQuery对Select的操作大集合(收藏)
2013/12/28 Javascript
jquery对元素拖动排序示例
2014/01/16 Javascript
浅谈javascript回调函数
2014/12/07 Javascript
Js与Jq 获取页面元素值的方法和差异对比
2015/04/30 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
Angular 4依赖注入学习教程之FactoryProvider配置依赖对象(五)
2017/06/04 Javascript
关于vue.js组件数据流的问题
2017/07/26 Javascript
EasyUI创建人员树的实例代码
2017/09/15 Javascript
深入理解Puppeteer的入门教程和实践
2019/03/05 Javascript
详解Node.js异步处理的各种写法
2019/06/09 Javascript
转换layUI的数据表格中的日期格式方法
2019/09/19 Javascript
node.js域名解析实现方法详解
2019/11/05 Javascript
JS错误处理与调试操作实例分析
2020/04/13 Javascript
Django中实现一个高性能计数器(Counter)实例
2014/07/09 Python
使用python装饰器计算函数运行时间的实例
2018/04/21 Python
浅析Python数字类型和字符串类型的内置方法
2019/12/22 Python
python 消除 futureWarning问题的解决
2019/12/25 Python
Ubuntu 20.04安装Pycharm2020.2及锁定到任务栏的问题(小白级操作)
2020/10/29 Python
python实现文件分片上传的接口自动化
2020/11/19 Python
python实现b站直播自动发送弹幕功能
2021/02/20 Python
物业管理毕业生个人的求职信
2013/11/30 职场文书
毕业生个人的求职信范文
2013/12/03 职场文书
yy结婚证婚词
2014/01/10 职场文书
主持人大赛开场白
2015/05/29 职场文书
关于环保的广播稿
2015/12/17 职场文书
关于党风廉政建设宣传教育月的活动总结!
2019/08/08 职场文书
《狼牙山五壮士》读后感:宁死不屈,视死如归
2019/08/16 职场文书
《和时间赛跑》读后感3篇
2019/12/16 职场文书
JS不要再到处使用绝对等于运算符了
2021/04/30 Javascript
Mysql 如何实现多张无关联表查询数据并分页
2021/06/05 MySQL
css中z-index: 0和z-index: auto的区别
2021/08/23 HTML / CSS