python微元法計(jì)算函數(shù)曲線長度的方法
計(jì)算曲線長度,根據(jù)線積分公式:
,令積分函數(shù) f(x,y,z) 為1,即計(jì)算曲線的長度,將其微元化:

其中

根據(jù)此時(shí)便可在python編程實(shí)現(xiàn),給出4個(gè)例子,代碼中已有詳細(xì)注釋,不再贅述
'''
計(jì)算曲線長度,根據(jù)線積分公式:
\int_A^Bf(x,y,z)dl,令積分函數(shù)為1,即計(jì)算曲線的長度
'''
import numpy as np
from mpl_toolkits.mplot3d import *
import matplotlib.pyplot as plt
## 求二維圓周長,半徑為1,采用參數(shù)形式
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)):
# 計(jì)算每一微小步長的曲線長度,dx = x_{i}-x{i-1},索引從1開始
dl_i = np.sqrt( (x[i]-x[i-1])**2 + (y[i]-y[i-1])**2 )
# 將計(jì)算結(jié)果存儲起來
area_list.append(dl_i)
area = sum(area_list)# 求和計(jì)算曲線在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()
## 二維空間曲線,采用參數(shù)形式
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 = [] # 存儲每一微小步長的曲線長度
# 下面的方式是循環(huán)實(shí)現(xiàn)
# for i in range(1,len(t)):
# # 計(jì)算每一微小步長的曲線長度,dx = x_{i}-x{i-1},索引從1開始
# dl_i = np.sqrt( (x[i]-x[i-1])**2 + (y[i]-y[i-1])**2 )
# # 將計(jì)算結(jié)果存儲起來
# 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)# 求和計(jì)算曲線在t:[0,2*pi]的長度
print("二維參數(shù)曲線長度:{:.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)):
# # 計(jì)算每一微小步長的曲線長度,dx = x_{i}-x{i-1},索引從1開始
# dl_i = np.sqrt( (x[i]-x[i-1])**2 + (y[i]-y[i-1])**2 )
# # 將計(jì)算結(jié)果存儲起來
# 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)# 求和計(jì)算曲線在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()
## 三維空間曲線,采用參數(shù)形式
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)):
# 計(jì)算每一微小步長的曲線長度,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 )
# 將計(jì)算結(jié)果存儲起來
area_list.append(dl_i)
area = sum(area_list)# 求和計(jì)算曲線在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)
得到結(jié)果:
二維圓周長:6.2830 二維參數(shù)曲線長度:21.2558 二維曲線長度:128.2037 三維空間曲線長度:25.3421




以上這篇python微元法計(jì)算函數(shù)曲線長度的方法就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解Python的hasattr() getattr() setattr() 函數(shù)使用方法
這篇文章主要介紹了詳解Python的hasattr() getattr() setattr() 函數(shù)使用方法,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-07-07
Pycharm運(yùn)行加載文本出現(xiàn)錯(cuò)誤的解決方法
今天小編就為大家分享一篇Pycharm運(yùn)行加載文本出現(xiàn)錯(cuò)誤的解決方法,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-06-06
Python OpenCV之圖片縮放的實(shí)現(xiàn)(cv2.resize)
這篇文章主要介紹了Python OpenCV之圖片縮放的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-06-06
Python之torch.no_grad()函數(shù)使用和示例
這篇文章主要介紹了Python之torch.no_grad()函數(shù)使用和示例,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
python實(shí)現(xiàn)跨excel sheet復(fù)制代碼實(shí)例
這篇文章主要介紹了python實(shí)現(xiàn)跨excel sheet復(fù)制代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
Python利用函數(shù)式編程實(shí)現(xiàn)優(yōu)化代碼
函數(shù)式編程(Functional Programming)是一種編程范式,它將計(jì)算視為函數(shù)的求值,并且避免使用可變狀態(tài)和循環(huán),在Python中還可以利用它的簡潔和高效來解決實(shí)際問題,下面我們就來學(xué)習(xí)一下它的具體用法吧2023-11-11
提升Python Web應(yīng)用性能的10個(gè)關(guān)鍵技巧
Python作為一種強(qiáng)大的編程語言,在Web開發(fā)領(lǐng)域也有著廣泛的應(yīng)用,通過結(jié)合Python的靈活性和一些高性能的框架和工具,我們可以構(gòu)建出高性能的Web應(yīng)用程序,本文將介紹一些關(guān)鍵的技術(shù)和方法,幫助你在Python環(huán)境下構(gòu)建高性能的Web應(yīng)用程序,需要的朋友可以參考下2024-07-07
python實(shí)現(xiàn)健康碼查驗(yàn)系統(tǒng)
這篇文章主要介紹了?python實(shí)現(xiàn)健康碼查驗(yàn)系統(tǒng),主要用到的是python用了opencv庫和pyzbar庫,文中給大家提供一段代碼判斷是否綠碼,需要的朋友可以參考下2022-04-04

