python求线段长度_python微元法计算函数曲线长度的方法
计算曲线长度,根据线积分公式:
,令积分函数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微元法计算函数曲线长度的方法相关推荐
- python计算长方形周长代码_python微元法计算函数曲线长度的方法
计算曲线长度,根据线积分公式: ,令积分函数f(x,y,z) 为1,即计算曲线的长度,将其微元化: 其中 根据此时便可在python编程实现,给出4个例子,代码中已有详细注释,不再赘述 ''' 计算曲 ...
- python求素数算法_Python程序最多可计算n个质数(使用不同算法)
python求素数算法 There are various methods through which we can calculate prime numbers upto n. 我们可以通过多种方 ...
- python求线段长度_如何用python求线段长度
我想用Python计算线段的长度(任意数量).我使用了下面的代码,但是我遇到元组不能将减法作为操作数.我怎样才能克服呢?我想知道我是否错过了任何重要的Python概念.在from itertools ...
- c语言定积分区间微元面积,定积分的微元法.doc
8.1 定积分的几何应用 教学目的:使学生理解定积分的元素法:熟练掌握直角坐标系下平面图形的面积及旋转体的体积的计算方法. 教学重点:平面图形的面积及旋转体的体积的计算方法. 定积分的微元法 再看曲边 ...
- 旋转曲面的面积——微元法【】
前言 微元法 前言 定义 注 扩展 定义 注 扩展
- 人工智能数学基础---定积分4:使用换元法计算定积分
一.引言 在<人工智能数学基础–不定积分2:利用换元法求不定积分>介绍了三种换元法求不定积分的方法及案例,在<人工智能数学基础-定积分3:微积分基本公式(牛顿-莱布尼茨公式)> ...
- python中向量长度_Python线性代数学习笔记——什么是向量?实现我们自己的向量...
上一篇已经说明了为什么要学习线性代数? 下面我们正式开始学习 一切从向量开始 什么是向量,究竟为什么引⼊向量? 从研究一个数,变成了研究一组数,向量表示的就是一组数 学过中学物理都知道力,速度,加速度 ...
- python求最大值代码_python 最大值
广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 推荐使用腾讯云 api 配套的 7 种常见的编程语言 sdk,已经封装了签名和请 ...
- python求不规则图形面积_python 微积分之---黎曼和
黎曼求和 这里有一块形状不规则的土地,要测量它的面积,怎么办呢?一个叫黎曼的德国数学家(Bernhard Riemann, 1826-1866),他想了个办法:将这不规则图形切成一条条的小长条儿,然后 ...
最新文章
- QUARK的增强版C-QUARK问世,有效提升蛋白质结构从头预测精度
- vue项目中keep-alive的使用,从详情页返回列表时保存浏览位置
- 获取SQL Server 2000数据库和表空间使用信息
- 一周的微信公众平台接口开发总结
- 20171101从现在开始就请有计划的学习吧!
- PHP使用Charles抓包手机
- React 学习笔记 —— Ref Hook
- 剑指offer-JZ9 用两个栈实现队列(C++,附思路)
- React Ant design table表单与pagination分页配置
- 19.深入浅出:正弦波振荡电路——参考《模拟电子技术基础》清华大学华成英主讲
- 千牛2015卖家版官方电脑版
- 游戏服务器中的ID生成策略
- HDU-4567-思维-Brilliant Programmers Show -13长沙邀请赛
- 龙族——路明非真实身份猜想
- 获取android模拟器的IP地址
- 程序员进阶的五个瞬间,开头就笑了!
- 石墨计算机,石墨文档电脑版
- excel根据不同的条件模糊匹配,替换,做计算
- 【腾讯云的1001种玩法】几种在腾讯云建立WordPress的方法(Linux)(二)
- 排版设计常用术语和常识
热门文章
- php数组交集方法,PHP获得数组交集与差集的方法
- SpringBoot的整合————一些常用工具类依赖及用法总结
- 学习Spring Boot:(八)Mybatis使用分页插件PageHelper
- android十进制转十六进制算法,十进制转十六进制 代码
- 浏览器接收响应数据过大_交互响应性能之优化FID
- android js 代码混淆工具,好用的JS(Javascript)混淆加密工具-HDS JSObfuscator 2.14版
- Java控制台输入教程~~~~
- c语言如何输入矩阵_如何在 COMSOL 软件中调试外部材料
- (找规律)Magic of David Copperfield
- php李捷,【问题解答】蝶泳手外划的作用