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实现将绝对URL替换成相对URL的方法
Jun 28 Python
浅谈插入排序算法在Python程序中的实现及简单改进
May 04 Python
python 中的divmod数字处理函数浅析
Oct 17 Python
pycharm使用matplotlib.pyplot不显示图形的解决方法
Oct 28 Python
基于树莓派的语音对话机器人
Jun 17 Python
python命令行参数用法实例分析
Jun 25 Python
python 进程 进程池 进程间通信实现解析
Aug 23 Python
Python缓存技术实现过程详解
Sep 25 Python
Python二元赋值实用技巧解析
Oct 25 Python
opencv python Canny边缘提取实现过程解析
Feb 03 Python
Python列表如何更新值
May 27 Python
Python中Selenium库使用教程详解
Jul 23 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
PHP4在Windows2000下的安装
2006/10/09 PHP
php顺序查找和二分查找示例
2014/03/27 PHP
PHP两种快速排序算法实例
2015/02/15 PHP
JavaScript的目的分析
2007/01/05 Javascript
jQuery 可以拖动的div实现代码 脚本之家修正版
2009/06/26 Javascript
与jquery serializeArray()一起使用的函数,主要来方便提交表单
2011/01/31 Javascript
按钮JS复制文本框和表格的代码
2011/04/01 Javascript
JQuery插件Style定制化方法的分析与比较
2012/05/03 Javascript
JavaScript模板入门介绍
2012/09/26 Javascript
jquery ajax 简单范例(界面+后台)
2013/11/19 Javascript
javascript 获取iframe里页面中元素值的方法
2014/02/17 Javascript
JS生成不重复随机数组的函数代码
2014/06/10 Javascript
javascript中clipboardData对象用法详解
2015/05/13 Javascript
jQuery仿gmail实现fixed布局的方法
2015/05/27 Javascript
学习Bootstrap滚动监听 附调用方法
2016/07/02 Javascript
微信小程序 教程之事件
2016/10/18 Javascript
JavaScript的事件机制详解
2017/01/17 Javascript
angularjs过滤器--filter与ng-repeat配合有奇效
2017/04/20 Javascript
纯JavaScript实现实时反馈系统时间
2017/10/26 Javascript
vue实现登录、注册、退出、跳转等功能
2020/12/23 Vue.js
[01:43]倾听DOTA2英雄之声 魅惑魔女国服配音鉴赏
2013/06/06 DOTA
wxPython 入门教程
2008/10/07 Python
用Python进行一些简单的自然语言处理的教程
2015/03/31 Python
Python常见工厂函数用法示例
2018/03/21 Python
强悍的Python读取大文件的解决方案
2019/02/16 Python
Python获取一个用户名的组ID过程解析
2019/09/03 Python
Python 判断时间是否在时间区间内的实例
2020/05/16 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
2021/01/06 Python
HTML5离线缓存Manifest是什么
2016/03/09 HTML / CSS
我的珠宝盒:Ma boîte à bijoux
2019/08/27 全球购物
adidas爱尔兰官方网站:阿迪达斯运动鞋和运动服
2019/11/01 全球购物
幼儿园家长评语
2014/02/10 职场文书
央视元宵晚会主持串词
2014/03/25 职场文书
镇副书记专题民主生活会对照检查材料思想汇报
2014/10/02 职场文书
唱歌比赛拉拉队口号
2015/12/25 职场文书
初中生入团申请书范文(五篇)
2019/10/16 职场文书