关于无穷大的函数的级数展开 - 如何将系列的系数作为Matlab数组返回?

时间:2015-11-14 22:33:07

标签: matlab symbolic-math

此问题与this one相关联。再次假设以下代码:

syms x
f = 1/(x^2+4*x+9)

现在taylor允许函数f展开无限远:

ts = taylor(f,x,inf,'Order',100)

但是以下代码

c = coeffs(ts)

产生错误,因为该系列不包含x的正幂(它包含x的负幂。)

在这种情况下,应该使用什么代码?

2 个答案:

答案 0 :(得分:3)

由于围绕无穷大的泰勒展开可能是使用替换y = 1/x并在0附近展开的,因此我会明确地进行替换,以便在coeffs上使用正数:< / p>

syms x y
f      = 1/(x^2+4x+9);
ts     = taylor(f,x,inf,'Order',100);
[c,ty] = coeffs(subs(ts,x,1/y),y);
tx     = subs(ty,y,1/x);

答案 1 :(得分:2)

taylor的输出不是多元多项式,因此coeffs在这种情况下不会起作用。您可以尝试的一件事是使用collect(使用simplify可能会得到相同或相似的结果):

syms x
f = 1/(x^2 + 4*x + 9);
ts = series(f,x,Inf,'Order',5) % 4-th order Puiseux series of f about 0
c = collect(ts)

返回

ts =

1/x^2 - 4/x^3 + 7/x^4 + 8/x^5 - 95/x^6


c =

(x^4 - 4*x^3 + 7*x^2 + 8*x - 95)/x^6

然后,您可以使用numdencts中提取分子和分母:

[n,d] = numden(ts)

返回以下多项式:

n =

x^4 - 4*x^3 + 7*x^2 + 8*x - 95


d =

x^6
然后可以在分子上使用

coeffs。您可能会发现other functions listed here也很有帮助。