Matlab求未知函数曲线极大值我有几千组数据,进行matlab滤波后得到了一个光滑的曲线,曲线有极大值极小值,想要获取这些极大值极小值的(x,y)坐标,有没有相应代码实现,函数未知
来源:学生作业帮助网 编辑:六六作业网 时间:2025/02/01 13:09:46
Matlab求未知函数曲线极大值我有几千组数据,进行matlab滤波后得到了一个光滑的曲线,曲线有极大值极小值,想要获取这些极大值极小值的(x,y)坐标,有没有相应代码实现,函数未知
Matlab求未知函数曲线极大值
我有几千组数据,进行matlab滤波后得到了一个光滑的曲线,曲线有极大值极小值,想要获取这些极大值极小值的(x,y)坐标,有没有相应代码实现,函数未知
Matlab求未知函数曲线极大值我有几千组数据,进行matlab滤波后得到了一个光滑的曲线,曲线有极大值极小值,想要获取这些极大值极小值的(x,y)坐标,有没有相应代码实现,函数未知
代码发给你邮箱了,请查收
clc;
x=linspace(0,6*pi,200);%可换成你的数据
y=sin(x)+randn(1,200)*0.05; %可换成你的数据
n=length(x);
i_min=[];
i_max=[];
x_min=[];
y_min=[];
x_max=[];
y_max=[];
for i=2:n-1,<...
全部展开
clc;
x=linspace(0,6*pi,200);%可换成你的数据
y=sin(x)+randn(1,200)*0.05; %可换成你的数据
n=length(x);
i_min=[];
i_max=[];
x_min=[];
y_min=[];
x_max=[];
y_max=[];
for i=2:n-1,
if y(i)
end
if y(i)>y(i-1) && y(i)>y(i+1)
i_max(length(i_max)+1)=i;
end
end
x_min=x(i_min);
y_min=y(i_min);
x_max=x(i_max);
y_max=y(i_max);
plot(x,y);grid on;axis tight;
hold on;
plot(x_min,y_min,'bo',x_max,y_max,'ro');
收起
假设你几千组数据存储在数组xy,其中第一列是xdata,第二列是ydata。
解决你问题的matlab代码如下:
首先需要将xdata递增排序,并和原来ydata对应;
xdata = xy(:,1);
[xdata ind] = sort(xdata);
ydata = xy(:,2);
ydata = ydata(ind);
ln = l...
全部展开
假设你几千组数据存储在数组xy,其中第一列是xdata,第二列是ydata。
解决你问题的matlab代码如下:
首先需要将xdata递增排序,并和原来ydata对应;
xdata = xy(:,1);
[xdata ind] = sort(xdata);
ydata = xy(:,2);
ydata = ydata(ind);
ln = length(ind);
polarmax = zeros(ln,2); %存储极大值点的x坐标和y坐标;
polarmin = zeros(ln,2); %存储极小值点的x坐标和y坐标;
m = 0;
n = 0;
for k = 1:ln
if k == 1
if ydata(k) > ydata(k+1)
m = m+1;
polarmax(m,:) = xy(k,:);
elseif ydata(k) < ydata(k+1)
n = n+1;
polarmin(n,:) = xy(k,:);
end
elseif k
m = m+1;
polarmax(m,:) = xy(k,:);
elseif ydata(k-1) > ydata(k) && ydata(k) < ydata(k+1)
n = n+1;
polarmin(n,:) = xy(k,:);
end
else
if ydata(k-1) > ydata(k)
m = m+1;
polarmax(m,:) = xy(k,:);
elseif ydata(k-1) < ydata(k)
n = n+1;
polarmin(n,:) = xy(k,:);
end
end
end
收起
你是离散的数据,使用max和min函数就可以求出来了,如果具有多个极值的话,建议使用diff函数进行求导,然后通过导数等于0找到极值点。
y=sin(0:0.01:20);
find(diff(sign(diff(y)))==-2)+1
这是一种求极值的方法,你看看吧