Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 八度数据抛物线图_Matlab_Plot_Filter_Octave - Fatal编程技术网

Matlab 八度数据抛物线图

Matlab 八度数据抛物线图,matlab,plot,filter,octave,Matlab,Plot,Filter,Octave,我一直在尝试将抛物线拟合到y为正的数据部分。我被告知,P1(x1,y1)是第一个数据点,Pg(xg,yg)是最后一个数据点,最高点在x=(x1+xg)/2。我写了以下内容: x=data(:,1); y=data(:,2); filter=y>0; xp=x(filter); yp=y(filter); P1=[xp(1) yp(1)]; Pg=[xp(end) yp(end)]; xT=(xp(1)+xp(end))/2; A=[1 xp(1) power(xp(1),2) %as th

我一直在尝试将抛物线拟合到y为正的数据部分。我被告知,
P1(x1,y1)
是第一个数据点,
Pg(xg,yg)
是最后一个数据点,最高点在
x=(x1+xg)/2。
我写了以下内容:

x=data(:,1);
y=data(:,2);
filter=y>0;
xp=x(filter);
yp=y(filter);
P1=[xp(1) yp(1)];
Pg=[xp(end) yp(end)];
xT=(xp(1)+xp(end))/2;
A=[1 xp(1) power(xp(1),2) %as the equation is y = a0 + x*a1 + x^2 * a2
   1 xp(end) power(xp(end),2)
   0 1 2*xT]; % as the top point satisfies dy/dx = a1 + 2*x*a2 = 0
b=[yg(1) yg(end) 0]'; %'
p=A\b;
x_fit=[xp(1):0.1:xp(end)]; 
y_fit=power(x_fit,2).*p(3)+x_fit.*p(2)+p(1);

figure 
plot(xp,yp,'*')
hold on 
plot(x_fit,y_fit,'r')
然后我得到这个抛物线,它是完全错误的。它根本不符合数据!谁能告诉我密码有什么问题吗


嗯,我认为主要问题是你的计算有误。我认为你应该用抛物线上的三个点来得到一个线性方程组。没有必要像计算函数那样计算函数的导数

dy/dx=a1+2*x*a2=0

在散点图中选择另一个点,而不是导数上的点,例如最大值:PT=[xp_max yp_max];并将其用于矩阵A和矩阵b

方程dy/dx=a1+2*x*a2=0不符合线性方程组的基本方案:a0+a1*x+a2*x^2=y

顺便说一下:如果你不必用这种方法计算抛物线,你可以看看Matlab/倍频程函数polyfit(),它为你的问题计算最小二乘解。这将导致一个简单的实现:

p = polyfit(x, y, 2);
y2 = polyval(p, x);
figure(); plot(x, y, '*'); hold on;
plot(x, y2, 'or');