a
= np.
vander
(x,2
) #生成矩陣(資料,輸出列數)
c= np.
diag
(yerr * yerr)
ata= np.
dot(a.
t,a/
(yerr **2)
[:, none]
) #獲取乘積
cov = np.linalg.
inv(
ata)
w = np.linalg.
solve
(ata
, np.
dot(a.
t, y / yerr **2)
)
np.diag(array) 中,array是乙個1維陣列時,結果形成乙個以一維陣列為對角線元素的矩陣,array是乙個二維矩陣時,結果輸出矩陣的對角線元素。
np.linalg.inv():矩陣求逆
numpy.linalg.solve(a, b)以矩陣形式解乙個線性矩陣方程,或線性標量方程組。a為係數矩陣,b為縱座標或引數值
其中y為y的列矩陣
a為x的二維矩陣(結構解釋在之後)
c為方差的對角矩陣
設[m b]t =x
則 ax=y,即 mx+b=y
atc-1ax=atc-1y
所以 x=[atc-1a]-1 atc-1y
**中的ata即atc-1a
詳情參考:
def fund
(x,a,b)
: b=
-b i=np.
log10
(x+a)
n=b*i
return nx=[
]x = np.
array
(x)y =
#使y變為陣列格式
y = np.
array
(y)#求lgy
#y=np.
log10
(y)
#y的誤差
yerr =
yerr = np.
array
(yerr)
#求lgyerr
#yerr=np.
log10
(yerr)
#擬合函式,其中popt是引數結果集,pcov是方差集,curve_fit引數中,found是目標函式格式,sigma是y的誤差值
popt, pcov =
curve_fit
(fund, x, y,sigma=yerr)
#y2為求出擬合函式**的y值,方便畫圖對比評估擬合效果
y2 =
[fund
(i,popt[0]
,popt[1]
)for i in x]
plt.
axes
(yscale =
"log"
)plt.
axes
(xscale =
"log"
)plt.
loglog
(x, y1,
"k", marker=
'.')
plt.
loglog
(x, y3,
"g",
'r--'
)plt.
show()
print
(popt)
print
(pcov)
缺點:無法求出具體引數值
x=
x = np.
array
(x)y =
y = np.
log10
(np.
array
(y))
x= np.
reshape
(x,(25,
1))y
= np.
reshape
(y,(25,
1))with tf.
name_scope
('input'):
xin = tf.
placeholder
('float'
, shape=
[none,1]
) yin = tf.
placeholder
('float'
, shape=
[none,1]
)with tf.
name_scope
('layer'):
w1= tf.
variable
(tf.
random_normal([
1,4]
, mean=
1, stddev=
0.2)
, name=
'w1'
) b1 = tf.
variable
(tf.
constant
(0.1
, shape=[4
], dtype=tf.float32)
, name=
'b1'
) out1 = tf.nn.
sigmoid
(tf.
add(tf.
matmul
(xin,w1)
, b1)
)with tf.
name_scope
('output'):
w2= tf.
variable
(tf.
random_normal([
4,1]
, mean=
1, stddev=
0.2)
, name=
'w2'
) b2 = tf.
variable
(tf.
constant
(0.1
, shape=[1
], dtype=tf.float32)
, name=
'b2'
) out2 = tf.
add(tf.
matmul
(out1,w2)
, b2)
with tf.
name_scope
('evaluate'):
loss = tf.
reduce_mean
(tf.
square
(out2 - yin)
) trainstep = tf.train.
gradientdescentoptimizer
(0.1).
minimize
(loss)
# %% train
with tf.
session()
as sess:
step =
0 sess.
run(tf.
global_variables_initializer()
)while step <
5000
: tstep = sess.
run(trainstep, feed_dict=
)if step %3==
0:loss = sess.
run(loss, feed_dict=
)print
('train step: '
, tstep)
print
('loss: '
, loss)
step +=
1 # print
(sess.
run(w1)
) # print
(sess.
run(b1)
) # print
(sess.
run(w2)
) # print
(sess.
run(b2)
) # test
y_= sess.
run(out2, feed_dict=
) # print
(sess.
run(feed_dict=))
plt.
plot(x
,y,x
,y_)plt.
show
()
線性擬合函式
線性擬合函式 regress 呼叫格式 b regress y,x b,bint,r,rint,stats regress y,x b,bint,r,rint,stats regress y,x,alpha 該函式求解線性模型 y x 是p 1的引數向量 是服從標準正態分佈的隨機干擾的n 1的向量 ...
polyfit線性擬合函式
polyfit函式是matlab中用於進行曲線擬合的乙個函式。其數學基礎是最小二乘法曲線擬合原理。曲線擬合 已知離散點上的資料集,即已知在點集上的函式值,構造乙個解析函式 其圖形為一曲線 使在原離散點上盡可能接近給定的值。呼叫方法 polyfit x,y,n 用多項式求過已知點的表示式,其中x為源資...
scala函式定義的幾種方法
scala看了有幾天了,也試著寫了 hello world 今天試著練習伴生物件的時候,突然搞不明白scala伴生物件中定義的函式,並不能按我的想法工作。scala真是個非常靈活的語言,這裡還是總結下函式定義的幾種情況吧。1 規規矩矩的寫法,帶有等號 大括號和返回值型別的形式 def myfunc ...