主要内容

用z变换求解差分方程

通过使用符号数学工具箱™中的z变换来解决差分方程。有关z变换的简单示例,请参见ztransiztrans

定义:z变换

函数的z变换fn)的定义为

F z n 0 f n z n

概念:使用符号工作流

符号工作流程保持自然符号形式的计算而不是数字形式。此方法有助于您了解解决方案的属性并使用确切的符号值。只有当您需要数字结果时,才会替换数字代替符号变量,否则您无法符号。有关详细信息,请参阅选择数字或符号算术.通常,步骤是:

  1. 宣布方程式。

  2. 解决方程。

  3. 替代的价值观。

  4. 情节结果。

  5. 分析结果。

工作流程:使用Z-Transform解决“兔生长”问题

申报的方程

您可以使用z变换来解决差分方程,例如著名的“兔子生长”问题。如果有一对兔子在一年内成熟,然后每年生产另一对兔子,兔子的数量pn在一年n用这个差分方程来描述。

pn+2)=pn+ 1) +pn).

假设等式右边为表达式,将等式声明为表达式0.因为n代表年份,假设n为正整数。这个假设简化了结果。

信谊p (n) z假设(n > = 0 & (n,“整数”))f = p (n + 2) - p (n + 1) - p (n)
f = p(n + 2) -  p(n + 1) -  p(n)

解决方程

求方程的z变换。

FZT = ZTRANS(F,N,Z)
fzt = z * p(0) -  z * ztrans(p(n),n,z) -  z * p(1)+ z ^ 2 * ztrans(p(n),n,z) -  z^ 2 * p(0) -  ztrans(p(n),n,z)

功能解决只解决符号变量。因此,使用解决,第一个替代ztrans (p (n), n, z)与变量PZT.

pZT = subs(fZT,ztrans(p(n),n,z),pZT)
fzt = z * p(0) -  pzt  -  z * p(1) -  pzt * z  -  z ^ 2 * p(0)+ pzt * z ^ 2

解决PZT.

PZT =解决(FZT,PZT)
PZT =  - (Z * P(1) -  Z * P(0)+ Z ^ 2 * P(0))/( -  Z ^ 2 + Z + 1)

计算pn通过计算的z反变换PZT..简化的结果。

PSOL = IZTRANS(PZT,Z,N);psol =简化(psol)
pSol = 2 * (1) ^ (n / 2) * cos (n *(π/ 2 +的作用(1/2)* 1我))* p(1) +…(2 ^ (2 - n) * 5 ^ (1/2) * (5 ^ (1/2) + 1) ^ (n - 1) * (p (0) / 2 - p(1))) / 5 -…(2 * 2 ^ (1 - n) * 5 ^ (1/2) * (1 - 5 ^ (1/2)) ^ (n - 1) * (p (0) / 2 - p (1))) / 5

替代值

要绘制结果,首先代入初始条件的值。让p(0)p(1)12,分别。

psol = summ(psol,[p(0)p(1)],[1 2])
psol = 4 *( -  1)^(n / 2)* cos(n *(pi / 2 + asinh(1/2)* 1i)) - (3 * 2 ^(2  -  n)* 5 ^(1/ 2)* ...(5 ^(1/2)+ 1)^(n  -  1))/ 10 +(3 * 2 ^(1  -  n)* 5 ^(1/2)*(1  -5 ^(1/2))^(n  -  1))/ 5

阴谋的结果

用图表显示兔子数量随时间的增长普罗尔

nValues = 1:10;pSolValues =潜艇(pSol n nValues);pSolValues =双(pSolValues);pSolValues =实际(pSolValues);xlabel(' year (n)') ylabel('Population p(n)')) grid on . xlabel(' year (n)') title('Rabbit Population') xlabel(' Population p(n)') title('Rabbit Population') xlabel(' Population p(n)'

分析结果

从图中可以看出,解似乎呈指数增长。然而,因为解决方案普罗尔包含许多术语,查找产生此行为的术语需要分析。

因为所有的函数普罗尔可以用……来表示吗经验值,重写普罗尔经验值.通过使用简化结果简化80其他简化步骤。现在,你可以分析普罗尔

pSol =重写(pSol,“经验值”);pSol =简化(pSol“步骤”,80)
psol =(2 * 2 ^ n)/( -  5 ^(1/2) -  1)^ n  - (3 * 5 ^(1/2)*(1/2  -  5 ^(1/2)/ 2)^ n)/ 10 + ...(3 * 5 ^(1/2)*(5 ^(1/2)/ 2 + 1/2)^ n)/ 10  - (3 *(1/2  -5 ^(1/2)/ 2)^ n)/ 2 + ...(5 ^(1/2)/ 2 + 1/2)^ n / 2

视觉检查普罗尔.请注意,普罗尔是各项的和。每一项都是一个比率,可以增加或减少n增加。对于每个术语,您可以通过几种方式确认这一假设:

  • 检查是否限制n = Inf.0要么INF.通过使用限制

  • 绘制递增项n和检查的行为。

  • 计算一个大的值n

为了简单起见,使用第三种方法。计算n = 100.,然后验证该方法。首先,通过使用找到单个术语孩子们, 替代品n,并转换为双倍。

pSolTerms =孩子(pSol);pSolTermsDbl =潜艇(pSolTerms, n, 100);pSolTermsDbl =双(pSolTermsDbl)
pSolTermsDbl = 1.0e+20 * 0.0000 -0.0000 5.3134 -0.0000 3.9604

结果表明,某些项是0虽然其他术语具有较大的幅度。假设大幅度术语产生指数行为。近似普罗尔有这些条款。

idx = abs (pSolTermsDbl) > 1;%使用任意截止pApprox = pSolTerms(idx);pApprox =总和(pApprox)
pApprox = (3 * 5 ^ (1/2) * (5 ^ (1/2) / 2 + 1/2) ^ n) / 10 + (5 ^ (1/2) / 2 + 1/2) ^ n / 2

通过绘制之间的近似误差来验证假设普罗尔pApprox.正如预期的那样,错误变成0作为n增加。这个结果演示了符号计算如何帮助您分析问题。

Perror = pSol - pApprox;nValues = 1:30;Perror =潜艇(Perror n nValues);xlabel(' year (n)') ylabel('Error (pSol - pApprox)') title('Error in Approximation')

参考

[1]安德鲁斯,l.c., Shivamoggi, b.k.,工程师和应用数学家的整体变换,麦克米伦出版公司,纽约,1986

[2]克兰德尔右眼,科学计算项目,斯普林格出版社,纽约,1994

[3]斯特朗,G。,应用数学概论,Wellesley-Cambridge Mound,Wellesley,Ma,1986