離散點擬合 python

2021-10-12 07:02:06 字數 3935 閱讀 5206

)# 對每個點代入公式求和

for i in

range(0

,len

(data)):

x = data[i,0]

y = data[i,1]

tmp = w_current * x + b_current - y

b_sum += tmp

w_sum += tmp * x

# 用公式求當前梯度

grad_w =

2/ m * w_sum

grad_b =

2/ m * b_sum

# 梯度下降,更新當前的w和b

b_new = b_current - alpha * grad_b

w_new = w_current - alpha * grad_w

return

[b_new, w_new]

defgradient_descent

(data, b_start, w_start, alpha, num_iterations)

: b = b_start

w = w_start

# 儲存所有的損失函式值,用來顯示下降過程

cost_list=

for i in

range

(num_iterations):)

b_new, w_new = step_gradient(b, w, data, alpha)

b = b_new

w = w_new

return

[b, w, cost_list]

# create data

b_start =

1w_start =

1alpha =

float

(input

("步長:"))

num_iterations =

int(

input

("迭代次數:"))

data =[[

0.0,0]

,[0.9,10]

,[1.9,30]

,[3.0,50]

,[3.9,80]

,[5.0,

110]

]data = np.array(data)

x = data[:,

0]y = data[:,

1]# train

b_now, w_now, cost_list = gradient_descent(data, b_start, w_start, alpha, num_iterations)

print

("w is :"

, w_now)

print

("b is :"

, b_now)

print

("運動方程s=%f*t+(%f)"

%(w_now, b_now)

)# 精確值

p = np.polyfit(x, y, deg=1)

print

("參考係數:"

, p)

# plot

plt.scatter(x, y)

ori_y = x * w_start + b_start

plt.plot(x, ori_y, color=

"green"

, label=

"origin"

)pre_y = w_now * x + b_now

plt.plot(x, pre_y, color=

"red"

, label=

"fit"

)plt.xlabel(

"x")

plt.ylabel(

"y")

plt.legend(

)plt.figure(

)cost = cost_function(w_now, b_now, data)

# print("cost_list:", cost_list)

print

("cost is:"

, cost)

plt.plot(cost_list)

plt.show(

)

import numpy as np

import matplotlib.pyplot as plt

from scipy.optimize import curve_fit

# 原始散點座標

x =[70,

100,

120,

150,

180,

200]

y =[

0.95

,0.85

,0.5

,0.2

,0.05,0

]xd = np.array([70

,100

,120

,150

,180])

yd = np.log(np.array(

[0.95

,0.85

,0.5

,0.2

,0.05])

)# 表示式

deffunc

(x, d, n)

:return

- np.power(x / d, n)

# 非線性最小二乘擬合

popt, pcov = curve_fit(func, xd, yd)

# 獲取popt裡的擬合係數

d = popt[0]

n = popt[1]

# 擬合yd的值

yvals = np.exp(func(x, d, n)

)print

("d:"

, d)

print

("n:"

, n)

# 繪圖

plt.figure(

)plt.plot(x, y,

'd', label=

"original values"

)xx = np.linspace(70,

200,50)

y_vals = np.exp(func(xx, d, n)

)plt.plot(xx, y_vals,

'r', label=

"$fit: y_d = e^)^}$"

%tuple

(popt)

)plt.xlabel(

"diameter"

)plt.ylabel(

"mass fraction"

)plt.legend(loc=1)

# 圖例位置

plt.show(

)

MATLAB 離散點的圓弧擬合

最近做專案,會遇到很多資料擬合的問題,通常在網上搜尋時會看到很多 乙個個嘗試有對有錯,下面根據專案進展情況總結一下用到的相關知識。都是由本人親測,雖然簡單但是絕對正確的 首先是圓弧擬合的 由離散點擬合 t1為二維矩陣,t1的第一行為x軸的資料點,t1的第二行為y軸的資料點,用 表示為 t1 1,x,...

matlab進行離散點的曲線擬合

ployfit是matlab中基於最小二乘法的多項式擬合函式。最基礎的用法如下 c polyfit x,y,n 其中 x 需要擬合的點的橫座標 y 需要擬合的點的縱座標 n 以n階多項式進行擬合 c 返回的n 1個擬合係數。y polyval c,x 其中 c n 1個擬合係數 y 根據x 橫座標 ...

空間離散點擬合成空間平面

空間中的離散點得到擬合平面,其實這就是乙個最優化的過程。即求這些點到某個平面距離和最小的問題。我們知道乙個先驗訊息,那就是該平面一定會過眾散點的平均值。接著我們需要做的工作就是求這個平面的法向量。根據協方差矩陣的svd變換,最小奇異值對應的奇異向量就是平面的方向。隨機生成一組 x,y,z 這些點的座...