清風數學建模——擬合算法

擬合算法

文章目錄

  • 擬合算法
      • 概念
    • 確定擬合曲線
      • 最小二乘法的幾何解釋
      • 求解最小二乘法
      • matlab求解最小二乘法
      • 如何評價擬合的好壞
      • 計算擬合優度的代碼

概念

在前面的篇幅中提到可以使用插值算法,通過給定的樣本點推算出一定的曲線從而推算出一些想要的值。但存在一些問題。一是若樣本點過多,那么多項式的次數過高會造成龍格現象;二是為了避免龍格現象而通過分段的思想求得擬合曲線,但這樣會導致曲線函數非常復雜。

針對以上問題,在擬合問題中,不需要曲線一定經過給定的點。擬合問題的目標是尋求一個函數(曲線),而該函數盡可能設置得較為簡單,使得該曲線在某種準則下與所有的數據點最為接近,即只要保證誤差足夠小即可,(最小化損失函數),這就是擬合是思想。

確定擬合曲線

給定一組數據[x,y],找出y和x之間的擬合曲線

image-20230811201338259

在matlab上通過畫圖得出這組數據對應的圖像

plot(x,y,'o');

image-20230811205402341

擬合一個曲線去接近樣本點,這里我用一個簡單的擬合曲線y=kx+b。現在的問題是,k和b取何值時,樣本點和擬合曲線最接近。

最小二乘法的幾何解釋

image-20230811210132216

  • 第一種定義有絕對值,后續不容易求導,因此計算較復雜。所以我們往往使用第二種定義,這正是最小二乘法的思想
  • 我們也不使用三次方,因為三次方計算樣本點到擬合曲線的距離會出現負數,那么該距離就會正負抵消
  • 我們也不使用四次方,使用4次方時,若出現某個異常值離曲線較遠,那么該擬合曲線受到的影響較大

image-20230811210708976

求解最小二乘法

image-20230811210825318

最終落腳到的兩個公式:k</sup>和b<sup>推導公式

  • 該公式通過對k和b一介求導,然后分離系數所得

matlab求解最小二乘法

image-20230811211416247

根據公式不難得出代碼

plot(x,y,'o');
xlabel("x");
ylabel("y");
n=size(x,1);%% 數據的個數
k=(n*sum(x.*y)-sum(x)*sum(y))/(n*sum(x.*x)-sum(x)*sum(x));
b=(sum(x.*x)*sum(y)-sum(x)*sum(x.*y))/(n*sum(x.*x)-sum(x)*sum(x));
hold on;%% 寫上這句后續可以繼續在之前的圖形上畫圖形
grid on;%% 圖形顯示網格線
f=@(x) k*x+b; %% f=kx+b是匿名函數,該函數圖形不需要另外傳參數也能形成圖形
fplot(f,[2.5,7]);
legend('樣本數據','擬合函數','location','southeast');
  1. f函數是匿名函數,該函數圖形不需要另外傳參數也能形成圖形。在matlab中畫出圖形需要傳參。比如正常情況下f函數需要傳參x否則不能畫出圖形,而匿名函數系統會根據需求自己給出一定范圍的參數以得畫出圖形

匿名函數的基本用法

handle = @(arglist) anonymous_function
  • 其中handle為調用匿名函數時使用的名字。

  • arglist為匿名函數的輸入參數,可以是一個,也可以是多個,用逗號分隔。

  • anonymous_function為匿名函數的表達式。

  • 注意輸入參數和表達式之間要用空格

  1. fplot可用于畫出匿名一元函數的圖形

基本用法

fplot(f,xinterval) 
  • 將匿名函數f在指定區間xinterval繪圖。xinterval = [xmin xmax] 表示定義域的范圍

image-20230811214612764

如何評價擬合的好壞

image-20230811214710021

  • 根據SST、SSE、SSR可以證明:
  1. SST=SSE+SSR
  2. 擬合優度:0<=1-SSE/SST<=1;而SSE誤差平方和越小,擬合優度R2越接近1。誤差越小說明擬合的越好
  3. 注意:擬合優度R2只能用于擬合函數是線性函數,若擬合函數是其他函數,直接看誤差平方和即可,SSE越小,說明擬合度越好
  4. 線性函數是指在函數中,參數僅以一次方出現,且不能乘以或除以其他任何的參數,并不能出現參數的復合函數形式。該參數不是指自變量x。比如y=kx+b,該參數指的是區別于自變量x和因變量y以外的參數k和b。

image-20230811221145242

計算擬合優度的代碼

plot(x,y,'o');
xlabel("x");
ylabel("y");
n=size(x,1);%% 數據的個數
k=(n*sum(x.*y)-sum(x)*sum(y))/(n*sum(x.*x)-sum(x)*sum(x));
b=(sum(x.*x)*sum(y)-sum(x)*sum(x.*y))/(n*sum(x.*x)-sum(x)*sum(x));
hold on;%% 寫上這句后續可以繼續在之前的圖形上畫圖形
grid on;%% 圖形顯示網格線
f=@(x) k*x+b; %% f=kx+b是匿名函數,該函數圖形不需要另外傳參數也能形成圖形
fplot(f,[2.5,7]);
legend('樣本數據','擬合函數','location','southeast');
y_hat=k*x+b;
SSR=sum((y_hat-mean(y)).^2); % 回歸平方和
SSE=sum((y-y_hat).^2); % 誤差平方和
SST=sum((y-mean(y)).^2); % 總體平方和
disp(SST-SSE-SSR);
R_2=SSR/SST; % 擬合優度
disp(R_2);

image-20230811222406484

  • SST-SSE-SSR的結果不為0的原因是在matlab中浮點數做運算一定程度上結果不精準,但結果是5.6843^-14結果是非常小的即非常接近0
    [外鏈圖片轉存中…(img-WkmLP3WM-1692188156893)]

  • SST-SSE-SSR的結果不為0的原因是在matlab中浮點數做運算一定程度上結果不精準,但結果是5.6843^-14結果是非常小的即非常接近0

  • 擬合度為0.9635非常接近1了,說明該擬合函數的擬合度較好

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/39648.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/39648.shtml
英文地址,請注明出處:http://en.pswp.cn/news/39648.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

解決內網GitLab 社區版 15.11.13項目拉取失敗

問題描述 GitLab 社區版 發布不久&#xff0c;搭建在內網拉取項目報錯&#xff0c;可能提示 unable to access https://github.comxxxxxxxxxxx: Failed to connect to xxxxxxxxxxxxxGit clone error - Invalid argument error:14077438:SSL routines:SSL23_GET_S 15.11.13ht…

QT網絡編程之TCP

QT網絡編程之TCP TCP 編程需要用到倆個類: QTcpServer 和 QTcpSocket。 #------------------------------------------------- # # Project created by QtCreator 2023-08-

mysql截取最后一個字符之前的數據

1、mysql截取最后一個字符之前的數據 select --截取斜杠之前的數據REVERSE(SUBSTR(REVERSE(SPNH-dfg-2012) ; --截取斜杠后的數據 INSTR(REVERSE(SPNH-fg-2012),-)1))2、mysql獲取最后一個字符后的數據 select SUBSTRING_INDEX(SPNH-dfg-2012,-,-1) 3、mysql更新某個字段…

SpringBoot 該如何預防 XSS 攻擊

XSS 漏洞到底是什么&#xff0c;說實話我講不太清楚。但是可以通過遇到的現象了解一下。在前端Form表單的輸入框中&#xff0c;用戶沒有正常輸入&#xff0c;而是輸入了一段代碼&#xff1a;</input><img src1 onerroralert1> 這個正常保存沒有問題。問題出在了列表…

驅動 實現三個燈的亮滅

1、編寫LED燈的驅動&#xff0c;可以控制三個燈&#xff0c;應用程序中編寫控制燈的邏輯&#xff0c;要使用自動創建設備節點機制 head.h #ifndef __HEAD_H__ #define __HEAD_H__#define PHY_LED1_MODER 0x50006000 #define PHY_LED1_ODR 0x50006014 #define PHY_LED1_RCC 0x…

設計模式之責任鏈模式【Java實現】

責任鏈&#xff08;Chain of Resposibility&#xff09; 模式 概念 責任鏈&#xff08;chain of Resposibility&#xff09; 模式&#xff1a;為了避免請求發送者與多個請求處理者耦合在一起&#xff0c;于是將所有請求的處理者 通過前一對象記住其下一個對象的引用而連成一條…

什么是ServiceMesh(Istio一)

現在最火的后端架構無疑是微服務了&#xff0c;微服務將之前的單體應用拆分成了許多獨立的服務應用&#xff0c;每個微服務都是獨立的&#xff0c;好處自然很多&#xff0c;但是隨著應用的越來越大&#xff0c;微服務暴露出來的問題也就隨之而來了&#xff0c;微服務越來越多&a…

【Python】使用python解析普通格式的報文為someip格式報文

文章目錄 1.安裝scapy庫2.示例 1.安裝scapy庫 使用 pip 安裝 scapy 第三方庫&#xff0c;打開 cmd&#xff0c;輸入以下命令&#xff1a; pip install scapy出現如圖所示&#xff0c;表示安裝成功&#xff1a; 2.示例 要解析someip格式報文&#xff0c;需要導入someip模塊&a…

【Spring 】了解Spring AOP

目錄 一、什么是Spring AOP 二、AOP的使用場景 三、AOP組成 四、Spring AOP的實現 1、添加Spring AOP依賴 2、定義切面和切點 3、定義相關通知 五、 AOP的實現原理 1、什么是動態代理 2、 JDK代理和CGLIB代理的區別 一、什么是Spring AOP AOP&#xff08;Aspect Ori…

PLY模型格式詳解【3D】

本文介紹PLY 多邊形文件格式&#xff0c;這是一種用于存儲被描述為多邊形集合的圖形對象。 PLY文件格式的目標是提供一種簡單且易于實現但通用的格式足以適用于各種模型。 PLY有兩種子格式&#xff1a;易于入門的 ASCII 表示形式和用于緊湊存儲和快速保存和加載的二進制格式。 …

【FastColoredTextBox】C# 開源文本編輯控件

主界面截圖 使用Demos演示 FastColoredTextBox 是一個用于在 C# 程序中實現高亮語法著色、代碼編輯和文本顯示的自定義控件。它提供了許多功能&#xff0c;包括&#xff1a; 語法高亮&#xff1a;FastColoredTextBox 支持多種語言的語法高亮&#xff0c;可以根據語法規則將不同…

write javaBean error, fastjson version 1.2.76

fastjson JSON.toJSONString 報錯&#xff1a; > [0] JavaBeanSerializer.java->541: com.alibaba.fastjson.serializer.JavaBeanSerializer->write()> [1] JavaBeanSerializer.java->154: com.alibaba.fastjson.serializer.JavaBeanSerializer->write()>…

vite4+vue3+electron23.3+ts桌面應用bs端開發 打包windows、linux、max三個系統的安裝包

vite4vue3electron23.3ts桌面應用bs端開發 打包windows、linux、max三個系統的安裝包 主要包依賴 "electron-store": "^8.1.0", //全局數據狀態管理&#xff0c;可選擇性安裝"electron": "23.3.8","electron-builder": &q…

Android 使用SQLite的案例詳解

1、說明 sqlite是個輕量級的數據庫,可用于嵌入式。有時候做本地的web開發的時候,我會把sqlite作為內置數據庫,這樣便于部署,直接啟動應用即可。 這里主要是將android中的使用過程記錄一下。主要包含,數據如何初始化,在不同的activity中如何使用,以及增刪改查的實現。 …

網頁顯示攝像頭數據的方法---基于web video server

1. 背景&#xff1a; 在ros系統中有發布攝像頭的相關驅動rgb數據&#xff0c;需求端需要將rgb數據可以直接在網頁上去顯示。 問題解決&#xff1a; web_video_server功能包&#xff0c;相關鏈接&#xff1a; web_video_server - ROS Wiki 2. 下載&#xff0c;安裝和編譯&a…

Ubuntu20 ctrl+alt+T無法打開終端

事情是這樣的&#xff0c;某天改了下python版本&#xff0c;發現linux默認打開終端的快捷鍵ctrlaltT寄了&#xff0c;網上給出的都是修改快捷鍵不出意外肯定沒用 但是幸好我們是會分析的&#xff0c;我看到&#xff0c;很多回答說新增一個快捷鍵運行的命令是gnome-terminal&…

21、stm32使用LTDC驅動LCD

注&#xff1a;本文基于stm32使用FMC驅動SDRAM(IS42S32800G-6BLI)工程繼續開發 本例使用安富萊的H743XIH板子驅動LTDC點亮7寸LCD 硬件接線&#xff1a;RGB888 一、cubemx配置 1、LTDC配置 注意此引腳應于上面的硬件接線圖一致 2、配置DMA2D 3、背光引腳和觸摸引腳 4、時鐘…

在 IntelliJ IDEA 中使用 Docker 開發指南

目錄 一、IDEA安裝Docker插件 二、IDEA連接Docker 1、Docker for Windows 連接 2、SSH 連接 3、Connection successful 連接成功 三、查看Docker面板 四、使用插件生成鏡像 一、IDEA安裝Docker插件 打開 IntelliJ IDEA&#xff0c;點擊菜單欄中的 "File" -&g…

LeetCode 778. Swim in Rising Water【最小瓶頸路;二分+BFS或DFS;計數排序+并查集;最小生成樹】2096

本文屬于「征服LeetCode」系列文章之一&#xff0c;這一系列正式開始于2021/08/12。由于LeetCode上部分題目有鎖&#xff0c;本系列將至少持續到刷完所有無鎖題之日為止&#xff1b;由于LeetCode還在不斷地創建新題&#xff0c;本系列的終止日期可能是永遠。在這一系列刷題文章…

cs231n assignment 3 Q2 Image Captioning with Vanilla RNNs

文章目錄 嫌啰嗦直接看代碼Q2 Image Captioning with Vanilla RNNs一個給的工具代碼里的bug問題展示問題解決思路解決辦法 rnn_step_forward題面解析代碼輸出 rnn_step_backward題面解析代碼輸出 rnn_forward題面解析代碼輸出 rnn_backward題面解析代碼輸出 word_embedding_for…