任意のxベクトルに対​して、yベクトルの一​次微分を計算すること​はできますか?

8 views (last 30 days)
non
non on 19 Jun 2023
Commented: non on 23 Jun 2023
実験データを一次微分する方法に詰まっており、こちらでご質問させていただきます。
MATLABで、yベクトルの値を一次微分したいです。xベクトルは0.05, 0.1, 0.15, 0.20 …といった連続した値です。
MATLABのdiff(y, 1)の計算では、想定よりも小さな値が出力されました。他の解析ソフトウェアで、xベクトルを1, 2, 3, 4…した場合にはdiff(y, 1)と同じ計算結果でした。
MATLABで任意のxベクトルに対して、yベクトルの一次微分を計算するとことは可能でしょうか?または、diff(y, 1)で計算した後に、求めたいxの増分に変換すべきなのでしょうか?
基礎的なことが分かっていない状態でのご質問を失礼いたします。もし可能でしたら、ご教示のほど、よろしくお願いいたします。

Accepted Answer

Hernia Baby
Hernia Baby on 19 Jun 2023

想定した微分がわかりませんが、カーブフィットしたモデルに対して微分をとってるのかなと思いました。

differentiateはいかがでしょうか?

  3 Comments
Hernia Baby
Hernia Baby on 22 Jun 2023
Edited: Hernia Baby on 22 Jun 2023
今回は正弦波で見てみましょう
dx = 0.01;
x = (0:dx:1)';
y = sin(2*pi*x);
以下のように関数を自作します
求めたい関数(端点y0 = y1, yn+1 = ynとする)は以下のような式になります
dy = diff(y);
fc = ([dy(1); dy]/dx + [dy; dy(end)]/dx)./2;
真値を設定します
ft = (2*pi)*cos(2*pi*x);
図示します
figure
hold on
plot(x,fc,'ko-')
plot(x,ft,'r:')
legend('自作式','真値')
non
non on 23 Jun 2023
Hernia Baby様
ご回答をありがとうございます。
いただいたコードにより、他のソフトウェアと同じ計算結果が得られました。
dyベクトルを端点を含む形に再定義することにより離散データを微分するという方法は、全く思いもよらず、大変勉強になりました。
自身の疑問は解決いたしました。この度はありがとうございました。

Sign in to comment.

More Answers (1)

Akira Agata
Akira Agata on 22 Jun 2023
微分の定義 () より、dy を dx で割る必要があります。
たとえば今回の場合、x ベクトルの差分 dx は 0.05 のようですので、一次微分は以下のように求められます。
dx = 0.05;
ydot = diff(y)/dx;
  1 Comment
non
non on 22 Jun 2023
Akira Agata様
ご回答いただき、誠にありがとうございます。
教えていただきましたコードを用いて、xベクトルに対するyの微分をできました。
ただ、求まるydot要素数が、元のyベクトルと比べて1つ小さくなってしまいました。
他のソフトウェアで求める微分値との差は0とみなせる程小さいのですが、可能であれば、他のソフトウェアと同じ結果をMATLABでも確認したいと考えております(元のyベクトルと同じ要素数で微分を求めたいです)。
上述の他のソフトウェアの微分アルゴリズムを、添付させていただきます。
このような計算をMATLABで実行する方法を探し出せず、何かご存じのことないでしょうか。
もし可能でしたらご教示いただきたいです。よろしくお願いいたします。

Sign in to comment.

Products


Release

R2022b

Community Treasure Hunt

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

Start Hunting!