Why does:
diffpressure = gradient(pressure)./gradient(density);
and
diffpressure = diff(pressure)./diff(density);
give drastically different results? The derivative using each method are completely different. See attached figure

 採用された回答

Matt J
Matt J 2018 年 11 月 5 日
編集済み: Matt J 2018 年 11 月 5 日

2 投票

gradient uses central differences while diff(x) uses right-hand differences x(i+1)-x(i).

12 件のコメント

Benjamin
Benjamin 2018 年 11 月 5 日
Look at my attached figure, should they really be that different?
Matt J
Matt J 2018 年 11 月 5 日
I don't see why not, but on the other hand the picture isn't all that informative. You should provide the input data in a .mat file.
Benjamin
Benjamin 2018 年 11 月 5 日
Check file now. It shows the original function, and the derivative using diff and derivative using grad. Surely, the derivative is not that sensitive to the method. I have hundreds of points on the curve.
Matt J
Matt J 2018 年 11 月 5 日
I see no change in the attachment.
Benjamin
Benjamin 2018 年 11 月 5 日
Sorry, check now
Matt J
Matt J 2018 年 11 月 5 日
編集済み: Matt J 2018 年 11 月 5 日
You have only plotted one of the original functions. We cannot tell if this is density or pressure and without both we also cannot gain any insight into the ratio of their gradients.
Once again, the most helpful thing would be to attach your numeric data in a .mat file.
Matt J
Matt J 2018 年 11 月 5 日
編集済み: Matt J 2018 年 11 月 5 日
My preliminary guess would be that the gradient of density is tending toward zero, where the ratio calculation gradient(pressure)./gradient(density) becomes numerically unstable.
Benjamin
Benjamin 2018 年 11 月 5 日
The y-axis is pressure, x-axis is density. Ok, I'll try and attach, but quick question: If I have x values and yvalues, how would I differentiate y wrt to x? do I do diff(y)/diff(x) or just do diff(y) and plot it as plot(x,diff(y))
Benjamin
Benjamin 2018 年 11 月 5 日
Perhaps the better question is, if I have numerical X and Y data, what way should I differentiate y with respect to x?
Benjamin
Benjamin 2018 年 11 月 5 日
Do you think diff(y) / diff(x) is the way to go here?
Star Strider
Star Strider 2018 年 11 月 5 日
Yes!
Matt J
Matt J 2018 年 11 月 5 日
編集済み: Matt J 2018 年 11 月 5 日
If the X-data are not equi-spaced, use diff().

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

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File ExchangeMathematics についてさらに検索

質問済み:

2018 年 11 月 5 日

編集済み:

2018 年 11 月 5 日

Community Treasure Hunt

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

Start Hunting!

Translated by