最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用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繪制3D曲面圖的示例代碼

    Python繪制3D曲面圖的示例代碼

    Python提供了多種庫和工具,使得創(chuàng)建和定制3D曲面圖變得簡單,本文將介紹如何使用Matplotlib和mpl_toolkits.mplot3d庫繪制3D曲面圖,感興趣的可以了解下
    2024-04-04
  • 如何理解Python中包的引入

    如何理解Python中包的引入

    在本篇文章里小編給各位分享的是一篇關(guān)于Python中包的引入詳解內(nèi)容,需要的朋友們可以參考學(xué)習(xí)下。
    2020-05-05
  • 詳解Python查找算法的實現(xiàn)(線性,二分,分塊,插值)

    詳解Python查找算法的實現(xiàn)(線性,二分,分塊,插值)

    這篇文章主要為大家介紹了Python中常見的四種查找算法的實現(xiàn):線性、二分、分塊和插值,文中通過圖片詳細講解了它們實現(xiàn)的原理與代碼,需要的可以參考一下
    2022-04-04
  • Python實現(xiàn)數(shù)據(jù)集自動劃分的示例代碼(訓(xùn)練集/驗證集/測試集)

    Python實現(xiàn)數(shù)據(jù)集自動劃分的示例代碼(訓(xùn)練集/驗證集/測試集)

    本文提供了一段Python腳本,用于自動將數(shù)據(jù)集按照指定比例劃分為訓(xùn)練集、驗證集和測試集,并保證結(jié)果可復(fù)現(xiàn),腳本涵蓋了目錄設(shè)置、文件讀取與劃分、文件復(fù)制及結(jié)果輸出等步驟,適用于深度學(xué)習(xí)模型的訓(xùn)練與評估,需要的朋友可以參考下
    2026-04-04
  • Python中的單行、多行、中文注釋方法

    Python中的單行、多行、中文注釋方法

    今天小編就為大家分享一篇Python中的單行、多行、中文注釋方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-07-07
  • python學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)實例代碼

    python學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)實例代碼

    數(shù)據(jù)結(jié)構(gòu)就是用來將數(shù)據(jù)組織在一起的結(jié)構(gòu)。換句話說,數(shù)據(jù)結(jié)構(gòu)是用來存儲一系列關(guān)聯(lián)數(shù)據(jù)的東西。在Python中有四種內(nèi)建的數(shù)據(jù)結(jié)構(gòu),分別是List、Tuple、Dictionary以及Set。本文將通過實例來介紹這些數(shù)據(jù)結(jié)構(gòu)的用法。
    2015-05-05
  • pandas apply使用多列計算生成新的列實現(xiàn)示例

    pandas apply使用多列計算生成新的列實現(xiàn)示例

    這篇文章主要介紹了pandas apply使用多列計算生成新的列實現(xiàn)示例,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-02-02
  • PyQt5 實現(xiàn)給無邊框widget窗口添加背景圖片

    PyQt5 實現(xiàn)給無邊框widget窗口添加背景圖片

    這篇文章主要介紹了PyQt5 實現(xiàn)給無邊框widget窗口添加背景圖片的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-03-03
  • 如何使用Pytorch搭建模型

    如何使用Pytorch搭建模型

    本來是只用Tenorflow的,但是因為TF有些Numpy特性并不支持,比如對數(shù)組使用列表進行切片,所以只能轉(zhuǎn)戰(zhàn)Pytorch了(pytorch是支持的)。還好Pytorch比較容易上手,幾乎完美復(fù)制了Numpy的特性(但還有一些特性不支持),怪不得熱度上升得這么快。
    2020-10-10
  • python實現(xiàn)WebP格式轉(zhuǎn)成JPG、PNG和JPEG的方法

    python實現(xiàn)WebP格式轉(zhuǎn)成JPG、PNG和JPEG的方法

    平時在網(wǎng)上搜索圖片,另存為時常常遇到 WebP 格式,而非常見的 JPG、PNG、JPEG 格式,所以以此文記錄一下WebP的讀取和轉(zhuǎn)換方法,希望對大家有所幫助,需要的朋友可以參考下
    2024-06-06

最新評論

寿光市| 乐安县| 朝阳县| 安图县| 平罗县| 开江县| 肥乡县| 孙吴县| 清流县| 连山| 偃师市| 麻江县| 石楼县| 牙克石市| 新化县| 武穴市| 鱼台县| 金川县| 洛川县| 中宁县| 万源市| 蚌埠市| 微山县| 邢台县| 广灵县| 渝北区| 陆丰市| 仪征市| 黄骅市| 江安县| 上思县| 屏东县| 赣榆县| 揭阳市| 东阳市| 广宗县| 泗阳县| 兰州市| 建宁县| 英超| 建始县|