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 相关文章推荐
Django在Win7下的安装及创建项目hello word简明教程
Jul 14 Python
Python如何判断数独是否合法
Sep 08 Python
Python实现七彩蟒蛇绘制实例代码
Jan 16 Python
对pandas中apply函数的用法详解
Apr 10 Python
python opencv 二值化 计算白色像素点的实例
Jul 03 Python
python多线程高级锁condition简单用法示例
Nov 07 Python
python的列表List求均值和中位数实例
Mar 03 Python
Python requests模块cookie实例解析
Apr 14 Python
Python自动发送和收取邮件的方法
Aug 12 Python
Python descriptor(描述符)的实现
Nov 15 Python
详解MindSpore自定义模型损失函数
Jun 30 Python
python 标准库原理与用法详解之os.path篇
Oct 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在线打包程序源码
2008/07/27 PHP
CI框架中类的自动加载问题分析
2016/11/21 PHP
PHP简单实现循环链表功能示例
2017/11/10 PHP
一个js实现的所谓的滑动门
2007/05/23 Javascript
jQuery 使用手册(七)
2009/09/23 Javascript
JavaScript高级程序设计(第3版)学习笔记11 内建js对象
2012/10/11 Javascript
基于datagrid框架的查询
2013/04/08 Javascript
JQuery的$和其它JS发生冲突的快速解决方法
2014/01/24 Javascript
jquery仿搜索自动联想功能代码
2014/05/23 Javascript
Javascript 正则表达式实现为数字添加千位分隔符
2015/03/10 Javascript
js实现鼠标移到链接文字弹出一个提示层的方法
2015/05/11 Javascript
javaScript中push函数用法实例分析
2015/06/08 Javascript
javascript获取wx.config内部字段解决微信分享
2016/03/09 Javascript
详解Vue中状态管理Vuex
2017/05/11 Javascript
ECMAScript6变量的解构赋值实例详解
2017/09/19 Javascript
JS实现二维数组横纵列转置的方法
2018/04/17 Javascript
Vue实现商品分类菜单数量提示功能
2019/07/26 Javascript
layer.confirm点击第一个按钮关闭弹出框的方法
2019/09/09 Javascript
改变layer confirm弹窗按钮的颜色方法
2019/09/12 Javascript
JS校验与最终登陆界面功能完整示例
2020/01/13 Javascript
js实现的订阅发布者模式简单示例
2020/03/14 Javascript
Python算术运算符实例详解
2017/05/31 Python
python 字符串转列表 list 出现\ufeff的解决方法
2017/06/22 Python
答题辅助python代码实现
2018/01/16 Python
Windows下anaconda安装第三方包的方法小结(tensorflow、gensim为例)
2018/04/05 Python
Python面向对象类的继承实例详解
2018/06/27 Python
python3 下载网络图片代码实例
2019/08/27 Python
Python 开发工具通过 agent 代理使用的方法
2020/09/27 Python
python单例模式的应用场景实例讲解
2021/02/24 Python
HTTP状态码详解
2021/03/18 杂记
推荐一些比较有用的css3新属性
2014/11/11 HTML / CSS
西班牙太阳镜品牌:Hawkers
2018/03/11 全球购物
意大利顶级奢侈品电商:LUISAVIAROMA(支持中文)
2020/05/26 全球购物
经济管理毕业生求职信
2014/03/15 职场文书
市政工程技术专业自荐书
2014/07/06 职场文书
周一给客户的问候语
2015/11/10 职场文书