欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

使用Python實現(xiàn)3D曲線擬合

 更新時間:2023年11月21日 08:40:37   作者:python收藏家  
曲線擬合是數(shù)據(jù)分析和數(shù)學(xué)建模領(lǐng)域中廣泛使用的技術(shù),它涉及到尋找最接近一組數(shù)據(jù)點的數(shù)學(xué)函數(shù)的過程,本文我們將討論如何使用SciPy庫在Python中執(zhí)行3D曲線擬合,感興趣的小伙伴可以了解下

曲線擬合是數(shù)據(jù)分析和數(shù)學(xué)建模領(lǐng)域中廣泛使用的技術(shù)。它涉及到尋找最接近一組數(shù)據(jù)點的數(shù)學(xué)函數(shù)的過程。在3D曲線擬合中,該過程被擴展到三維空間,其中的目標是找到最好地表示一組3D數(shù)據(jù)點的函數(shù)。

Python是一種用于科學(xué)計算的流行編程語言,它提供了幾個可用于3D曲線擬合的庫。在本文中,我們將討論如何使用SciPy庫在Python中執(zhí)行3D曲線擬合。

SciPy庫

SciPy庫是Python中用于科學(xué)計算的強大工具。它為優(yōu)化、積分、插值和曲線擬合提供了廣泛的功能。在本文中,我們將重點介紹該庫的曲線擬合功能。

SciPy提供了curve_fit函數(shù),可用于在Python中執(zhí)行曲線擬合。該函數(shù)將待擬合的數(shù)據(jù)點和待用于擬合的數(shù)學(xué)函數(shù)作為輸入。然后,該函數(shù)返回最接近輸入數(shù)據(jù)的數(shù)學(xué)函數(shù)的優(yōu)化參數(shù)。

讓我們來看看使用Python中的SciPy庫對100個隨機生成的點進行3D曲線擬合的完整分步過程。

需要安裝庫:

pip install numpy
pip install scipy
pip install matplotlib

Python中的3D曲線擬合

現(xiàn)在讓我們看看如何使用SciPy庫在Python中執(zhí)行3D曲線擬合。我們將首先使用NumPy庫生成一些隨機的3D數(shù)據(jù)點。

import numpy as np

# Generate random 3D data points
x = np.random.random(100)
y = np.random.random(100)
z = np.sin(x * y) + np.random.normal(0, 0.1, size=100)
data = np.array([x, y, z]).T

我們已經(jīng)在3D空間中生成了100個隨機數(shù)據(jù)點,其中z坐標被定義為具有一些添加的噪聲的x和y坐標的函數(shù)。

接下來,我們將定義用于曲線擬合的數(shù)學(xué)函數(shù)。在這個例子中,我們將使用一個簡單的3次多項式函數(shù)。

def func(xy, a, b, c, d, e, f):
    x, y = xy
    return a + b*x + c*y + d*x**2 + e*y**2 + f*x*y

該函數(shù)將數(shù)據(jù)點的x和y坐標以及六個參數(shù)a、b、c、d、e和f作為輸入。這些參數(shù)是在曲線擬合期間將被優(yōu)化的多項式函數(shù)的系數(shù)。

我們現(xiàn)在可以使用SciPy庫中的curve_fit函數(shù)執(zhí)行曲線擬合。

from scipy.optimize import curve_fit

# Perform curve fitting
popt, pcov = curve_fit(func, (x, y), z)

# Print optimized parameters
print(popt)

輸出

[ 0.04416919 -0.12960835 -0.11930051  0.16187097  0.1731539   0.85682108]

curve_fit函數(shù)將用于曲線擬合的數(shù)學(xué)函數(shù)和要擬合的數(shù)據(jù)點作為輸入。它返回兩個數(shù)組,popt和pcov。popt數(shù)組包含數(shù)學(xué)函數(shù)的參數(shù)的優(yōu)化值,pcov數(shù)組包含參數(shù)的協(xié)方差矩陣。

Python中的curve_fit()函數(shù)用于執(zhí)行非線性回歸曲線擬合。它使用最小二乘優(yōu)化方法來找到最適合給定數(shù)據(jù)集的用戶定義函數(shù)的優(yōu)化參數(shù)。

關(guān)于popt和pcov

popt和pcov是Python中curve_fit()函數(shù)的兩個輸出。popt是擬合函數(shù)的優(yōu)化參數(shù)的1-D陣列,而pcov是優(yōu)化參數(shù)的估計協(xié)方差矩陣。

通過使用最小二乘優(yōu)化算法最小化擬合函數(shù)和實際數(shù)據(jù)點之間的殘差平方和來計算Popt。curve_fit()函數(shù)使用Levenberg-Marquardt算法來執(zhí)行此優(yōu)化。該算法迭代地調(diào)整參數(shù)值,以最小化目標函數(shù),直到收斂。

使用優(yōu)化參數(shù)值處的目標函數(shù)的梯度的協(xié)方差矩陣來估計pcov。pcov的對角元素表示優(yōu)化參數(shù)的方差,非對角元素表示參數(shù)之間的協(xié)方差。pcov用于估計優(yōu)化參數(shù)值的不確定性。

我們現(xiàn)在可以使用優(yōu)化的參數(shù)在3D空間中繪制擬合曲線。

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# Create 3D plot of the data points and the fitted curve
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z, color='blue')
x_range = np.linspace(0, 1, 50)
y_range = np.linspace(0, 1,
X, Y = np.meshgrid(x_range, y_range)
Z = func(X, Y, *popt)
ax.plot_surface(X, Y, Z, color='red', alpha=0.5)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()

輸出

上面的代碼創(chuàng)建了數(shù)據(jù)點和擬合曲線的3D圖。藍點表示原始數(shù)據(jù)點,紅色表面表示擬合曲線。

完整代碼

現(xiàn)在,下面是完整的代碼,展示了我們?nèi)绾问褂肧ciPy庫在Python中進行3D曲線擬合。

import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

# Generate random 3D data points
x = np.random.random(100)
y = np.random.random(100)
z = np.sin(x * y) + np.random.normal(0, 0.1, size=100)
data = np.array([x, y, z]).T

# Define mathematical function for curve fitting
def func(xy, a, b, c, d, e, f):
	x, y = xy
	return a + b*x + c*y + d*x**2 + e*y**2 + f*x*y

# Perform curve fitting
popt, pcov = curve_fit(func, (x, y), z)

# Print optimized parameters
print(popt)

# Create 3D plot of the data points and the fitted curve
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.scatter(x, y, z, color='blue')
x_range = np.linspace(0, 1, 50)
y_range = np.linspace(0, 1, 50)
X, Y = np.meshgrid(x_range, y_range)
Z = func((X, Y), *popt)
ax.plot_surface(X, Y, Z, color='red', alpha=0.5)
ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')
plt.show()

輸出

樣條插值

樣條插值是一種使用分段多項式函數(shù)擬合一組數(shù)據(jù)點的插值方法。插值函數(shù)是通過將數(shù)據(jù)劃分為更小的子集或“段”,并將低次多項式擬合到每個段來構(gòu)造的。然后,這些多項式段在稱為節(jié)點的點處連接在一起,形成連續(xù)且平滑的插值。

scipy庫提供了幾個樣條插值函數(shù),例如interp2d和Rbf。

import numpy as np
from scipy.interpolate import Rbf
import matplotlib.pyplot as plt

# Generate random 3D data points
x = np.linspace(-5, 5, 100)
y = np.linspace(-5, 5, 100)
X, Y = np.meshgrid(x, y)
Z = np.cos(np.sqrt(X**2 + Y**2))
# Fit a radial basis function model
rbf = Rbf(X, Y, Z, function="quintic")
Z_pred = rbf(X, Y)

# Plot the original data and the fitted function
fig = plt.figure()
ax = fig.add_subplot(projection="3d")
ax.plot_surface(X, Y, Z)
ax.plot_surface(X, Y, Z_pred)
plt.show()

輸出

在本文中,我們討論了如何使用SciPy庫在Python中執(zhí)行3D曲線擬合。我們生成了一些隨機的3D數(shù)據(jù)點,定義了一個多項式函數(shù)用于曲線擬合,并使用曲線擬合函數(shù)來找到函數(shù)的優(yōu)化參數(shù)。然后,我們使用這些參數(shù)在3D空間中繪制擬合曲線。

曲線擬合是數(shù)據(jù)分析和數(shù)學(xué)建模的強大技術(shù),Python提供了幾個庫,可以輕松執(zhí)行曲線擬合。SciPy庫是Python中曲線擬合的熱門選擇,它提供了幾個可用于1D,2D和3D空間中曲線擬合的函數(shù)。

以上就是使用Python實現(xiàn)3D曲線擬合的詳細內(nèi)容,更多關(guān)于Python曲線擬合的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • Python編程對列表中字典元素進行排序的方法詳解

    Python編程對列表中字典元素進行排序的方法詳解

    這篇文章主要介紹了Python編程對列表中字典元素進行排序的方法,涉及Python針對列表及字典元素的遍歷、讀取、轉(zhuǎn)換相關(guān)操作技巧,需要的朋友可以參考下
    2017-05-05
  • 關(guān)于Theano和Tensorflow多GPU使用問題

    關(guān)于Theano和Tensorflow多GPU使用問題

    這篇文章主要介紹了關(guān)于Theano和Tensorflow多GPU使用問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python中用pycurl監(jiān)控http響應(yīng)時間腳本分享

    Python中用pycurl監(jiān)控http響應(yīng)時間腳本分享

    這篇文章主要介紹了Python中用pycurl監(jiān)控http響應(yīng)時間腳本分享,本文腳本實現(xiàn)監(jiān)控http相應(yīng)碼,響應(yīng)大小,建立連接時間,準備傳輸時間,傳輸?shù)谝粋€字節(jié)時間,完成時間,需要的朋友可以參考下
    2015-02-02
  • simple-pytest?框架使用教程

    simple-pytest?框架使用教程

    simple-pytest框架主要參考了httprunner的yaml數(shù)據(jù)驅(qū)動部分設(shè)計思路,是基于Pytest?+?Pytest-html+?Log?+?Yaml?+?Mysql?實現(xiàn)的簡易版接口自動化框架,這篇文章主要介紹了simple-pytest?框架使用指南,需要的朋友可以參考下
    2024-02-02
  • Python機器學(xué)習(xí)庫之Scikit-learn基本用法詳解

    Python機器學(xué)習(xí)庫之Scikit-learn基本用法詳解

    Scikit-learn?是?Python?中最著名的機器學(xué)習(xí)庫之一,它提供了大量實用的機器學(xué)習(xí)算法以及相關(guān)的工具,可以方便我們進行數(shù)據(jù)挖掘和數(shù)據(jù)分析,在這篇文章中,我們將介紹?Scikit-learn?的基本使用,包括如何導(dǎo)入數(shù)據(jù)、預(yù)處理數(shù)據(jù)、選擇和訓(xùn)練模型,以及評估模型的性能
    2023-07-07
  • python 使用socket傳輸圖片視頻等文件的實現(xiàn)方式

    python 使用socket傳輸圖片視頻等文件的實現(xiàn)方式

    這篇文章主要介紹了python 使用socket傳輸圖片視頻等文件的實現(xiàn)方式,本文給出了實例代碼,需要的朋友可以參考下
    2019-08-08
  • 如何用python整理附件

    如何用python整理附件

    本篇文章給大家整理了關(guān)于如何用python整理附件的相關(guān)知識點,學(xué)習(xí)python的朋友可以跟著測試下。
    2018-05-05
  • vue防止用戶連續(xù)點擊造成多次提交的三種解決方法

    vue防止用戶連續(xù)點擊造成多次提交的三種解決方法

    本文主要介紹了vue防止用戶連續(xù)點擊造成多次提交的三種解決方法,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-03-03
  • Python?pyecharts?Boxplot箱線圖的實現(xiàn)

    Python?pyecharts?Boxplot箱線圖的實現(xiàn)

    本文主要介紹了Python?pyecharts?Boxplot箱線圖的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-05-05
  • 純用NumPy實現(xiàn)神經(jīng)網(wǎng)絡(luò)的示例代碼

    純用NumPy實現(xiàn)神經(jīng)網(wǎng)絡(luò)的示例代碼

    這篇文章主要介紹了純用NumPy實現(xiàn)神經(jīng)網(wǎng)絡(luò)的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-10-10

最新評論