在Matlab中用泰勒级数图cos(2x)代替cos(x)的代码
我在写一个函数,它可以计算任何函数的泰勒级数在Matlab中用泰勒级数图cos(2x)代替cos(x)的代码,matlab,math,numerical-methods,numerical-analysis,taylor-series,Matlab,Math,Numerical Methods,Numerical Analysis,Taylor Series,我在写一个函数,它可以计算任何函数的泰勒级数 syms x y=cos(x); y0=0; a=0; for i=0:25 diff(y,i); %%Gives the derivative formula y0=y0+diff(y,i)*((x-a)^i)/factorial(i); %%sums every new element of the series end x=0:0.1:2*pi; re
syms x
y=cos(x);
y0=0;
a=0;
for i=0:25
diff(y,i); %%Gives the derivative formula
y0=y0+diff(y,i)*((x-a)^i)/factorial(i); %%sums every new element of the series
end
x=0:0.1:2*pi;
res = subs(y0,x);
plot(x,res,x,cos(x))
这是Matlab代码
我的问题是它用cos(2x)
代替cos(x)
,类似地,它用ln(2x)
代替ln(x)
,以此类推
我已经检查了阶乘,它们似乎是正确的。
可能是什么问题,是我弄乱了序列还是我犯了一个Matlab错误?您正在以增量
x-a围绕点x
构建泰勒多项式,也就是说,您正在计算
f(x+(x-a))=f(2*x-a)
现在作为a=0
,这意味着正如所观察到的,你得到了f(2*x)
您需要计算a
处的导数,以获得正确的系数
y0=y0+subs(diff(y,i),a)*((x-a)^i)/factorial(i); %%sums every new element of the series
我把代码改成这样:y=log(x);y0=0;a=0;对于i=0:30diff(y,i)y0=y0+diff(y,i)*((x-a)^i)/阶乘(i);end'
它适用于三角函数,但其他一切都是相反的。E.x log(x)给出了一个接近负无穷大的图,当x增加时,正如我在回答中所说的,你需要在展开点计算导数。如果不这样做,则会得到错误的结果。不能使用a=0
作为对数的展开点,因为它有一个奇点如果你增加一个多项式的自变量,它总是无穷大的。如果最高阶系数为负,则为负无穷大。