最小二乘曲線擬合matlab實現

2021-07-24 20:18:59 字數 2896 閱讀 8257

對如下圖所示的加雜訊曲線,如何進行曲線擬合呢?

我們可以採用d階多項式去逼近它:

係數隨機資料的產生如下:

function [y_truth,y_observed] = unknown_model1(x)

y_truth =  0.001*x.^4 + x.^3-5*x.^2+0.5*x;  %4階的資料

y_observed = y_truth + randn(length(x),1)';    %觀測到的資料報含單位高斯雜訊

end

整個演示程式如下:

clc;

clear;

close all;

%% sample

x_all = 0:0.1:10;

[y_truth_all,y_all]=unknown_model1(x_all);

n = length(x_all);

%use the first half for training

x = x_all(1:n/2);

y = y_all(1:n/2);

y_truth = y_truth_all(1:n/2);

plot(x,y_truth,'g-x','linewidth',1.5);

hold on;

plot(x,y,'m-x','linewidth',1.5);

legend('model truth','observation');

title('training');

%% curve fitting, try linear model

x = [x;ones(1,length(x))]';

y = y';

lambda1 = (x'*x)\x'*y; %最小二乘擬合 (least-square fitting)

lambda2 = (x'*x)\x'*y;%最小二乘擬合

lambda3 = (x'*x)\x'*y;%最小二乘擬合

以上是訓練的**。由圖可見,3階和5階與真實模型最為接近,一階的誤差較大。

下面根據估計的模型對未來未知的資料進行**,比較各模型與真實模型的誤差大小

由圖可見,3階模型與真實模型最為接近,而原來在訓練中比較接近的5階模型對未知資料有較大的誤差,即存在所謂的過擬合現象(overfitting)[2].

最小二乘法曲線擬合

設有如下實驗資料x1 2345 6789 1011 1213 141516y 46.4 88.8 9.22 9.59.7 9.86 1010.2 10.32 10.42 10.5 10.55 10.58 10.60 試用最小二乘法多次 1到5次 多項式曲線擬合以上資料。import numpy as...

最小二乘法曲線擬合

在實際工程中,我們常會遇到這種問題 已知一組點的橫縱座標,需要繪製出一條盡可能逼近這些點的曲線 或直線 以進行進一步進行加工或者分析兩個變數之間的相互關係。而獲取這個曲線方程的過程就是曲線擬合。首先,我們從曲線擬合的最簡單情況 直線擬合來引入問題。如果待擬合點集近似排列在一條直線上時,我們可以設直線...

最小二乘法的曲線擬合

最小二乘法的曲線擬合 bool cdatadistillview leastdoublemultiplication long px,long py,long m,long n,double result,double warp for i 0 i m i z 0 b 0 1 d1 n p 0 c ...