【问题标题】:Graphing Polynomials in MATLAB在 MATLAB 中绘制多项式
【发布时间】:2014-05-04 06:53:03
【问题描述】:

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

P(x) = q(1,1) + q(2,2)(x-z(1)) + q(3,3)(x-z(1))(x-z(2)) + --- + q(2n, 2n)(x-z(1))(x-z(2))...(x-z(2n)) 注意:方程的索引已被移动以适应 MATLAB。

在 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,然后通过多项式“函数”运行它们,并根据结果向量绘制 x 向量。

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

【问题讨论】:

    标签: matlab matrix interpolation polynomial-math


    【解决方案1】:

    我会使用diagcumprod 来帮助您完成这项工作。首先使用diag 提取矩阵Q 的对角线。之后,使用cumprod 生成一个累积乘积向量。

    cumprod 对向量的作用是,对于向量中的每个元素,第 i 个元素收集从 1 到第 i 个元素的乘积。例如,如果我们有一个向量V = [1 2 3 4 5]cumprod(V) 将产生[1 2 6 24 120]。第 4 个元素(例如)是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 提取的对角线兼容。

    注意:我相信你的等式中有错字。你等式的最后一项(按照你的约定)应该有(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]。从z 的每个元素中减去x 应该给我们:

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

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

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

    这是代码应该给出的。

    如果我们想对多个 x 值执行此操作怎么办?

    正如您在帖子中所述,您希望针对一系列 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);

    【讨论】:

    • 我在索引方面遇到了一大堆问题。呈现给我的问题使用 [x0, x1, x2, x3, x4],因此它们从 0 迭代到 n,其中 n 为 4。我的 MATLAB 实现使用基于 1 的索引,所以我从 [x1 x2 x3 x4 x5] 和我的 n = 5。伪代码使用 Q(0,0) 到 Q(2n+1,2n+1),在那些眼里是 0 到 9,我使用 1 到 10,所以2n.
    • 另外,如果你把不变的方程放进去会更好,这样我就可以自己翻译了。放入偏移量为 0 而不是 1 的那个。这样就没有歧义了。请编辑您的帖子以反映这一点,我将编辑我的代码。
    • 这不再是一个索引问题,更多的是一个,我如何创建这个 n 次多项式。
    • 好的。好吧,我看到你已经接受了我的回答。很高兴我能帮上忙!
    • 不得不使用底部选择的第 2 行和第 4 行以获得适当的矩阵尺寸,但我反复进行并完全理解了您的方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多