MATLAB ベースの最小二乗フィッティングおよびフィッティング ツールボックスのチュートリアル (完全なコードとアルゴリズム付き)

1. 最小二乗曲線フィッティング

(x_i,y_i),\quad i=1,2,\cdots,N特定の関数モデルを満たす一連のデータが与えられるとします\hat y(x)=f(a,x)。ここで、 a は未決定の係数ベクトルです。

次に、最小二乗曲線フィッティングの目的は、次の式が最小化されるように、未決定の係数のセットの値を見つけることです。

J=min\sum_{i=1}^N[y_i-\hat y(x_i)]^2=min\sum_{i=1}^N[y_i-f(a,x_i)]^2

MATLAB での形式は次のとおりです。

[a,jm]=lsqcurvefit(Fun,a0,x,y)

%Fun原型函数的MATLAB表示
%a0为最优化的初值
%x,y为原始输入输出的数据向量
%a为返回的待定系数向量
%jm为此待定系数下的目标函数的值

例1

データのセットは、次の MATLAB コードによって生成されます。

x=0:.1:10;
y=0.12*exp(-0.213*x)+0.54*exp(-0.17*x).*sin(1.23*x);

あ_いデータのセットは y(x) を満たし、目的関数の値を最小化するために未決定の係数が計算されます。

y(x)=a_1e^{-a_2x}+a_3e^{-a_4x}sin(a_5x)

ほどく:

MATLAB コードは次のとおりです。


clc;clear;


x=0:0.1:10;
y=0.12*exp(-0.213*x)+0.54*exp(-0.17*x).*sin(1.23*x);
f=inline('a(1)*exp(-a(2)*X)+a(3)*exp(-a(4)*X).*sin(a(5)*X)','a','X');

ff=optimset;
ff.TolFun=1e-20;ff.TolX=1e-15; %修改精度限制

[xx,res]=lsqcurvefit(f,[1 1 1 1 1],x,y,[],[],ff)

%绘制曲线
x1=0:0.01:10;
y1=f(xx,x1); %代入运算
plot(x1,y1,x,y,'o');
legend('拟合曲线','原数据点')

操作結果:

xx = 0.120000000000000 0.213000000000000 0.540000000000000 0.170000000000000 1.230000000000000


解像度 =0

例 2

以下のデータが満たされる可能性があることが知られていますy(x)=ax+bx^2e^{-cx}+dデータを満たす最小二乗解 a、b、c、d の値を見つけます。

 ほどく:

a_1=a、a_2=b、a_3=c、a_4=d元の関数を次のように記述します

y(x)=a_1x+a_2x^2e^{-a_3x}+a_4

MATLAB コードは次のとおりです。

clc;clear;

%输入已知参数
x=0.1:0.1:1;
y=[2.3201,2.6470,2.9707,3.2885,3.6008,3.9090,4.2147,4.5191,4.8232,5.1275];

f=inline('a(1)*X+a(2)*X.^2.*exp(-a(3)*X)+a(4)','a','X');
a=lsqcurvefit(f,[1 2 2 3],x,y)

%绘制曲线
y1=f(a,x);
plot(x,y1,x,y,'o');
legend('拟合曲线','原数据点');

操作結果:

a = 3.100076146500888 1.502655931856580 4.004634473891176 2.000013871079962

MATLAB では、非線形フィッティング コマンドの形式は次のとおりです。

[beta,r,J]=nlinfit(x,y,fun,beta0)
%x,y为原始数据
%fun是在M文件中定义的函数
%beta0是函数中参数的初始值
%beta为参数的最优值
%r是各点处的拟合残差
%J为雅克比矩阵的数值

初期パラメータ beta0 は次の方法で取得できます。

まず、未決定の係数がいくつあるかを観察し、次に数セットの実験データを方程式に代入して、パラメーターの初期値を取得します。

例 3

次のデータが与えられた場合、非線形法を使用して関数 f(x) のパラメーターを見つけます。

f(x)=b_1(1-b_2e^{-b_3x})

バツ 0 47 93 140 186 279 372 465 558 651
y 18.98 27.35 34.86 38.52 38.44 37.73 38.43 43.87 42.77 46.22

ほどく:

MATLAB コードは次のとおりです。

clc;clear;

x=[0 47 93 140 186 279 372 465 558 651];
y=[18.98 27.35 34.86 38.52 38.44 37.73 38.43 43.87 42.77 46.22];
b0=[43 0.6 0.1]; %初始参数值
fun=inline('b(1)*(1-b(2)*exp(-b(3)*X))','b','X');
[b,r,j]=nlinfit(x,y,fun,b0); %b为最佳参数
b
R=sum(r.^2)  %误差平方和
y1=fun(b,x);
plot(x,y,'*',x,y1,'-or')

操作結果:


b =42.664037023023802 0.548346447450711 0.009880232273427


R =46.197464448828995

2. カーブフィッティングツール

以下では、MATLAB のカーブ フィッティング ツールを理解するために例を使用します。

まず、新しく作成したスクリプト ファイルの編集ボックスに次のコードを入力します。

clc;clear;

%产生数据
x=-20:2:20;
y=-20:2:20;
[X,Y]=meshgrid(x,y);
Z=3*X.^3-4*X+2*Y.^4+3*Y^3;
meshgrid(X,Y,Z);

最初の一歩

APP オプション ボックスでカーブ フィッティング ツールを開き、データ ソース X/Y/Z データを選択します。

第二段階

適切なフィッティング方法を選択してください。この例でフィッティングする曲面は多項式なので、直接選択できます。その他のオプションの継手のタイプは次のとおりです。

  • カスタム方程式: ユーザー定義関数タイプ
  • Interpolant: 補間近似。線形、最近接、近傍、3 次スプライン、形状保持の 4 種類があります。
  • Lowess: 滑らかな近似、局所的に重み付けされた回帰
  • 多項式:多項式近似、1次、2次、3次、4~9次の9種類あります。

第三段階

適切な多項式の次数と係数を選択します

4番目のステップ

フィッティング結果の情報は、[フィッティング] ダイアログ ボックスの [結果] テキスト ボックスに表示されます。このフィッティングの主な統計情報は次のとおりです。

  • 誤差二乗和 SSE: このパラメータは、パラメータをフィッティングした後の回帰値と元のデータの対応点、アナログ分散間の誤差の二乗和を計算します。
  • 決定係数 R 二乗
  • 調整された正確な係数 調整された R2 乗
  • RMSE: このパラメータは、予測データと元のデータの対応点誤差の二乗和の平均の平方根、つまり平均二乗誤差、アナログ標準偏差です。

さらに 2 つの関数が追加されています。

コードの生成: ファイル >> コードの生成 >> creatFit.m ファイルを自動的に生成します。

画像を生成します: ファイル >> 図に出力

 

 

おすすめ

転載: blog.csdn.net/forest_LL/article/details/124459202