计算曲线长度,根据线积分公式:

,令积分函数f(x,y,z) 为1,即计算曲线的长度,将其微元化:

其中

根据此时便可在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微元法计算函数曲线长度的方法相关推荐

  1. python计算长方形周长代码_python微元法计算函数曲线长度的方法

    计算曲线长度,根据线积分公式: ,令积分函数f(x,y,z) 为1,即计算曲线的长度,将其微元化: 其中 根据此时便可在python编程实现,给出4个例子,代码中已有详细注释,不再赘述 ''' 计算曲 ...

  2. python求素数算法_Python程序最多可计算n个质数(使用不同算法)

    python求素数算法 There are various methods through which we can calculate prime numbers upto n. 我们可以通过多种方 ...

  3. python求线段长度_如何用python求线段长度

    我想用Python计算线段的长度(任意数量).我使用了下面的代码,但是我遇到元组不能将减法作为操作数.我怎样才能克服呢?我想知道我是否错过了任何重要的Python概念.在from itertools ...

  4. c语言定积分区间微元面积,定积分的微元法.doc

    8.1 定积分的几何应用 教学目的:使学生理解定积分的元素法:熟练掌握直角坐标系下平面图形的面积及旋转体的体积的计算方法. 教学重点:平面图形的面积及旋转体的体积的计算方法. 定积分的微元法 再看曲边 ...

  5. 旋转曲面的面积——微元法【】

    前言 微元法 前言 定义 注 扩展 定义 注 扩展

  6. 人工智能数学基础---定积分4:使用换元法计算定积分

    一.引言 在<人工智能数学基础–不定积分2:利用换元法求不定积分>介绍了三种换元法求不定积分的方法及案例,在<人工智能数学基础-定积分3:微积分基本公式(牛顿-莱布尼茨公式)> ...

  7. python中向量长度_Python线性代数学习笔记——什么是向量?实现我们自己的向量...

    上一篇已经说明了为什么要学习线性代数? 下面我们正式开始学习 一切从向量开始 什么是向量,究竟为什么引⼊向量? 从研究一个数,变成了研究一组数,向量表示的就是一组数 学过中学物理都知道力,速度,加速度 ...

  8. python求最大值代码_python 最大值

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 推荐使用腾讯云 api 配套的 7 种常见的编程语言 sdk,已经封装了签名和请 ...

  9. python求不规则图形面积_python 微积分之---黎曼和

    黎曼求和 这里有一块形状不规则的土地,要测量它的面积,怎么办呢?一个叫黎曼的德国数学家(Bernhard Riemann, 1826-1866),他想了个办法:将这不规则图形切成一条条的小长条儿,然后 ...

最新文章

  1. QUARK的增强版C-QUARK问世,有效提升蛋白质结构从头预测精度
  2. vue项目中keep-alive的使用,从详情页返回列表时保存浏览位置
  3. 获取SQL Server 2000数据库和表空间使用信息
  4. 一周的微信公众平台接口开发总结
  5. 20171101从现在开始就请有计划的学习吧!
  6. PHP使用Charles抓包手机
  7. React 学习笔记 —— Ref Hook
  8. 剑指offer-JZ9 用两个栈实现队列(C++,附思路)
  9. React Ant design table表单与pagination分页配置
  10. 19.深入浅出:正弦波振荡电路——参考《模拟电子技术基础》清华大学华成英主讲
  11. 千牛2015卖家版官方电脑版
  12. 游戏服务器中的ID生成策略
  13. HDU-4567-思维-Brilliant Programmers Show -13长沙邀请赛
  14. 龙族——路明非真实身份猜想
  15. 获取android模拟器的IP地址
  16. 程序员进阶的五个瞬间,开头就笑了!
  17. 石墨计算机,石墨文档电脑版
  18. excel根据不同的条件模糊匹配,替换,做计算
  19. 【腾讯云的1001种玩法】几种在腾讯云建立WordPress的方法(Linux)(二)
  20. 排版设计常用术语和常识

热门文章

  1. php数组交集方法,PHP获得数组交集与差集的方法
  2. SpringBoot的整合————一些常用工具类依赖及用法总结
  3. 学习Spring Boot:(八)Mybatis使用分页插件PageHelper
  4. android十进制转十六进制算法,十进制转十六进制 代码
  5. 浏览器接收响应数据过大_交互响应性能之优化FID
  6. android js 代码混淆工具,好用的JS(Javascript)混淆加密工具-HDS JSObfuscator 2.14版
  7. Java控制台输入教程~~~~
  8. c语言如何输入矩阵_如何在 COMSOL 软件中调试外部材料
  9. (找规律)Magic of David Copperfield
  10. php李捷,【问题解答】蝶泳手外划的作用