نقل قول نوشته شده توسط mb1372 مشاهده تاپیک
تابع هم باید تغییر کنه. اندیس ها رو فک کنم اشتباه گذاشتید. منظورم این طوری بود:
کد اصلی:
clc
clear
close
global Data var
Data=[1 4
1.6 45
8 12
1.7 2
2.2 31
4 12
5.5 6
9 15
2.4 1];
Data=sortrows(Data);
plot(Data(1,1),Data(1,2),'ro','markersize',8) % plot first point
hold on
var(1,:)=Data(1,:);
min_inx_g=find(Data(:,2)==min(Data(:,2)));
plot(Data(min_inx_g,1),Data(min_inx_g,2),'ro','mar kersize',8) % plot min point
var(end+1,:)=Data(min_inx_g,:);
min_inx=min_inx_g;
while 1
if min_inx~=length(Data)
[k is_upper]=plot_min_point(1,min_inx);
if is_upper==1 % there are no points above the line.
break
end
min_inx=k;
else
break
end
end
plot(Data(end,1),Data(end,2),'ro','markersize',8) % plot end point
min_inx=min_inx_g;
var(end+1,:)=Data(end,:);
while 1
if min_inx~=length(Data)
[k is_upper]=plot_min_point(min_inx,length(Data));
if is_upper==1 % there are no points above the line.
break
end
min_inx=k;
else
break
end
end
plot(Data(:,1),Data(:,2),'b*')
var=sortrows(var);
% axis([0 5 0 3])

تابع:
function [k is_upper]=plot_min_point(i,j)
global Data var
is_upper=[];
for k=j-1:-1:i+1
if ~(Data(k,2)>Data(i,2)+(Data(j,2)-Data(i,2))/(Data(j,1)-Data(i,1))*(Data(k,1)-Data(i,1)))
plot(Data(k,1),Data(k,2),'ro','markersize',8)
var(end+1,:)=Data(k,:);
if k==2
is_upper=0;
end
break;
else
if k==2
is_upper=1;
end
end
end
end

البته برای داده های خودتون باید تغییرش بدید.
مهندس سلام.
ببخشید این کد مگه نقاط دو ستون آخر رو پلات نمیکنه؟؟؟
پس چرا اون نقاط مرزی که با قرمز مشخص شده توی دو ستون آخر نیست؟
داده هام رو با دو فرمت mat و xlsx در لینک زیر قرار دادم: