2017-05-18 1 views
0

の二次導関数は、我々はMatlabの - データ

[x]=[0.1 0.2 0.3 0.4] 
[y]=[0.25 0.30 0.40 0.55] 
y1=diff(y)./diff(x) 
y2=diff(y1)./diff(x) 

持っていると言うと私が得る結果は

マトリックスの寸法が、私はこの問題を解決するにはどうすればよい

を同意しなければならないのですか?

+0

チェックあなたは行列の1を転置する必要があります(https://www.mathworks.com/help/matlab/ref/diff.html?requestedDomain=www.mathworks.com)[か]それらを意図したとおりに動作させる。 – Alfabravo

+0

最後の行では、 'diff(y1)'は長さ2のベクトルで、 'diff(x)'は長さ3のベクトルです。 – kedarps

答えて

1

thisのドキュメントに向けてリダイレクトします。あなたが見ることができるように

diff(y1) = [y1(2)-y1(1) y1(3)-y1(2) ... y1(m)-y(m-1)] 

、あなたは一つの値を失うことになる:あなたは差分機能を使用するとどのようなそれがないことを出力これであるから、それは実際には、あなたのM-1(Mその長さ)とのベクトルを返します。あなたのエラーを説明します。最後の行を実行すると、diff(y1)は長さ2のベクトルに等しく、diff(x)は長さ3のベクトルに等しいので、diff(y1)をdiff(x)で除算することはできません。

あなたが何をしたいのかに応じて、次のコードを変更することができます。

[x]=[0.1 0.2 0.3 0.4] 
[y]=[0.25 0.30 0.40 0.55] 
y1=diff(y)./diff(x) 
y2=diff(y1)./diff(x(1:end-1)) 

あなたは、yの導関数を近似したい場合は、私は本当にあなたが、私はリンク先のページの例を見てみることをお勧め。 matlabのマニュアルには、関数の使い方の例が常に書かれているので、go take a lookです。ドキュメントによると、ベクトルyの偏微分を計算する場合、xベクトルのステップが必要です。

x=[0.1 0.2 0.3 0.4] 
y=[0.25 0.30 0.40 0.55] 
x_step = 0.1 
y1=diff(y)./x_step 
y2=diff(y1)./x_step 
0
x=[0.1 0.2 0.3 0.4] ; 
y=[0.25 0.30 0.40 0.55] ; 

dy = gradient(y)./gradient(x) ; 
d2y = gradient(dy)./gradient(x) ; 
+0

このコードスニペットは問題を解決するかもしれませんが、なぜ/どのようにそれがそうするのかについての説明はこの答えを大きく改善するでしょう。 –

+0

[gradient_](https://nl.mathworks.com/help/matlab/ref/gradient.html#bvifdfu-5)は、内側の点とは異なる境界勾配を計算することに注意してください。これにより、望ましくない最終効果が生じる可能性があります。 – m7913d

関連する問題