نمایش نتایج 1 تا 40 از 235

نام تاپیک: هفتِ بیجار

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #8

    نقل قول: هفتِ بیجار

    نقل قول نوشته شده توسط mb1372 مشاهده تاپیک
    چه مسئله جالبی!
    نتیجه سعی من کدهای زیر شد. دقیقا اون چیزی که رسم کردید در نمیاد ولی امیدوارم کارتون رو راه بندازه.
    تو این کدها روش کار به این صورته که ابتدا داده ها بر حسب مقدار 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
    سلام دوست عزیز
    خیلی عالیه!
    تقزیبا همینو میخواستم.
    حالا نمیشه بقیه نقاط که مورد نظرمون نیست رو حذف کرد؟؟؟

    عکس های ضمیمه عکس های ضمیمه
    آخرین ویرایش به وسیله coronaa : سه شنبه 30 خرداد 1396 در 00:27 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •