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

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

Hybrid View

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

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

    نقل قول نوشته شده توسط mb1372 مشاهده تاپیک
    منظورتون رو از کمترین تابع هزینه، متوجه نشدم. مثلا اگه دو ستون آخر فایل پیوست به صورت زیر باشه:
    2   3
    15 9
    -2 12
    45 21

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

  2. #2

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

    نقل قول نوشته شده توسط 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

  3. #3

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

    نقل قول نوشته شده توسط 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 صبح

  4. #4

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

    نقل قول نوشته شده توسط coronaa مشاهده تاپیک
    سلام دوست عزیز
    خیلی عالیه!
    تقزیبا همینو میخواستم.
    حالا نمیشه بقیه نقاط که مورد نظرمون نیست رو حذف کرد؟؟؟
    سلام
    یه متغیر global تعریف کنید و کد رو تغییر بدید. اونجاهایی که نقاط رسم میشه، به جای رسم نمودار، نقطه رو به عنوان درایه ی جدید توی متغیر ذخیره کنید. اخرش هم اون نقطه هایی رو که نمی خواید با دستور زیر حذف کنید:
    var(3,:)=[];

    در انتها با استفاده از این متغیر نمودار رو رسم کنید.

  5. #5

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

    نقل قول نوشته شده توسط mb1372 مشاهده تاپیک
    سلام
    یه متغیر global تعریف کنید و کد رو تغییر بدید. اونجاهایی که نقاط رسم میشه، به جای رسم نمودار، نقطه رو به عنوان درایه ی جدید توی متغیر ذخیره کنید. اخرش هم اون نقطه هایی رو که نمی خواید با دستور زیر حذف کنید:
    var(3,:)=[];

    در انتها با استفاده از این متغیر نمودار رو رسم کنید.
    مهندس ببخشید. هنوز این قسمت رو نتونستم انجام بدم!
    الآن var همون متغیر global هست؟

  6. #6

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

    نقل قول نوشته شده توسط coronaa مشاهده تاپیک
    مهندس ببخشید. هنوز این قسمت رو نتونستم انجام بدم!
    الآن var همون متغیر global هست؟
    آره. برای اینکه متغیر سراسری تعریف کنید دستور زیر رو در کد اصلی و کد تابع قرار بدید (بهتره قبل از مقداردهیش باشه):
    global var

    البته چون چند تا متغیر سراسری داریم میشه این جوری هم نوشتش:
    global var Data




    بعدش به جای اینکه نقطه اول رو رسم کنید (یا در کنار رسم نقطه ی اول) کد زیر رو اضافه کنید:
    var(1,:)=Data(1,:)

    یا در خط پنجم تابع (و همچنین در کنار رسم نقطه ی آخر)، کد زیر رو اضافه کنید:
    var(end+1,:)=Data(k,:)

  7. #7

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

    نقل قول نوشته شده توسط mb1372 مشاهده تاپیک
    آره. برای اینکه متغیر سراسری تعریف کنید دستور زیر رو در کد اصلی و کد تابع قرار بدید (بهتره قبل از مقداردهیش باشه):
    global var

    البته چون چند تا متغیر سراسری داریم میشه این جوری هم نوشتش:
    global var Data





    بعدش به جای اینکه نقطه اول رو رسم کنید (یا در کنار رسم نقطه ی اول) کد زیر رو اضافه کنید:
    var(1,:)=Data(1,:)

    یا در خط پنجم تابع (و همچنین در کنار رسم نقطه ی آخر)، کد زیر رو اضافه کنید:
    var(end+1,:)=Data(k,:)
    مهندس انجام دادم. نشد!
    توی خط 31 اضافه کردم.

    clc ;
    clear ;
    close all ;


    % global Data
    global var Data


    Data = xlsread('C:\Users\User\Desktop\Pareto Front\2\natayej1.xlsx',1);
    % save Data.mat
    % load('Data.mat');
    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
    var(1,:)=Data(1,:)
    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*')
    axis([0 5 0 3])

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

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