最小二乘法多项式曲线拟合原理与实现(数学公式详细推导,代码方面详细注释)

  1. 最小二乘法概念:
    最小二乘法(又称最小平方法)是一种数学优化技术。它通过最小化误差的平方和寻找数据的最佳函数匹配。利用最小二乘法可以简便地求得未知的数据,并使得这些求得的数据与实际数据之间误差的平方和为最小。最小二乘法

  2. 推导过程

    给定函数y=f(x),在点x_1,x_2, x_3 ,,,,x_n 处的函数值y_1y_2y_3,,,,y_n
    求以多项式p(x)=a_0+a_1x+ a_2x^2+......+a_n*x_k 使得

    这里写图片描述

    为了求得负荷条件的a值,对等式右边对a_i i=0,1,2....k 求偏导,得到结果为k+1个等式:
    a0

    这里写图片描述

    .....
    这里写图片描述

将方程整理,得到:


这里写图片描述

把这些等式表示成矩阵的形式,就可以得到下面的矩阵:


这里写图片描述

3 代码实现:
利用python语言来进行实现曲线拟合

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import math
import random

fig = plt.figure()
ax = fig.add_subplot(111)

#阶数为9阶
order=9

#生成曲线上的各个点
x = np.arange(-1,1,0.02)
y = [((a*a-1)*(a*a-1)*(a*a-1)+0.5)*np.sin(a*2) for a in x]

# 生成的曲线上的各个点偏移一下,并放入到xa,ya中去
i = 0
xa = []
ya = []
for xx in x:
    yy = y[i]
    d = float(random.randint(60, 140)) / 100
    # ax.plot([xx*d],[yy*d],color='m',linestyle='',marker='.')
    i += 1
    xa.append(xx * d)
    ya.append(yy * d)

'''''for i in range(0,5): 
    xx=float(random.randint(-100,100))/100 
    yy=float(random.randint(-60,60))/100 
    xa.append(xx) 
    ya.append(yy)'''

ax.plot(xa, ya, color='m', linestyle='', marker='.')

# 求出等式左边的矩阵A

matA=[]
for i in range(0,order+1):
    mat=[]
    for j in range(0+i,order+1+i):
        sumA=0
        for xx in xa:
            sumA=sumA+xx**j
        mat.append(sumA)
    matA.append(mat)
A=np.array(matA)

# 求出右边的等式B
matB=[]
for j in range(0,order+1):
    sumB=0
    for xx,yy in zip(xa,ya):
        sumB=sumB+xx**j*yy
    matB.append(sumB)
B=np.array(matB)
# 另外一种该方法求A
# 求出等式左边的矩阵A
A=[]
for xx in xa:
    matA = []
    for i in range(0,order+1):
        mat = []
        for j in range(0+i,order+1+i):
            mat.append(xx**j)
        matA.append(mat)
    A.append(matA)
# 求和
A=sum(np.array(A))

a=np.linalg.solve(A,B)
# 定义拟合函数
def fun_solve(x,a):
    y=0
    for i in range(len(a)):
        y+=a[i]*x**i
    return y

xxa= np.arange(-1,1.06,0.01)
yya=[]
for xxaa in xxa:
    yya.append(fun_solve(xxaa,a))

ax.plot(xxa,yya,color='g',linestyle='-',marker='')
这里写图片描述

参考博文:
https://blog.csdn.net/jairuschan/article/details/7517773/#commentBox
https://blog.csdn.net/einstein10147/article/details/79205109

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,402评论 6 499
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,377评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,483评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,165评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,176评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,146评论 1 297
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,032评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,896评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,311评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,536评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,696评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,413评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,008评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,659评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,815评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,698评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,592评论 2 353

推荐阅读更多精彩内容