matlab 求legendre正交多项式的根 djp
时间: 2023-05-17 12:00:39 浏览: 233
Legendre正交多项式是一组重要的多项式,在数学和物理学中有着广泛的应用。求解这些多项式的根是计算它们的关键。在MATLAB中,可以使用polyout函数和roots函数来求解Legendre正交多项式的根。
首先,我们需要构造Legendre多项式的系数矩阵。可以使用vander扩展范德蒙德矩阵(extended Vandermonde matrix)函数来实现。比如,求解一个4次Legendre多项式的系数矩阵可以这样写:
n = 4;
x = linspace(-1,1,n+1)';
V = fliplr(vander(x));
V(:,end-n:end-1) = [];
其中,linspace函数用来生成均匀分布的n+1个点,fliplr函数则是将Vandermonde矩阵翻转。因为Legendre多项式满足如下正交性质:
∫_(-1)^1 P_m(x)P_n(x)dx = (2/(n+1))δ_(mn)
其中,Pm(x)和Pn(x)分别为m次和n次的Legendre多项式,δmn表示克罗内克δ函数(Kronecker delta)。因此,系数矩阵V需要进行乘以系数2/(n+1)的归一化处理:
V = (2/(n*(n+1)))^.5 * V;
然后,可以使用eig函数来求解V的特征值djp和特征向量。如果将特征值按照从小到大的顺序排列,那么它们对应的特征向量就是Legendre多项式的系数。因此,可以使用polyout函数将系数转换为多项式的形式,使用roots函数求解多项式的根。完整的代码如下所示:
n = 4;
x = linspace(-1,1,n+1)';
V = fliplr(vander(x));
V(:,end-n:end-1) = [];
V = (2/(n*(n+1)))^.5 * V;
[Q,D] = eig(V);
[djp,ind] = sort(diag(D));
Q = Q(:,ind);
p = polyout(Q(:,1)');
r = roots(p);
这样就可以求解出Legendre正交多项式的根djp了。
阅读全文
相关推荐








