نقل قول نوشته شده توسط coronaa مشاهده تاپیک
مثلا اگه همچین ستونی داشته باشیم که 100 تا سطر داشته باشه و بخوایم ده تا از زوج مرتب هایی که کمترین مقدار رو دارند رو رسم کنیم ، (2,3) یکی از اونها خواهد بود.
مثلا ستون اول را در محور x ها و ستون دوم را در محور y ها رسم کنید.
اگه همون فایل اکسل رو پلات کنید تصویر پایین رو خواهید داشت. ولی من فقط نقاطی که خودم با خط مشکی به هم وصل کردم رو میخوام.
در ضمن ، همه اعداد مثبت هستن.
چه مسئله جالبی!
نتیجه سعی من کدهای زیر شد. دقیقا اون چیزی که رسم کردید در نمیاد ولی امیدوارم کارتون رو راه بندازه.
تو این کدها روش کار به این صورته که ابتدا داده ها بر حسب مقدار x شون، مرتب میشن. داده ی اول و آخر رسم میشه. همچنین داده ای که دارای کمترین تابع هزینه ست رسم میشه. تا اینجا سه نقطه رسم شدن. از ابتدای بازه تا نقطه ی مینیمم بررسی میشه که آیا سایر نقاط زیر این خط (خط عبور کرده از نقطه اول و مینیمم) قرار گرفتند یا نه؟ و در صورتی که زیر خط باشن رسم میشه. این کار تا پوشش دادن تمام بازه اعداد تکرار میشه.
در قسمت بعدی این کار برای نقطه ی مینیمم تا انتهای بازه تکرار میشه.

کد اصلی (اعداد خودتون رو جایگزین کنید):
clc
clear
close
global Data


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
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
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;
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*')

تابع:
function [k is_upper]=plot_min_point(i,j)global Data
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)
if k==2
is_upper=0;
end
break;
else
if k==2
is_upper=1;
end
end
end
end

نمودار خروجی برای داده های خودتون:
http://www.sharefile.ir/uploads/1497905283.jpg