在MATLAB中绘制多项式图

时间:2014-05-04 06:53:03

标签: matlab matrix interpolation polynomial-math

我需要创建一个形式的多项式:

P(x)= q(1,1)+ q(2,2)(xz(1))+ q(3,3)(xz(1))(xz(2))+ --- + q(2n,2n)(xz(1))(xz(2))...(xz(2n))注意:方程的索引已经移位以适应MATLAB。 < / p>

在MATLAB中。 Consult this link here specifically slides 15 and 16.

我填充了矩阵Q,所以我有对角线,并且我也填充了z(1:2n)。

我很难找到一种创建多项式的方法,我可以绘制这个多项式的图形。我尝试使用for循环将每个术语附加到P(x),但它并没有像我想象的那样运行。

到目前为止,我的代码将计算系数(在上面的问题中表示为Q(0,0) - > Q(2n + 1,2n + 1))而没有问题。

我对构造上述形式的n次多项式存在问题。绘图现在更有意义,创建一个带有评估值的向量x,然后通过多项式&#34;函数&#34;运行它们。并将x向量映射到结果向量。

所以我只需要创建这个多项式。

1 个答案:

答案 0 :(得分:1)

我会使用diagcumprod来帮助您完成此任务。首先使用diag提取矩阵Q的对角线。之后,使用cumprod生成累积产品的矢量。

cumprod对向量的工作原理是,对于向量中的每个元素,第i个元素从1到第i个元素收集产品。例如,如果我们有一个向量V = [1 2 3 4 5]cumprod(V)会产生[1 2 6 24 120]。第四个元素(作为示例)将是1*2*3*4,表示从第1个元素到第4个元素的产品。

因此,这是我要做的代码:

qdiag = diag(Q);
xMinusZ = x - z; % Takes z and does x - z for every element in z
cumProdRes = cumprod(xMinusZ);
P = sum(qdiag .* [1;cumProdRes(1:end-1)]);

P应该为您提供所需的P(x)。确保z是一个列向量,以使其与从Q中提取的对角线兼容。

NB:我相信你的等式中有一个拼写错误。等式的最后一项(与您的惯例一致)应该是(x-z(2n-1))而不是(x-z(2n))。这是因为等式中的第一项没有z

这是一个例子。我们假设Q已定义

Q = [1 2 3 4; 5 6 7 8; 9 10 11 12; 13 14 15 16];

向量z是:

z = [4;3;2;1];

让我们评估x = 2

的功能

提取Q的对角线应该会给我们Q = [1;6;11;16]。从x的每个元素中减去z应该给我们:

xMinusZ = [-2;-1;0;1];

使用上面的等式,我们有:

P = 1 + 6*(-2) + 11*(-2)*(-1) + 16*(-2)*(-1)*(0) = 11

这就是代码应该提供的内容。

如果我们想要为多个x值<?h2>执行此操作,该怎么办?

正如您在帖子中所述,您希望对一系列x值进行评估。因此,您需要修改代码,使其看起来像这样(确保x是列向量):

qdiag = diag(Q);
xMinusZ = repmat(x,1,length(z)) - repmat(z',length(z),1);
cumProdRes = cumprod(xMinusZ,2);
P = sum(repmat(qdiag',length(z),1).*[ones(length(z),1) cumProdRes(:,1:end-1)],2);

P现在应该为您提供输出向量,因此如果您想要绘制此输出,只需执行plot(x,P);