5、已知正交Legendre多项式函数有如下的递推关系: p₁(x)=1,p₂(x) =x; ₙ₊₁ₙₙ₋₁ (n+1)pₙ₊₁(x)=(2n+1)xpₙ(x)−npₙ₋₁(x) (1)编制m函数[ lp, Gram]= fun legendre 机号(n).m输入一个参数n,没有输入参数时报错。 输出两个参数:第一为,多项式函数表达式lp 第二为,n阶矩阵Gram的元素 <p_{m},p_{n}>= \int _{-1}^{1}p_{n}(x)p_{m}(x)dx= \{ \begin{matrix} 0,n \neq m \cr \frac {2}{2n+1},n=m \end{matrix} . <p_{m},p_{n}>= \int _{-1}^{1}p_{n}(x)p_{m}(x)dx= \{ \begin{matrix} 0,n \neq m \cr \frac {2}{2n+1},n=m \end{matrix} . (2)运行一个脚本,调用前面的函数,求出定义在[-1,1]上12个Legendre函数,并按4*3格式显示子图,其中第k个子图同时显示前k个函数,不同函数用不同的线或者颜色表示出来并做标记。
时间: 2024-03-20 16:39:07 浏览: 63
抱歉,作为一个语言模型AI,我无法编写和运行代码。但我可以为您提供相关的代码示例和解释。
首先,以下是MATLAB中求解 Legendre 多项式函数和矩阵的代码示例:
```matlab
function [lp, Gram] = legendre(n)
if nargin == 0
error('请输入参数n');
end
lp = cell(n, 1);
Gram = zeros(n);
lp{1} = sym('1');
lp{2} = sym('x');
Gram(1, 1) = int(lp{1}^2, -1, 1);
Gram(2, 2) = int(lp{2}^2, -1, 1);
for i = 3:n
lp{i} = ((2*i-1)*sym('x')*lp{i-1} - (i-1)*lp{i-2})/i;
for j = 1:i-1
Gram(i, j) = int(lp{i}*lp{j}, -1, 1);
Gram(j, i) = Gram(i, j);
end
Gram(i, i) = int(lp{i}^2, -1, 1);
end
end
```
这个函数接受一个参数n,返回一个 n 阶的 Legendre 多项式函数表达式和一个 n 阶的矩阵 Gram,Gram 的元素表示 Legendre 函数之间的内积。
接下来,以下是 MATLAB 中绘制子图的代码示例:
```matlab
n = 12;
[lp, Gram] = legendre(n);
figure;
for i = 1:n
subplot(4, 3, i);
hold on;
for j = 1:i
x = linspace(-1, 1, 100);
y = subs(lp{j}, x);
plot(x, y, 'DisplayName', ['p', num2str(j)]);
end
legend('show');
hold off;
end
```
这个代码将 Legendre 多项式函数绘制成 4*3 的子图形式,其中每个子图显示前 k 个函数,不同的函数用不同的线或颜色表示,并做出标记。
请注意,这只是一个示例代码,您需要根据自己的需求进行修改和适配。
阅读全文