【问题标题】:Matlab - take gradient of a matrix at any arbitrary pointMatlab - 在任意点获取矩阵的梯度
【发布时间】:2011-06-20 14:46:26
【问题描述】:

我正在尝试在二维矩阵 (x, y) 上的 matlab 中实现 Runge-Kutta 的四阶积分方法。该矩阵在每个点都包含一个高度值(浮点数)。这个想法是在矩阵中放置一个粒子并观察它的路径,因为它被方向向量 u 和 v “推动”。

我已经简单地使用 matlab 中内置的“梯度”函数实现了欧拉的积分方法。但是,对于 RK4 积分,我需要在可变点取 4 个斜率,而不是梯度给出的预定斜率。

我认为 Matlab 梯度函数本身没有这些参数(根据我对 Matlab 文档的理解)。我应该采取什么样的方法?

如果我要编写自己的梯度函数来计算任意点的斜率,我不太确定如何编写它,因为它不是一个直接的函数。对这种方法有什么建议吗?

谢谢。

【问题讨论】:

  • 你能告诉我们它的样子吗?如果它是多个变量的函数,您总能找到雅可比行列式。如果是常数矩阵,梯度明显为0。
  • 好吧,我猜这就是我感到困惑的地方。它是一个常数矩阵,所以我想知道如何计算一个“导数”。根据mathworks.com/help/techdoc/ref/gradient.htmldx和dy是指向矩阵值递增方向的向量集合。
  • Aaron,矩阵被解释为平面上的函数 f(x,y)。梯度的分量是 (df/dx) 和 (df/dy)。导数是空间,而不是时间。

标签: matlab gradient runge-kutta


【解决方案1】:

如果我要编写自己的渐变 计算斜率的函数 随便点,我不完全 确定如何写,因为它不是 一个直接的函数。在那里 对这种方法有什么建议吗?

我怀疑interp2 可能是您正在寻找的。你可以给它包含离散点梯度的矩阵,它会进行插值以找到任何中间点的梯度值。

【讨论】:

  • 哇。这正是我需要的!我相信我对我正在尝试做的事情有了更好的理解,现在我可以使用这些插值点来执行 RK4 算法。非常感谢!
  • 再问:既然我想在某个任意点取梯度,我应该对预定的梯度矩阵进行插值吗?还是我应该先在原始矩阵上插值,然后从那里做一个渐变?
  • 我想你做一次G = gradient(M),然后根据需要在G 上使用interp2。我不确定你会怎么做。
  • 好的。我试图思考如何以另一种方式做到这一点,但我无法理解它。再次感谢,
猜你喜欢
  • 1970-01-01
  • 2018-05-16
  • 1970-01-01
  • 2013-05-13
  • 2013-01-06
  • 1970-01-01
  • 2013-10-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多