Why does gradient function calculates wrong dimensions?
2 ビュー (過去 30 日間)
古いコメントを表示
Michael Mauersberger
2020 年 4 月 30 日
コメント済み: Michael Mauersberger
2020 年 4 月 30 日
Hi there,
Why does the gradient function calculates the first two dimensions wrong?
Example:
[mshx,mshy,mshz] = ndgrid(0:.1:10,0:.1:10,0:.1:10);
[gxx,gyx,gzx] = gradient(mshx);
[gxy,gyy,gzy] = gradient(mshy);
[gxz,gyz,gzz] = gradient(mshz);
Here all gij are zero except for gyx, gxy, gzz. But how can I calculate the gradient more consistently so that all gij are zero except for gxx, gyy, gzz?
Thank you for your help.
Best regards
Michael
0 件のコメント
採用された回答
Ameer Hamza
2020 年 4 月 30 日
編集済み: Ameer Hamza
2020 年 4 月 30 日
Use meshgrid instead of ndgrid
[mshx,mshy,mshz] = meshgrid(0:.1:10,0:.1:10,0:.1:10);
[gxx,gyx,gzx] = gradient(mshx);
[gxy,gyy,gzy] = gradient(mshy);
[gxz,gyz,gzz] = gradient(mshz);
3 件のコメント
Stephen23
2020 年 4 月 30 日
編集済み: Stephen23
2020 年 4 月 30 日
Note that using meshgrid is not a general solution, it fails for N==1, i.e. when the input is a vector:
>> mshx = meshgrid(0:10);
>> gradient(mshx) % oops!
ans =
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1
It could be made to work by providing the first input argument as a scalar and the second as the vector, but that requires special-case handling. This is not just a theoretical problem: it will be relevant if you write a general solution for any N, e.g. with comma-separated lists as to provide the inputs/outputs of the gridding function and calling gradient in a loop on the outputs.
The solution I gave in my answer to your other (identical) question works for all N, no special cases.
その他の回答 (0 件)
参考
カテゴリ
Help Center および File Exchange で Creating and Concatenating Matrices についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!