我编写了一些评估正交多项式的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
时,我没想到。
为了给你提供更多细节,我最初使用第一类Chebyshev多项式进行了这个测试。现在,它们与权重正交
1 ./ sqrt(1-x.^2)
当x
变为1时,会变为无穷大。所以我认为将这个术语排除可能是非零点产品的原因。
然而,我使用勒让德多项式进行了相同的测试,得到了完全相同的结果:当度数之和为偶数时,点积绝对远离0(数量级1e2)。
最后一个细节,我使用三角公式cos(n*acos(x))
来评估切比雪夫多项式,我尝试了递归公式以及涉及二项式系数的公式之一来评估勒让德多项式。
任何人都可以解释这种奇怪的(双关语)行为吗?
答案 0 :(得分:2)
你被对称性误导了。 Chebyshev和Legendre多项式都是奇偶运算符的本征函数,这意味着它们都可以被归类为 奇数或偶数函数。我想你的自定义正交多项式也是如此。
由于这种对称性,如果将多项式P_n(x)
乘以P_m(x)
,则如果n+m
为奇数,则结果将为奇数函数,否则将为偶数。您正在计算sum_k P_n(x_k)*P_m(x_k)
周围原点的对称x_k
值集。这意味着对于奇数n+m
,您将始终变为零。尝试使用sum_k P_n(x_k)*Q_m(x_k)
一个Legendre和P
Chebyshev多项式来计算Q
。我的观点是,对于n+m=odd
,结果并没有告诉您关于正交性或集成准确性的任何信息。
问题是你可能没有足够准确地整合。 [-1,1]
上定义的这些正交多项式在其域上变化非常快,特别是接近边界(x==+-1
)。尝试使用非等距网格增加积分点,或使用integral
进行适当的积分。
最后注意事项:我建议您不要在that's a MATLAB built-in之后调用您的函数poly
。 (同样是legendre
。)