Matlab 正交多项式的数值计算

Matlab 正交多项式的数值计算,matlab,numerical-methods,numerical,polynomial-math,polynomials,Matlab,Numerical Methods,Numerical,Polynomial Math,Polynomials,我写了一些计算正交多项式的Matlab程序,作为一个健全的检查,我试图确保它们的点积为零 但是,虽然我相当肯定不会有太多的问题,但我发现自己的行为有点奇怪。我的测试很简单: x = -1:.01:1; for i0=0:9 v1 = poly(x, i0); for i1=0:i0 v2 = poly(x,i1); fprintf('%d, %d: %g\n', i0, i1, v1*v2'); end end (注意点积v1*v2'需要如此循环,因为x是一个水平向

我写了一些计算正交多项式的Matlab程序,作为一个健全的检查,我试图确保它们的点积为零

但是,虽然我相当肯定不会有太多的问题,但我发现自己的行为有点奇怪。我的测试很简单:

x = -1:.01:1;
for i0=0:9
  v1 = poly(x, i0);
  for i1=0:i0
    v2 = poly(x,i1);
    fprintf('%d, %d: %g\n', i0, i1, v1*v2');
  end
end
(注意点积
v1*v2'
需要如此循环,因为
x
是一个水平向量。)

现在,为了结束这个故事,我最终得到了接近0的值(数量级约为1e-15),这对度加起来就是一个奇数(即,
i0+i1=2k+1
)。当
i0==i1
时,我希望点积不是0,但当
i0+i1=2k
时也会发生这种情况,这是我没有预料到的

为了给你们更多的细节,我首先用第一类切比雪夫多项式做了这个测试。现在,它们与重量是正交的

1 ./ sqrt(1-x.^2)
x
变为1时,它将变为无穷大。所以我认为省略这个术语可能是非零点积的原因

然后,我用勒让德多项式做了同样的测试,得到了完全相同的结果:当度数之和为偶数时,点积肯定远离0(数量级为1e2)

最后一个细节,我使用三角公式
cos(n*acos(x))
来计算切比雪夫多项式,我尝试了递归公式以及涉及二项式系数的公式来计算勒让德多项式


有人能解释这种奇怪(双关语)的行为吗?

你被对称误导了。和多项式都是奇偶算子的本征函数,这意味着它们都可以分为奇偶函数。我猜你的自定义正交多项式也是如此

由于这种对称性,如果将多项式
pn(x)
乘以
pm(x)
,那么如果
n+m
是奇数,则结果将是奇数函数,否则结果将是偶数函数。您正在计算原点周围一组对称的
xuk
值的
sum\kp\n(xuk)*P\m(xuk)
。这意味着对于奇数
n+m
您将始终得到零。试着用一个勒让德和切比雪夫多项式来计算。我的观点是,对于
n+m=odd
,结果不会告诉你任何关于正交性或积分精度的信息

问题是你可能积分不够精确。这些在
[-1,1]
上定义的正交多项式在其域上变化非常迅速,尤其是在边界附近(
x==+-1
)。尝试使用非等距网格增加积分点,或使用
integral
进行适当积分


最后注意:我建议您不要调用函数
poly
,因为。(事实也是如此。)

没错。好的,所以我尝试了积分,但仍然得到了非零的结果,尽管比以前小了(顺序为1e-1,1e-2)。关于对称性的观点很好,这很有道理。(我实际上没有调用任何函数
poly
legendre
,只是为了简化帖子的代码。不过谢谢提醒!)@Roberto你也得到了切比雪夫多项式和legendre多项式的大量标量积吗?没有,实际上,如果我在切比雪夫多项式和勒让德多项式之间的乘积上使用
积分
,我会得到非常小的值(大约1e-15)。好奇…@Roberto这是你的答案:)这意味着现在你的积分是准确的,所以你的自定义多项式出了问题。要么它们变化很快(我不这么认为,但无论如何你应该绘制它们),要么它们没有正确地正交化。在正交化过程中也应该使用
积分
,否则结果也会不准确。好了,我们开始吧。因此,使用
integral
毕竟一切都正常工作。勒让德多项式的结果接近于0,而我刚才遇到的问题是切比雪夫多项式。但是我忘了你需要将它们的乘积除以
sqrt(1-x.^2)
,一旦我包含了这个因子,那么
integral
开始给我正确的结果。谢谢你的帮助!