服务器之家

服务器之家 > 正文

python微元法计算函数曲线长度的方法

时间:2021-04-17 00:28     来源/作者:落叶_小唱

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

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

python微元法计算函数曲线长度的方法

其中

python微元法计算函数曲线长度的方法

根据此时便可在python编程实现,给出4个例子,代码中已有详细注释,不再赘述

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
'''
计算曲线长度,根据线积分公式:
\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)

得到结果:

?
1
2
3
4
二维圆周长:6.2830
二维参数曲线长度:21.2558
二维曲线长度:128.2037
三维空间曲线长度:25.3421

python微元法计算函数曲线长度的方法

python微元法计算函数曲线长度的方法

python微元法计算函数曲线长度的方法

python微元法计算函数曲线长度的方法

以上这篇python微元法计算函数曲线长度的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。

原文链接:https://blog.csdn.net/ouening/article/details/82698830

标签:

相关文章

热门资讯

2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
Intellij idea2020永久破解,亲测可用!!!
Intellij idea2020永久破解,亲测可用!!! 2020-07-29
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总
苹果12mini价格表官网报价 iPhone12mini全版本价格汇总 2020-11-13
返回顶部