不規則に変化する無数​のデータを一つの数式​を経由させることで一​定の値に近づける関数​の求め方

6 views (last 30 days)
Takeru Katagiri
Takeru Katagiri on 25 Jan 2020
Commented: Takeru Katagiri on 7 Feb 2020
一変数に対して不規則に変化する無数のデータを一つの数式を経由させることで一定の値に収束させる関数の求め方について伺いたいです。
大変わかりにくい質問かと思いますが、お助けいただけたらと思います。
あるX-Yの位置グラフについてXが増加するにつれて(増加の幅は一定ではないが、必ず増加する状況です)Yの値がある値Rより上下して測定される状況です。
この時最小二次方などで近似式を導出することは難しくありませんが、実際にあるYに関する無数のエクセルデータにある関数をつかって、値Rに変える・近づける関数の導出が行いたいのですが、良いアイディアはありませんか。
MATLABの質問でなく、数学の質問になってるかもしれませんがよろしくおねがいします。
  2 Comments
Takumi
Takumi on 30 Jan 2020
値Rは既知ですか?だとしたら無理やりRに収束する関数 (指数関数とかで表現)を掛けたりするとできますが…データを改ざんしていることになりそうです。 それともRは未知で、推定によってRに収束させたいということですか? 未知パラメータの推定なら例えばカルマンフィルタとかを使うと良さそうですね
Takeru Katagiri
Takeru Katagiri on 30 Jan 2020
回答ありがとうございます。
値Rは自分で設定する予定です。(例えば複数あるデータYの平均値)
Tomitaさんが無理やりRに収束する関数を作るときpolyfit で近似式を求めてかけ合わせるイメージですか?
またRが未知である場合(自分で定義しない場合)カルマンフィルタというのが有効なのですね。
自分のしようとしていることはデータの改ざんをすることに等しいです。ただ、どうしても物理現象によって理想的なデータ収集ができなかった一つ一つのデータY(x)に対して別の関数Z(x)を掛け合わせたり、どうにかして共通の補正を加え、理想状態ならこのようになるだろうというデータ表示の方法を検討しております。
フィルタについてのアイディアやその他なんでも、アドバイスいただけると大変助かります。
よろしくおねがいします。

Sign in to comment.

Accepted Answer

Takumi
Takumi on 1 Feb 2020
Edited: Takumi on 1 Feb 2020
無理矢理ある値に収束させたいなら近似式を導出するというよりはある値に収束する関数(例えば指数関数)を変形するのがいいのではないでしょうか。例えば指数関数を使ってこんな関数を考えることができます。
これはx=0でf=y(1)、x→∞で→Rとなる関数です。
例えばこんな感じです。
n=50; % データ数
x=rand(1,n);
x(1)=0;
x=cumsum(x); % 0から始まってランダムに増加するx
R=10; % 収束値
b=1; % データのばらつき幅
y=R +(2*b*rand(1,n)-b); % Rの前後に幅bでばらつくサンプルデータ
a=0.2; % 減衰率
f=exp(-a*x).*y-R*(exp(-a*x)-1);
plot(x,y,'or'); % 元データ
hold on
plot(x,R*ones(size(x)),'--'); % 収束線
plot(x,f,'*b'); % 修正値
この式に物理的意味は全くありません。
状況がわからないのでなんとも言えませんが、データがバラつくなら、ばらつきが正規分布するなど、モデル化して真値を推定するか、エラーバーなどでばらつきと一緒にデータを表示する方がいいと思います。
フィルタについては本などを調べてみてください。
  1 Comment
Takeru Katagiri
Takeru Katagiri on 7 Feb 2020
ご回答いただき大変ありがとうございました。
MATLAB初心者の自分にとってT.Tomita様のような方からアドバイスいただけることはとても心強いです。
また質問させていただくかと思いますので、ご対応していただけたら幸いです。
本当にありがとうございました。

Sign in to comment.

More Answers (0)

Categories

Find more on 時系列コレクション in Help Center and File Exchange

Products


Release

R2019b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!