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

22 ビュー (過去 30 日間)
non
non 2023 年 6 月 19 日
コメント済み: non 2023 年 6 月 23 日
実験データを一次微分する方法に詰まっており、こちらでご質問させていただきます。
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の増分に変換すべきなのでしょうか?
基礎的なことが分かっていない状態でのご質問を失礼いたします。もし可能でしたら、ご教示のほど、よろしくお願いいたします。

採用された回答

Hernia Baby
Hernia Baby 2023 年 6 月 19 日

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

differentiateはいかがでしょうか?

  3 件のコメント
Hernia Baby
Hernia Baby 2023 年 6 月 22 日
編集済み: Hernia Baby 2023 年 6 月 22 日
今回は正弦波で見てみましょう
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 2023 年 6 月 23 日
Hernia Baby様
ご回答をありがとうございます。
いただいたコードにより、他のソフトウェアと同じ計算結果が得られました。
dyベクトルを端点を含む形に再定義することにより離散データを微分するという方法は、全く思いもよらず、大変勉強になりました。
自身の疑問は解決いたしました。この度はありがとうございました。

サインインしてコメントする。

その他の回答 (1 件)

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

サインインしてコメントする。

カテゴリ

Help Center および File Exchange関数の基礎 についてさらに検索

製品


リリース

R2022b

Community Treasure Hunt

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

Start Hunting!