Matlab 倍频程编码-我需要帮助编码多项式的系数

Matlab 倍频程编码-我需要帮助编码多项式的系数,matlab,octave,linear-algebra,polynomial-math,Matlab,Octave,Linear Algebra,Polynomial Math,这个问题相当容易手动完成,但是,我很难用代码编写它 有一个四次多项式: P(x)=ax^4+bx^3+cx^2+dx+e 还有一个给定的矩阵M: 5 0 -1 2 9 -2 -1 0 1 2 第一行给出p(x),第二行给出x的值 使用矩阵M中的信息,找出系数: a、 b,c,d,e 我知道如何手动操作,将每一列细分,并与其他列同时求解,以获得每个系数的值或将其放入矩阵中 我知道该怎么做,但我不知道如何编写代码 我相信最后一行是线性solve(M(,1),M(,2)),因此可以获得每个系数,但

这个问题相当容易手动完成,但是,我很难用代码编写它

有一个四次多项式:

P(x)=ax^4+bx^3+cx^2+dx+e
还有一个给定的矩阵M:

5 0 -1 2 9
-2 -1 0 1 2
第一行给出p(x),第二行给出x的值

使用矩阵M中的信息,找出系数:

a、 b,c,d,e

我知道如何手动操作,将每一列细分,并与其他列同时求解,以获得每个系数的值或将其放入矩阵中

我知道该怎么做,但我不知道如何编写代码

我相信最后一行是线性solve(M(,1),M(,2)),因此可以获得每个系数,但我不知道如何到达该行。

欢迎张建宗

% Values of y and x (note: in your post you had 2 values at x = 1, I assumed that was an accident)
M = [5 0 -1 2 9 ; -2 -1 0 1 2];

% Separate for clarity
y = M(1,:);
x = M(2,:);

% Fit to highest order polynomial model
f = fit(x',y',['poly', num2str(length(y)-1)])

% Extract coefficients
coeff = coeffvalues(f);

% Plotting
X = linspace(min(x)-1, max(x) + 1, 1000) ;
plot(x,y,'.',X,f(X))
编辑

对不起,我正在使用Matlab。查看倍频程文档。您应该能够使用

p = polyfit(x,y,length(y)-1)';
然后,要以指定的方式显示系数,请尝试以下操作

strcat(cellstr(char(96+(1:length(p))')), { ' = ' } , cellstr(num2str(p)))
给予

这些是c,d,e的系数,其他的都是零。您可以检查结果:

polyval(P, x)

ans =
   5.0000e+00   2.2204e-16  -1.0000e+00   2.0000e+00   9.0000e+00
这将为您提供
y


顺便说一句,不用计算器,你可以在头脑中快速解决这个问题,因为x=0和x=+/-1的函数值很容易计算。

Hello@user1543042,谢谢你的回复。这是正确的,我已经更改了值。我试过你写的东西,收到了这个错误:“fit”在第21行第3列附近未定义错误:在第21行第2列的代码中调用“``我怎样才能将其概括为我可以打印(a=b=c=d=e=)无论我选择什么样的四次多项式,我都在使用八度***谢谢,我能够根据您编辑的响应得出一个解决方案!我试过
y=M(1,:);x=M(2,:);a=polyval(y,x)已经存在。它给了我
p(x)=81*x^8+11*x^7+9*x^6+15*x^5+89*x^4+0*x^3+0*x^2+0*x^1+0
。我不知道怎么说,也不知道为什么,因为它应该是四分之一。谢谢你的回复@Andy。然而,我也尝试过已经过的多边形拟合(y,x,n),其中n=4,因为它是4度。我得到的值是0或者非常接近于0<代码>p(x)=0*x^8+0*x^7+1*x^6+0*x^5-1*x^4+0*x^3+0*x^2+0*x^1+0
这是我在代码中写的内容<代码>y=M(1,:);x=M(2,:);P=多配合(x,y,2);p=polyval(p,x);a=p(1);b=p(2);c=p(3);d=p(4);e=p(5)您能否澄清这是正确的?
P =
   2.0000   1.0000  -1.0000
polyval(P, x)

ans =
   5.0000e+00   2.2204e-16  -1.0000e+00   2.0000e+00   9.0000e+00