scilab - 在 Scilab 中生成符号插值多项式

标签 scilab polynomials

我编写了一个代码,通过插值点来计算分差法和拉格朗日法的结果。我还想使用符号变量构建多项式,但我该如何实现?

function dividedDifferences(X,Y,x)
    ddMatrix = X'
    ddMatrix(:,2) = Y'
    for j=3:length(Y)+3
        for i=1:length(Y)+2-j
            ddMatrix(i,j) = (ddMatrix(i,j-1)-ddMatrix(i+1,j-1))/(ddMatrix(i,1)-ddMatrix(i+j-2,1))
        end
    end
    disp(ddMatrix)

    Px = 0
    for j=2:length(Y)+1
        prd = 1
        for i=1:j-2
            prd = prd * (x - ddMatrix(i,1))
        end
        Px = Px + ddMatrix(1,j)*prd
    end
    disp(Px)   
    endfunction

    function lagrange(X,Y,x)
    for i=1:length(Y)
        l(i)=1
        for j=1:length(Y)
            if i~=j
                l(i) = l(i)*(x-X(j))/(X(i)-X(j))
            end
        end
    end
    disp(l')

    L=0
    for i=1:length(Y)
        L = L+Y(i)*l(i)
    end
    disp(L)
endfunction

//example instance
X = [0 1 5 8]
Y = [0 1 8 16.4]
x = 7

dividedDifferences(X,Y,x)
lagrange(X,Y,x)

最佳答案

要创建符号多项式,请使用 x = poly(0,"x") 初始化符号变量,其中 x 是要在多项式中使用的变量的名称。然后继续使用它进行计算,就像您在函数 lagrange 中所做的那样。我基本上将您的函数复制到下面的 symboliclagrange,删除了数字参数和中间显示:

function symboliclagrange(X,Y)
    x = poly(0,"x")
    for i=1:length(Y)
        l(i)=1
        for j=1:length(Y)
            if i~=j
                l(i) = l(i)*(x-X(j))/(X(i)-X(j))
            end
        end
    end
    L=0
    for i=1:length(Y)
        L = L+Y(i)*l(i)
    end
    disp(L)
endfunction

输入 X = [0 1 5 8]Y = [0 1 8 16.4] 输出为 0.85x+0.15x2,这是正确的插值多项​​式。

关于scilab - 在 Scilab 中生成符号插值多项式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34398988/

相关文章:

matlab - Scilab 中行/列尺寸不一致错误

c - 我无法使用链表打印多项式

c++ - 任意精度的多项式求解

scilab - 如何在 Scilab 控制台窗口中打印消息?

scilab - 在 Scilab 中向字符串添加换行符

matlab - 如何解决此错误: “plot: Wrong size for input arguments #2 and #3: Incompatible dimensions.”?

python - 使用 poly1d polyder 求多项式的导数而不反转系数

algorithm - 避免在距离比较中嵌套 for 循环

根据第 n 个元素对列表列表进行排序,然后是第 n+1 个元素,依此类推

python - 如何使用 sympy 从给定数组创建符号多项式?