python微元法計算函式曲線長度的方法

2022-10-04 18:42:14 字數 3488 閱讀 3681

計算曲線長度,根據線積分公式:

,令積分函式f(x,y,z)為1,即計算曲線的長度,將其微元化:

其中根據此時便可在python程式設計實現,給出4個例子,**中已有詳細注釋,不再贅述

'''計算曲線長度,根據線積分公式:

\int_a^bf(x,y,z)dl,令積分函式為1,即計算曲線的長度

'''import numpitswjdymy as np

from mpl_toolkits.mplot3d import *

import matplotlib.pyplot as plt

## 求二維圓周長,半徑為採用引數形式

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_-x,索引從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("二維圓周長:".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_-x,索引從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("二維引數曲線長度:".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_-x,索引從1開始

# dl_i = (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("二維曲線長度:".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_-x,索引從1開始

dl_i = np.sqrt( (x[i]-x[i-1])**2 + (y[i]-y[i-1])**2 + (z[i]-z[i-1])**2 )

# 將計算結果儲存起來

areitswjdyma_list.append(dl_i)

area = sum(area_list)# 求和計算曲線在t:[0,2*pi]的長度

print("三維空間曲線長度:".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計算ROC曲線和面積AUC

roc曲線是根據一系列不同的二分類方式 分界值或決定閾 以真正率 也就是靈敏度 true positive rate,tpr 為縱座標,假正率 1 特效性 false positive rate,fpr 為橫座標繪製的曲線。通過將連續變數設定出多個不同的臨界值,從而計算出一系列敏感性和特異性,從而可...

高斯消元法的python實現

高斯消元法是解線性方程組的一種常見的方法,下面是高斯消元法的實現過程,下面的演算法僅能解決各主元素不為0的情況。下面是演算法的實現思路 1.演算法總共分為兩大步驟,第乙個步驟是將增廣矩陣消元形成上三角矩陣,第二個步驟是從下向上進行回帶完成解方程的步驟。2.在第乙個步驟裡總共有三重迴圈 1 第一重迴圈...

高斯消元法的Python實現

coding utf8 import numpy as np 設定矩陣 def getinput matrix a np.mat 2,3,11,5 1,1,5,2 2,1,3,2 1,1,3,4 dtype float matrix b np.mat 2,1,3,3 答案 2 0 1 1 retur...