matlab 第一类零阶贝塞尔函数多项式逼近图的作图问题

qltillow  于 2022-12-13  发布在  Matlab
关注(0)|答案(1)|浏览(246)

我需要使用Matlab绘制以下图表

我可以画J0(x)图,问题是画多项式的近似直线。例如,对于n = 2,我试了下面的代码:

x = [0:0.01:10];
y = besselj(0,x);
p = polyfit(x,y,2);
x1 = linspace(0,2);
y1 = besselj(0,x1);
f1 = polyval(p,x1);
figure
plot(x,y,'o')
hold on
plot(x1,y1)
plot(x1,f1,'r--')

图表没有按预期的那样出现。有人能告诉我我的代码有什么问题吗?非常感谢

cnjp1d6j

cnjp1d6j1#

polyfit得到的多项式是指定范围内的最小平方误差近似。另一方面,图中的多项式似乎是关于0的泰勒近似。
所以你基本上需要
p = polyfit(x,y,2);
比如

syms s % symbolic variable
n = 2; % desired order
p = sym2poly(taylor(besselj(0, s), 'Order', n+1)); % Taylor polynomial

(or如果没有符号工具箱,请手动定义多项式)。
因此:

x = 0:0.01:10.5;
y = besselj(0,x);
figure
plot(x, y, 'linewidth', 1.5)
%%p = polyfit(x,y,2);
for n = 2:2:20
    syms s;
    p = sym2poly(taylor(besselj(0, s), 'Order', n+1)); % Taylor polynomial
    x1 = linspace(0,10.5,200);
    f1 = polyval(p,x1);
    hold on
    plot(x1, f1, '-', 'linewidth', .6)
end
axis([0 10.5 -2 2])

相关问题