问题标签 [difference-equations]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1097 浏览

matlab - MATLAB 中的差分方程 - 为什么需要切换符号?

也许这更像是一个数学问题而不是 MATLAB 问题,不太确定。我正在使用 MATLAB 来计算经济模型 - 新混合 ISLM 模型 - 并且有一个令人困惑的步骤,作者切换了解决方案的符号。

首先,作者声明了符号变量并建立了一个差分方程组。请注意,后缀“a”和“2t”均表示“时间 t+1”,“2a”表示“时间 t+2”,“t”表示“时间 t”:

编辑:将出现在教科书中的矩阵中的方程如下(大括号表示时间段值,希腊字母是参数):

第一个方程:

第二个等式:

第三和第四是假人:

第五很简单:

继续,作者计算矩阵 A:

据我了解,这个A是系统的解决方案。它是将时间 t+1 和 t+2 变量转换为 t 和 t+1 变量的矩阵(这是一个前瞻性模型)。我的问题本质上是为什么需要反转 B 中所有偏导数的符号才能得到这个解决方案?我说的是这一步:

在这里反转符号显然会反转A的每个组件的符号,但我没有清楚地理解为什么它是必要的。如果问题不清楚或者这不是最好的提问地方,我深表歉意。

0 投票
1 回答
1097 浏览

matlab - Symbolic Toolbox Matlab中的差分方程

有人可以告诉我有没有办法解决差分方程,例如:

在 Matlab 中使用符号工具箱?我想找到这个方程的显式解。

0 投票
2 回答
119 浏览

performance - numpy:评估矩阵中的函数,使用前一个数组作为计算下一个数组的参数

我有一个m x n数组:a,其中整数m > 1E6n <= 5

我有函数FG,它们的组成如下:F ( u , G ( u , t))。u是一个1 x n数组,t 是一个标量,FG返回1 x n数组。

我需要评估F中的每row一个,并将先前评估的行用作下一次评估的u -array。我需要做出这样的评价。am

这必须非常快。我之前对scitools.std StringFunction整个数组的评估印象深刻,但是这个问题需要使用之前计算的数组作为计算下一个数组的参数。我不知道 StringFunction 是否可以做到这一点。

例如:

上面代码的问题是它慢得要命。我需要在 numpy 毫秒内完成这些计算。

我怎样才能做我想做的事?

谢谢你的时间。

亲切的问候,

马吕斯

0 投票
0 回答
3985 浏览

matlab - 传递函数的差分方程,Matlab

我绘制了从 Z 变换传递函数获得的两个差分方程的响应。我使用了两种方法,得到了两种不同的结果。为什么?

方法1,使用Matlab,取Z逆变换

产生:y = 2^k - 1,对于时间步长“k”。这是一个指数。

方法二,手工代数重排,将z^n变成(kn):

或等效地

另外,对于第二种方法,我需要指定一个'u',而在第一种方法中不需要,只需要k。为什么第一种方法不需要输入信号 u,只需要一个时间步长?

0 投票
1 回答
193 浏览

matlab - 来自差分方程的z形式的传递函数,Matlab

是否有任何函数可以从 Matlab 中的差分方程获得 z 形式的传递函数?

0 投票
1 回答
139 浏览

difference-equations - 我如何求解这个复杂度方程,T(n) = T(n-3)+T(n-5)

在解决难题时,我最终得到了T(n)=T(n-3)+T(n-5). 我正在尝试减法。但我无法解决这个问题。请解释应该是什么程序。

0 投票
1 回答
756 浏览

differential-equations - Maxima中差分/微分代数方程组的数值解

我从一个差分方程系统开始(一个过度简化的 Solow-Romer 经济模型):

Solow-Romer 差分方程系统

其中t下标表示离散时间,例如Y[t=0], Y[t=1], Y[t=2], ...

具体来说:

这是 5 个未知数中的 5 个方程。在实践中以数值方式“求解”系统是微不足道的:您只需从t=0初始条件开始,根据差分方程计算K[1]A[1],然后Y[1]从中计算。

尽管它的本质是微不足道的,但我无法确定如何实际执行此操作并在 Maxima 中绘制结果曲线。

如果这更有利于Maxima的能力,我对微分方程方法(真正的微分代数)非常满意。无论如何,这在数值解中应该是等价的:

Solow-Romer 微分代数方程组

那是:

但是,再一次,我看不到用 Runge-Kutta 或其他内置求解器对这个系统进行数值求解和绘图的方法(即使上面的代数方程可以很容易地改写为 形式0=f(Y,A,K,Ly,La))。

在这一点上,我还没有真正取得任何进展。我看到的用于差分方程 ( diff_rec2) 的唯一工具是为此类系统的符号解设计的,但通常经济模型不能以封闭形式表示。Runge-Kutta ( rk) 不接受代数方程(据我所知),我不知道下一步该往哪里看。

最终,鉴于此模型和类似模型的直接前向计算性质,我认为这将非常简单。也就是说,我确实想避免执行手动操作或将其变成特殊情况。我对此类方程组的一般求解方法特别感兴趣,因为我计划在未来实施更复杂的模型,例如 McKinnon (1997) 开放经济。


编辑:

感谢罗伯特(已接受)的回答,这是上述正向时间差方程示例的完整复制粘贴解决方案:

0 投票
1 回答
52 浏览

matlab - 求解一对实数(和相互交织的)方程

我有一个一阶差分方程:y[n] = z0 * [n-1] + x[n] (2-3)。通常我们会做的是应用 z 变换,然后使用“过滤器”功能。但我的老师想以不同的方式做到这一点:

在一阶差分方程 (2-3) 中,让 yR[n] 和 yI[n] 表示 y[n] 的实部和虚部。写出一对实值差分方程,用 yR[n-1]、yI[n-1]、x[n] 和 r、cos m 和 sin m 表示 yR[n] 和 yI[n]

(我忘了提到,x[n]=G*dirac[n] 其中 G 是一个复数常数,这是 r、cos m 和 sin m 的来源)。

这是我的结果(这是我能想到的最好的结果):

那么下一个问题是:

编写一个 MATLAB 程序来实现这对实数方程,并使用该程序生成方程 (2-3) 的脉冲响应,其中 r=1/2 和 m=0,并且 m=pi/4。对于这两种情况,绘制获得的脉冲响应的实部。与复数递归输出的实部进行比较 (2-3)

我不明白的是,除了应用 z 变换然后使用“过滤器”功能之外,我还能如何做到这一点。我在网上查了一下,有关于状态空间形式的东西,但我不知道它是否相关。另外,我不希望将解决方案放在银盘上交给我,我只想知道如何解决。非常感谢!

0 投票
2 回答
1414 浏览

r - 如何在 data.table 中编写累积计算

顺序累积计算

我需要进行时间序列计算,其中每一行计算的值取决于前一行计算的结果。我希望使用data.table. 实际问题是一个水文模型——累积水平衡计算,在每个时间步增加降雨量并减去作为当前水量函数的径流和蒸发量。数据集包括不同的盆地和情景(组)。在这里,我将使用一个更简单的问题来说明问题。

对于每个时间步(行),计算的简化示例如下所示i

ab是参数值的向量,v是结果向量。对于第一行 ( i == 1), 的初始值v取为v0 = 0

第一次尝试

我的第一个想法是shift()data.table. 一个最小的例子,包括期望的结果v.ans,是

这不起作用,因为shift(v)给出了原始 column 的副本v,移动了 1 行。它不受分配到 的影响v

我还考虑过使用 cumsum() 和 cumprod() 构建方程,但这也行不通。

蛮力方法

因此,为了方便起见,我在函数内部使用了 for 循环:

此累积函数适用于 data.table:

我的问题

我的问题是,我能否以更简洁有效的data.table方式编写此计算,而不必使用 for 循环和/或函数定义?set()也许使用?

还是有更好的方法?

编辑:更好的循环

下面大卫的 Rcpp 解决方案启发我ifelse()for循环中删除:

vcalc2()比 快 60% vcalc()

0 投票
0 回答
1342 浏览

matlab - 如何在 Matlab 中使用 Z 变换求解差分方程

我试图找到由差分方程表示的滤波器的脉冲响应,如下所示:

y[n] - y[n-1] + 0.9*y[n-2] = x[n] - x[n-2]

我想使用 Z 变换来求解方程。我在 Matlab 中使用此代码:

我已经声明了如下的impulse_me函数:

但是当我运行代码时,结果是:

有人可以帮我解决这个问题吗?