通过使用符号数学工具箱™中的z变换来解决差分方程。关于z变换的简单例子,参见ztrans
和iztrans
.
函数的z变换f(n)定义为
符号工作流程保持自然符号形式的计算而不是数字形式。此方法有助于您了解解决方案的属性并使用确切的符号值。只有当您需要数字结果时,才会替换数字代替符号变量,否则您无法符号。有关详细信息,请参阅选择数字或符号算术.通常,步骤是:
宣布方程式。
解决方程。
替代的价值观。
情节结果。
分析结果。
您可以使用z变换来解决差分方程,例如众所周知的“兔子生长”问题。如果一对兔子在一年内成熟,然后每年生产另一对兔子,兔子的数量p(n)在一年n由这个差分方程来描述。
p(n+2)=p(n+ 1) +p(n).
声明方程为一个表达式,假设右边是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.
.
fZT = 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)
计算p(n)的反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)
是1
和2
,分别。
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);stem(nValues,pSolValues) title('Rabbit Population') xlabel('Years (n)') ylabel('Population p(n)') grid on
图中显示解呈指数增长。然而,因为解决方案普罗尔
包含许多术语,查找产生此行为的术语需要分析。
因为所有的函数普罗尔
可以用什么来表示经验值
,重写普罗尔
来经验值
.通过使用简化结果简化
与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);ylabel('Error (pSol - pApprox)') title('Error in Approximation')
安德鲁斯,l.c., Shivamoggi, B.K。工程师和应用数学家的整体变换,麦克米伦出版公司,纽约,1986
[2]克兰德尔右眼,科学计算项目斯普林格出版社,纽约,1994年
[3]斯特朗,G。,应用数学导论,Wellesley-Cambridge Mound,Wellesley,Ma,1986