誤差を含む計測データをサインカーブにフィッティングしたい!!!
Show older comments
こんにちは,はじめて質問させていただきます.よろしくお願いいたします.
以下のようなデータをサインカーブにフィッティングしたいと考えてます.
x = [0,22.5,45,67.5,90,112.5,135,157.5,180,202.5,225,247.5,270,292.5,315,337.5];
y = [9.55386683640000e-09,9.16928041520000e-09,8.19770918880000e-09,8.32947430070000e-09,8.50579673860000e-09,9.03976940820000e-09,9.98143656190000e-09,1.11838458083000e-08,1.16689569371000e-08,1.13607976059000e-08,1.20669528900000e-08, 1.30015115402000e-08,1.30830855344000e-08,1.09558864261000e-08,1.12743819372000e-08,1.04811612118000e-08];
xは測定点の値.yは実際の計測値になります.
保有しいるTool Box は Optimaization ToolBox です.
現状ではデータから無理やり,フーリエ級数を求めプロットしているため,かくかくになってしまいます.もっと滑らかにしたいです.

Optimization ToolBoxをもちいてフィッティングを試みましたが,以下のような画像になっていしまいました.

実行したコードは
x = [0,22.5,45,67.5,90,112.5,135,157.5,180,202.5,225,247.5,270,292.5,315,337.5];
data = [9.55386683640000e-09,9.16928041520000e-09,8.19770918880000e-09,8.32947430070000e-09,8.50579673860000e-09,9.03976940820000e-09,9.98143656190000e-09,1.11838458083000e-08,1.16689569371000e-08,1.13607976059000e-08,1.20669528900000e-08,1.30015115402000e-08,1.30830855344000e-08,1.09558864261000e-08,1.12743819372000e-08,1.04811612118000e-08];
% サイン関数の式を定義する
sin_func = @(x, params) params(1) * sin(x * pi / 180 + params(2)) + params(3);
% 目的関数を定義する
objective_func = @(params) sum((sin_func(x, params) - data).^2);
% 初期値を設定する
init_params = [1e-8, 0, 1e-8];
% 最適化を実行する
options = optimoptions('fmincon', 'Display', 'iter', 'Algorithm', 'interior-point');
[opt_params, ~, ~, output] = fmincon(objective_func, init_params, [], [], [], [], [0, -pi/2, 0], [Inf, pi/2, Inf], [], options);
% フィッティング結果をプロットする
x_fit = linspace(0, 360, 1000);
y_fit = sin_func(x_fit, opt_params);
plot(x, data, 'o', x_fit, y_fit, '-')
なのですが,フィッテイングを適切に行うためにアドバイスをいただきたいと考えています.
何卒,よろしくお願いいたします.
Accepted Answer
More Answers (0)
Categories
Find more on 内挿 in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!