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实现爬虫下载漫画示例
Feb 16 Python
python清除字符串里非字母字符的方法
Jul 02 Python
python 多线程实现检测服务器在线情况
Nov 25 Python
pandas值替换方法
Jul 10 Python
python中PS 图像调整算法原理之亮度调整
Jun 28 Python
python3的UnicodeDecodeError解决方法
Dec 20 Python
python生成任意频率正弦波方式
Feb 25 Python
jenkins+python自动化测试持续集成教程
May 12 Python
基于python实现地址和经纬度转换
May 19 Python
使用python matploblib库绘制准确率,损失率折线图
Jun 16 Python
Python实例方法、类方法、静态方法区别详解
Sep 05 Python
用Python可视化新冠疫情数据
Jan 18 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 array_filter除去数组中的空字符元素
2020/06/21 PHP
zend framework框架中url大小写问题解决方法
2014/08/19 PHP
php使用指定编码导出mysql数据到csv文件的方法
2015/03/31 PHP
php从数据库中读取特定的行(实例)
2017/06/02 PHP
Laravel如何友好的修改.env配置文件详解
2017/06/07 PHP
PHP 实现手机端APP支付宝支付功能
2018/06/07 PHP
javascript改变position值实现菜单滚动至顶部后固定
2013/01/18 Javascript
jquery实现div拖拽宽度示例代码
2013/07/31 Javascript
jQuery中empty()方法用法实例
2015/01/16 Javascript
js日期范围初始化得到前一个月日期的方法
2015/05/05 Javascript
js实现短信发送倒计时功能(正则验证)
2017/02/10 Javascript
Angular实现点击按钮控制隐藏和显示功能示例
2017/12/29 Javascript
React路由管理之React Router总结
2018/05/10 Javascript
微信小程序获取当前位置和城市名
2019/11/13 Javascript
解决vue下载后台传过来的乱码流的问题
2020/12/05 Vue.js
python实现爬虫下载美女图片
2015/07/14 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
基于python代码批量处理图片resize
2020/06/04 Python
python 下载文件的多种方法汇总
2020/11/17 Python
清除canvas画布内容(点擦除+线擦除)
2020/08/12 HTML / CSS
日本钓鱼渔具和户外用品网上商店:naturum
2016/08/07 全球购物
猫途鹰:全球领先的旅游点评社区
2017/04/07 全球购物
全球独特生活方式产品和礼品购物网站:AHAlife
2018/09/18 全球购物
UNDONE手表官网:世界领先的定制手表品牌
2018/11/13 全球购物
美国社交购物市场:MassGenie
2019/02/18 全球购物
什么是数据库锁?Oracle中都有哪些类型的锁?
2015/08/21 面试题
饮料业务员岗位职责
2013/12/15 职场文书
建筑系毕业生自我鉴定
2014/01/24 职场文书
婚礼主持词开场白
2014/03/13 职场文书
小学母亲节活动方案
2014/03/14 职场文书
校园歌咏比赛主持词
2014/03/18 职场文书
保险公司晨会主持词
2014/03/22 职场文书
商场主管竞聘书
2014/03/31 职场文书
歌唱比赛策划方案
2014/06/06 职场文书
环卫工人慰问信
2015/02/15 职场文书
环保宣传语大全
2015/07/13 职场文书