爱气象,爱气象家园! 

气象家园

 找回密码
 立即注册

QQ登录

只需一步,快速开始

新浪微博登陆

只需一步, 快速开始

搜索
查看: 341|回复: 2

[程序设计] 关于Matlab中gradient函数的使用心得

[复制链接]

新浪微博达人勋

发表于 2024-5-24 14:54:57 | 显示全部楼层 |阅读模式

登录后查看更多精彩内容~

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
最近在使用matlab中的gradient函数计算多维数组的梯度
当对[x,y]的二维数组进行计算时,输入的坐标数组顺序是反过来的,如[fy,fx] = gradient(F,y,x);
但是!
但是!
但是!
我发现对[x,y,z]三维数组进行计算时,按照相反的顺序输入坐标数组时会报错:
错误使用 gradient>parse_inputs (第 180 行)
每个网格间距参数必须为标量或向量,其条目数与对应维度中输入的大小相同。


出错 gradient (第 48 行)
[f,ndim,loc,rflag] = parse_inputs(f,varargin);


通过对gradient函数的调试,我发现从第三个维度的坐标开始,计算的顺序又会恢复正常。
因此对于三个及以上维度的数组[x,y,z,...,N],正确使用方式为
[fy,fx,fz,...,fN] = gradient(F,y,x,z,...,fN)


以上是个人使用Matlab时发现的一个坑,希望可以为大家提供帮助
密码修改失败请联系微信:mofangbao

新浪微博达人勋

发表于 2024-5-25 09:44:38 | 显示全部楼层
这其实很有可能不是一个“坑” 而是一个“优化”  以二维矩阵为例 正常来说gradient应该按照维度处理  但是按照人们的习惯而言 第一个维度(也就是列)被认为是y轴  第二个维度(也就是行)被认为是x轴 所以gradient“贴心”地把这个维度转过来了 也就是第一个输出为x轴 第二个是y轴 这种更符合人的习惯 虽然这种操作有时会产生一些误解  对于三维及以上的数据  就比较正常了
类似的还有meshgrid  对二维数据也有类似的操作
密码修改失败请联系微信:mofangbao
回复 支持 1 反对 0

使用道具 举报

新浪微博达人勋

发表于 2024-5-25 10:35:07 | 显示全部楼层
不错                                 
密码修改失败请联系微信:mofangbao
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

Copyright ©2011-2014 bbs.06climate.com All Rights Reserved.  Powered by Discuz! (京ICP-10201084)

本站信息均由会员发表,不代表气象家园立场,禁止在本站发表与国家法律相抵触言论

快速回复 返回顶部 返回列表