问题标签 [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.
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的每个组件的符号,但我没有清楚地理解为什么它是必要的。如果问题不清楚或者这不是最好的提问地方,我深表歉意。
matlab - Symbolic Toolbox Matlab中的差分方程
有人可以告诉我有没有办法解决差分方程,例如:
在 Matlab 中使用符号工具箱?我想找到这个方程的显式解。
performance - numpy:评估矩阵中的函数,使用前一个数组作为计算下一个数组的参数
我有一个m x n
数组:a
,其中整数m > 1E6
和n <= 5
。
我有函数F和G,它们的组成如下:F ( u , G ( u , t))。u是一个1 x n
数组,t 是一个标量,F和G返回1 x n
数组。
我需要评估F中的每row
一个,并将先前评估的行用作下一次评估的u -array。我需要做出这样的评价。a
m
这必须非常快。我之前对scitools.std
StringFunction
整个数组的评估印象深刻,但是这个问题需要使用之前计算的数组作为计算下一个数组的参数。我不知道 StringFunction 是否可以做到这一点。
例如:
上面代码的问题是它慢得要命。我需要在 numpy 毫秒内完成这些计算。
我怎样才能做我想做的事?
谢谢你的时间。
亲切的问候,
马吕斯
matlab - 传递函数的差分方程,Matlab
我绘制了从 Z 变换传递函数获得的两个差分方程的响应。我使用了两种方法,得到了两种不同的结果。为什么?
方法1,使用Matlab,取Z逆变换
产生:y = 2^k - 1,对于时间步长“k”。这是一个指数。
方法二,手工代数重排,将z^n变成(kn):
或等效地
另外,对于第二种方法,我需要指定一个'u',而在第一种方法中不需要,只需要k。为什么第一种方法不需要输入信号 u,只需要一个时间步长?
matlab - 来自差分方程的z形式的传递函数,Matlab
是否有任何函数可以从 Matlab 中的差分方程获得 z 形式的传递函数?
difference-equations - 我如何求解这个复杂度方程,T(n) = T(n-3)+T(n-5)
在解决难题时,我最终得到了T(n)=T(n-3)+T(n-5)
. 我正在尝试减法。但我无法解决这个问题。请解释应该是什么程序。
differential-equations - Maxima中差分/微分代数方程组的数值解
我从一个差分方程系统开始(一个过度简化的 Solow-Romer 经济模型):
其中t
下标表示离散时间,例如Y[t=0], Y[t=1], Y[t=2], ...
具体来说:
这是 5 个未知数中的 5 个方程。在实践中以数值方式“求解”系统是微不足道的:您只需从t=0
初始条件开始,根据差分方程计算K[1]
和A[1]
,然后Y[1]
从中计算。
尽管它的本质是微不足道的,但我无法确定如何实际执行此操作并在 Maxima 中绘制结果曲线。
如果这更有利于Maxima的能力,我对微分方程方法(真正的微分代数)非常满意。无论如何,这在数值解中应该是等价的:
那是:
但是,再一次,我看不到用 Runge-Kutta 或其他内置求解器对这个系统进行数值求解和绘图的方法(即使上面的代数方程可以很容易地改写为 形式0=f(Y,A,K,Ly,La)
)。
在这一点上,我还没有真正取得任何进展。我看到的用于差分方程 ( diff_rec2
) 的唯一工具是为此类系统的符号解设计的,但通常经济模型不能以封闭形式表示。Runge-Kutta ( rk
) 不接受代数方程(据我所知),我不知道下一步该往哪里看。
最终,鉴于此模型和类似模型的直接前向计算性质,我认为这将非常简单。也就是说,我确实想避免执行手动操作或将其变成特殊情况。我对此类方程组的一般求解方法特别感兴趣,因为我计划在未来实施更复杂的模型,例如 McKinnon (1997) 开放经济。
编辑:
感谢罗伯特(已接受)的回答,这是上述正向时间差方程示例的完整复制粘贴解决方案:
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 变换然后使用“过滤器”功能之外,我还能如何做到这一点。我在网上查了一下,有关于状态空间形式的东西,但我不知道它是否相关。另外,我不希望将解决方案放在银盘上交给我,我只想知道如何解决。非常感谢!
r - 如何在 data.table 中编写累积计算
顺序累积计算
我需要进行时间序列计算,其中每一行计算的值取决于前一行计算的结果。我希望使用data.table
. 实际问题是一个水文模型——累积水平衡计算,在每个时间步增加降雨量并减去作为当前水量函数的径流和蒸发量。数据集包括不同的盆地和情景(组)。在这里,我将使用一个更简单的问题来说明问题。
对于每个时间步(行),计算的简化示例如下所示i
:
a
和b
是参数值的向量,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()
。
matlab - 如何在 Matlab 中使用 Z 变换求解差分方程
我试图找到由差分方程表示的滤波器的脉冲响应,如下所示:
y[n] - y[n-1] + 0.9*y[n-2] = x[n] - x[n-2]
我想使用 Z 变换来求解方程。我在 Matlab 中使用此代码:
我已经声明了如下的impulse_me函数:
但是当我运行代码时,结果是:
有人可以帮我解决这个问题吗?