1. 最小二乗曲線フィッティング
特定の関数モデルを満たす一連のデータが与えられるとします。ここで、 a は未決定の係数ベクトルです。
次に、最小二乗曲線フィッティングの目的は、次の式が最小化されるように、未決定の係数のセットの値を見つけることです。
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) を満たし、目的関数の値を最小化するために未決定の係数が計算されます。
ほどく:
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
以下のデータが満たされる可能性があることが知られています。データを満たす最小二乗解 a、b、c、d の値を見つけます。
ほどく:
元の関数を次のように記述します。
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) のパラメーターを見つけます。
バツ | 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 ファイルを自動的に生成します。
画像を生成します: ファイル >> 図に出力