Octave 非一致参数拉格朗日多项式(倍频程)

Octave 非一致参数拉格朗日多项式(倍频程),octave,polynomial-approximations,Octave,Polynomial Approximations,我正在研究倍频程,不确定它是否能在matlab中运行,我试图做一个简单的拉格朗日多项式来绘制点、函数和拉格朗日近似,所以我做了以下工作 clear all clc function [y] = lagrange(x, x0, y0) n = size(x0,1); y = 0; for i=1:n p = 1; for j=1:n if j == i % avoiding division by 0

我正在研究倍频程,不确定它是否能在matlab中运行,我试图做一个简单的拉格朗日多项式来绘制点、函数和拉格朗日近似,所以我做了以下工作

clear all
clc

function [y] = lagrange(x, x0, y0)

   n = size(x0,1);
   y = 0;

    for i=1:n
        p = 1;
        for j=1:n

            if j == i   % avoiding division by 0
                continue;
            endif;

            p *= (x-x0(j)) / (x0(i)-x0(j));

        endfor;

        y += y0(i) * p;
    endfor;
endfunction;

x=[0:0.1:5];

x0=[2;2.75;4];
y0=[1/2;1/2.75;1/4];

y=lagrange(x,x0,y0);
我遇到了以下问题,“运算符*:非一致参数(op1是1x41,op2是1x41)”,它只在使用x中的向量时出现,如果我尝试在特定点上计算拉格朗日(3,x0,y0),函数工作正常,没有问题,问题是当使用更大的向量表示x时

所以我的问题是,有没有一种方法可以修改函数,使它可以使用更大的向量x,或者有没有一种方法可以不用直接在函数中使用更大的向量来绘制函数

p *= (x-x0(j)) / (x0(i)-x0(j));
意味着

p = p * (x-x0(j)) / (x0(i)-x0(j));
这*意味着矩阵乘法,不能将两个矩阵(1,41)和(1,41)相乘:内部维度不匹配

你需要的是元素乘法

p = p .* (x-x0(j)) / (x0(i)-x0(j));
(有关差异的解释,请参见)

它可以写成

p .*= (x-x0(j)) / (x0(i)-x0(j));

但我建议避免这种收缩;在Matlab/Octave中,它没有在其他一些语言中使用得那么多,可能是因为将两个操作数并排放置会使二进制操作选择中的错误更加明显。

如果您能告诉我们错误发生在哪一行,这会有所帮助。我相信错误信息应该告诉您。我猜它发生在'p*='行。对于非一致性参数,如果两个事物的大小相同,那么它必须是一个矩阵乘法,它需要m×n×n×p。哦,是的,我很抱歉,是的,错误在“p*=”行。据我所知,元素赋值运算符没有记录在八度音阶中。至少我在operator doc页面上没有看到,但是快速测试表明它确实如您所描述的那样工作。我相当肯定Matlab根本不支持这些算术/赋值运算符。