matlab里的多项式输出——conv()与poly()

本文介绍如何使用MATLAB的poly()和conv()函数来计算拉格朗日插值多项式的系数矩阵。通过具体代码示例展示了如何针对给定的自变量和函数值向量,实现拉格朗日插值并输出相应的多项式系数。

写在前面

我们在建立模型时,有时候一段程序的最终目标是输出一个多项式,或者说,输出一个多项式系数矩阵,当我们使用matlab编写程序来实现这个功能时,conv()和poly()这两个函数是非常常见的。下面,我将使用编写拉格朗日插值多项式系数的输出为例来讲讲这两个函数。

拉格朗日插值实验

要求:
1.输入自变量向量XXX和对应的函数值向量YYY,进行拉格朗日插值,插值多项式的最高阶次数应当为自变量向量XXX里的元素个数减1。
2.输出拉格朗日多项式的系数矩阵。
代码如下:

function [C] = lagran(X,Y)
%Input    X is a vector that contains a list of abscissas
%         Y is a vector that contains a list of ordinates
%Output   C is a matrix that contains the coefficients of the Lagrange
%interpolatory polynomial
%         L is a matrix that contains the Lagrange coefficient polynomials
w = length(X);
n = w-1;
L = zeros(w,w);
%From the Lagrange coefficient polynomials
for k = 1:n+1
    V = 1;
    for j = 1:n+1
        if k ~=j
            V = conv(V,poly(X(j)))/(X(k)-X(j));
        end
    end
    L(k,:) = V;
end
%Determine the coefficients of the Lagrange interpolating polynomial
C = Y*L;
end

这段代码最重要的是这里编造多项式系数的部分:

for k = 1:n+1
    V = 1;
    for j = 1:n+1
        if k ~=j
            V = conv(V,poly(X(j)))/(X(k)-X(j));
        end
    end
    L(k,:) = V;
end

我们看到了poly()与conv()的结合使用

poly()
Polynomial with specified roots or characteristic polynomial
由输入的不同分为两种用法

1.p = poly(x)(其中 x 是向量)返回多项式的系数,其中多项式的根是 x 的元素

2.p = poly(A)(其中 A 是 n×n 矩阵)返回矩阵 det(λI – A) 的特征多项式的 n+1 个系数。

conv()
Convolution and polynomial multiplication

这里只介绍一种用法

w = conv(u,v) 返回向量 u 和 v 的卷积。如果 u 和 v 是多项式系数的向量,对其卷积与将这两个多项式相乘等效。

于是完成了一轮内循环后,最终会输出拉格朗日多项式一项∏j=1,j≠in(x−xj)/(xi−xj)\prod_{j=1,j\neq i}^{n}(x-x_{j})/(x_{i}-x_{j})j=1,j=in(xxj)/(xixj)的系数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值