日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python函数拟合

發(fā)布時間:2024/8/1 python 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python函数拟合 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
  • 背景


最近在抖音直播數(shù)學(xué)答疑的時候,恰好有一位朋友問到了這個問題,已知x,z,y三列數(shù)據(jù)如上圖所示,請問y的最后一位數(shù)是多少?

乍一看,還以為很簡單,拎(掄)起粉筆就一頓操作(猛如虎)

(1)分別將x,z,y三列數(shù)據(jù)記作3個數(shù)列{xn},{zn}\{x_n\}, \{z_n\}{xn?},{zn?}{yn}\{y_n\}{yn?}, 其中n表示其所在數(shù)列的序號或位置。

(2)很容易發(fā)現(xiàn)如下規(guī)律
zn?xn=6(1)z_n-x_n=6 \tag{1}zn??xn?=6(1)

xn+yn=xn+1(2)x_n+y_n=x_{n+1} \tag{2}xn?+yn?=xn+1?(2)
以及

zn+yn=zn+1(3)z_n+y_n=z_{n+1} \tag{3}zn?+yn?=zn+1?(3)

將(2)和(3)組合一下便得到(1),即

zn?xn=zn+1?xn+1=6(4)z_n-x_n=z_{n+1}-x_{n+1} =6 \tag{4}zn??xn?=zn+1??xn+1?=6(4)

而問題相當(dāng)于是要求{yn}\{y_n\}{yn?}的下一個yn+1y_{n+1}yn+1?,上面3個關(guān)系式中卻沒有任何項涉及到,故這些關(guān)系不能解決根本問題,現(xiàn)在擺在我們面前的有兩條路

  • 找出數(shù)列 {xn}\{x_n\}{xn?} ,{zn}\{z_n\}{zn?} 的下一項 m 和 m+6,然后利用(1)-(4)的關(guān)系進行求解yny_{n}yn? 下一項 λ\lambdaλ
序號123456789
x-550296410m
z1116815121016m+6
y10-527-3-26λ\lambdaλ
  • 直接找出 {yn}和{xn},{zn}\{y_n\} 和\{x_n\}, \{z_n\}{yn?}{xn?},{zn?} 之間的關(guān)系表達式, 即

yn=f(xn,zn)(5)y_n = f(x_n, z_n) \tag{5}yn?=f(xn?,zn?)(5)

{xn}\{x_n\}{xn?}{zn}\{z_n\}{zn?}的關(guān)系,(5)又可以改寫成

yn=f(xn)(6)y_n = f(x_n) \tag{6}yn?=f(xn?)(6)

第一條道路相當(dāng)于繞了一圈,簡稱間接法,第二條道路更直接,簡稱直接法,我們先采用直接法來進行解答

  • 先畫出{yn}和{xn}\{y_n\} 和\{x_n\}{yn?}{xn?}散點圖

為了找出{yn}和{xn}\{y_n\} 和\{x_n\}{yn?}{xn?}之間的函數(shù)關(guān)系,我們可以先建立一個最簡單最純粹的假設(shè)

y=ax+b(7)y =ax+b \tag{7}y=ax+b(7)

沒錯,就是最簡單的線性關(guān)系,然后擬合出來系數(shù) a 和 b分別是 -0.97580645和5.0702765 (保留8位小數(shù)),這樣{yn}和{xn}\{y_n\} 和\{x_n\}{yn?}{xn?}之間的函數(shù)關(guān)系便是

y=?0.9758x+5.07(8)y = -0.9758 x + 5.07\tag{8}y=?0.9758x+5.07(8)

然后畫出來擬合函數(shù),觀察其與原數(shù)列之間的差距


我們看到除了第1個點和第5個點靠得近,其余的點差距還是挺大的,既然一次擬合性能太差,那么我來個2次函數(shù)唄,即假設(shè)

y=ax2+bx+c(9)y =ax^2+bx+c \tag{9}y=ax2+bx+c(9)


觀察發(fā)現(xiàn)2次函數(shù)擬合和1次函數(shù)擬合沒啥大的區(qū)別,再繼續(xù)提高擬合函數(shù)次數(shù)

4次時候

觀察發(fā)現(xiàn)第1,3,4,5四個點都靠的比較近,差距在縮小,繼續(xù)提高次數(shù)
5次的時候

觀察發(fā)現(xiàn)第2,6,7三個點擬合的還不夠完美,繼續(xù)提高次數(shù)

6次的時候

此時,擬合曲線恰好經(jīng)過數(shù)列{yn}\{y_n\}{yn?}的7點,可以認為擬合效果比較完美,此時的擬合函數(shù)為

y=?0.01265x6+0.2035x5?0.591x4?4.176x3+22.7x2?24.32x+2(10)y = -0.01265 x^6 + 0.2035 x^5 - 0.591 x^4 - 4.176 x^3 + 22.7 x^2 - 24.32 x + 2 \tag{10}y=?0.01265x6+0.2035x5?0.591x4?4.176x3+22.7x2?24.32x+2(10)

將x = 10代入上(10)式,求得 y = -351.60606060605966
從y值可以猜出這是一個無限循環(huán)小數(shù),循環(huán)節(jié)為6060,故最后所求的y值為

?351.6060˙-351.\dot{6060}?351.6060˙

  • 完整代碼
# -*- coding: utf-8 -*- """ Project name: 找規(guī)律 Description: Created on Sun Sep 20 17:27:34 2020 @author: 帥帥de三叔 """ import numpy as np #導(dǎo)入數(shù)值分析模塊 import matplotlib.pyplot as plt #導(dǎo)入繪圖模塊x0 = [1, 2, 3, 4, 5, 6, 7] x = [-5, 5, 0, 2, 9, 6, 4] z = [1, 11, 6, 8, 15, 12, 10] y = [10, -5, 2, 7, -3, -2, 6]plt.figure(figsize = (6,4)) plt.scatter(x0, x, color = 'r', label = "x") plt.scatter(x0, z, color = 'g', label = "z") plt.scatter(x0, y, color ="brown", label = "y")coef = np.polyfit(x, y, 6) #求出系數(shù) print('擬合函數(shù)的系數(shù) :\n', coef ) #打印出系數(shù) funExpression = np.poly1d(coef) #求出表達式 print('擬合表達式 :\n',funExpression) #打印出表達式 yFit =np.polyval(funExpression, x) #求出擬合函數(shù)的y值 print("擬合出來的y值:\n", yFit) plt.plot(x0, yFit, color = 'blue', label ="fitting line")nextY = np.polyval(funExpression, 10) #求出擬合函數(shù)的y值 print("所求的y的值為:", nextY ) plt.legend(loc = "upper left") plt.show()

參考文獻
1, https://docs.scipy.org/doc/numpy-1.15.0/reference/generated/numpy.polyfit.html

總結(jié)

以上是生活随笔為你收集整理的python函数拟合的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。