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中管道用法入门实例
Jun 04 Python
Ubuntu下使用python读取doc和docx文档的内容方法
May 08 Python
基于DATAFRAME中元素的读取与修改方法
Jun 08 Python
python对矩阵进行转置的2种处理方法
Jul 17 Python
python pandas cumsum求累计次数的用法
Jul 29 Python
python3文件复制、延迟文件复制任务的实现方法
Sep 02 Python
python十进制转二进制的详解
Feb 07 Python
使用Python+selenium实现第一个自动化测试脚本
Mar 17 Python
使用python-Jenkins批量创建及修改jobs操作
May 12 Python
新版Pycharm中Matplotlib不会弹出独立的显示窗口的问题
Jun 02 Python
详解pandas中利用DataFrame对象的.loc[]、.iloc[]方法抽取数据
Dec 13 Python
django项目中使用云片网发送短信验证码的实现
Jan 19 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中获取远程客户端的真实ip地址的方法
2011/08/03 PHP
解析PHP中ob_start()函数的用法
2013/06/24 PHP
实测在class的function中include的文件中非php的global全局环境
2013/07/15 PHP
微信开发之网页授权获取用户信息(二)
2016/01/08 PHP
jQuery 入门讲解1
2009/04/15 Javascript
javascript中对Attr(dom中属性)的操作示例讲解
2013/12/02 Javascript
jquery实现的导航固定效果
2014/04/28 Javascript
seajs加载jquery时提示$ is not a function该怎么解决
2015/10/23 Javascript
Node.JS利用PhantomJs抓取网页入门教程
2017/05/19 Javascript
AjaxUpLoad.js实现文件上传
2018/03/05 Javascript
关于Mac下安装nodejs、npm和cnpm的教程
2018/04/11 NodeJs
三分钟学会用ES7中的Async/Await进行异步编程
2018/06/14 Javascript
JS实现可针对算术表达式求值的计算器功能示例
2018/09/04 Javascript
jquery实现Ajax请求的几种常见方式总结
2019/05/28 jQuery
使用preload预加载页面资源时注意事项
2020/02/03 Javascript
[03:48]DOTA2完美大师赛主赛事第二日精彩集锦
2017/11/24 DOTA
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
2014/06/18 Python
Python计算一个点到所有点的欧式距离实现方法
2019/07/04 Python
解决Python安装时报缺少DLL问题【两种解决方法】
2019/07/15 Python
对django views中 request, response的常用操作详解
2019/07/17 Python
对python中基于tcp协议的通信(数据传输)实例讲解
2019/07/22 Python
python利用dlib获取人脸的68个landmark
2019/11/27 Python
Pycharm配置PyQt5环境的教程
2020/04/02 Python
python语言是免费还是收费的?
2020/06/15 Python
如何基于Python爬虫爬取美团酒店信息
2020/11/03 Python
HTML5 Canvas实现360度全景图的示例代码
2018/01/29 HTML / CSS
Html5调用手机摄像头并实现人脸识别的实现
2018/12/21 HTML / CSS
教师敬业奉献模范事迹材料
2014/05/18 职场文书
保密工作承诺书
2014/08/29 职场文书
小学趣味运动会加油稿
2014/09/25 职场文书
2015年打非治违工作总结
2015/04/02 职场文书
办公室禁烟通知
2015/04/23 职场文书
资金申请报告范文
2015/05/14 职场文书
2016年暑期见闻作文
2015/11/25 职场文书
人为什么会“幸灾乐祸”?
2019/08/06 职场文书
《最后一头战象》读后感:动物也有感情
2020/01/02 职场文书