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

6 visualizaciones (últimos 30 días)
non
non el 19 de Jun. de 2023
Comentada: non el 23 de Jun. de 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の増分に変換すべきなのでしょうか?
基礎的なことが分かっていない状態でのご質問を失礼いたします。もし可能でしたら、ご教示のほど、よろしくお願いいたします。

Respuesta aceptada

Hernia Baby
Hernia Baby el 19 de Jun. de 2023

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

differentiateはいかがでしょうか?

  3 comentarios
Hernia Baby
Hernia Baby el 22 de Jun. de 2023
Editada: Hernia Baby el 22 de Jun. de 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 el 23 de Jun. de 2023
Hernia Baby様
ご回答をありがとうございます。
いただいたコードにより、他のソフトウェアと同じ計算結果が得られました。
dyベクトルを端点を含む形に再定義することにより離散データを微分するという方法は、全く思いもよらず、大変勉強になりました。
自身の疑問は解決いたしました。この度はありがとうございました。

Iniciar sesión para comentar.

Más respuestas (1)

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

Iniciar sesión para comentar.

Categorías

Más información sobre 関数の基礎 en Help Center y File Exchange.

Productos


Versión

R2022b

Community Treasure Hunt

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

Start Hunting!