我被赋予了 50 个数据点的集合,值为 {a^(i),b^(i)} 表示 i=1,...,50 存储在数组 A 和 B 中。 我知道范德蒙德矩阵 A 的大小为 m x n,其中 n = 2 ...11 和 m 是数组 a 的大小。
我想用次数多项式 (n − 1) 拟合数据,因为 n = 2,...,11。要为每个 n 执行此操作,我必须设置大小为 m × n 的范德蒙德矩阵 A。
范德蒙德矩阵 A 求解以下等式:A^T*A*x = A^T*b
其中 A^T 是转置矩阵,我已经给出了 b。 我们也知道 j = 1,...,n 的Aij = (a^(i))^(j−1)
, 让我感到困惑的是,如何为 n = 2,..,11 设置矩阵。
我的想法是: 我m = length(a);
这将设置 m = 50;
n = 11;
然后A=ones(m,n);
这将创建一个矩阵 A,其中填充了具有正确大小的矩阵。
但是我不确定如何填充矩阵。 我写了下面的 for 循环,我认为它会填充矩阵:
for n = 2:11
j=n;
for i = 1:50
A(i,n) = (a^(i))^(j-1);
end
end
你能帮我设置矩阵吗?
您应该使用vander
函数。但是,vander
将返回一个 m x m 矩阵,该矩阵通常用于将数据拟合到次数多项式 (m-1)。由于您想要拟合到次数多项式 (n-1),因此只需要该矩阵的最后 n 列。
代码如下:
A = vander(a);
A = A(:,end-n+1:end);