필터 지우기
필터 지우기

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

조회 수: 14 (최근 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 CenterFile Exchange에서 内挿에 대해 자세히 알아보기

제품


릴리스

R2022b

Community Treasure Hunt

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

Start Hunting!