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

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

Hybrid View

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

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

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

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

  2. #2

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

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

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

  3. #3

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

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

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




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

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

  4. #4

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

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

  5. #5

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

    نقل قول نوشته شده توسط coronaa مشاهده تاپیک
    مهندس انجام دادم. نشد!
    توی خط 31 اضافه کردم.
    تابع هم باید تغییر کنه. اندیس ها رو فک کنم اشتباه گذاشتید. منظورم این طوری بود:
    کد اصلی:
    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

    البته برای داده های خودتون باید تغییرش بدید.

  6. #6

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

    نقل قول نوشته شده توسط 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 در لینک زیر قرار دادم:

  7. #7

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

    نقل قول نوشته شده توسط coronaa مشاهده تاپیک
    مهندس سلام.
    ببخشید این کد مگه نقاط دو ستون آخر رو پلات نمیکنه؟؟؟
    پس چرا اون نقاط مرزی که با قرمز مشخص شده توی دو ستون آخر نیست؟
    داده هام رو با دو فرمت mat و xlsx در لینک زیر قرار دادم:
    سلام
    اون کد، مینیمم داده های زیر رو رسم میکنه:
    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 = xlsread('C:\Users\User\Desktop\Pareto Front\2\natayej1.xlsx',1);

    ضمنامتوجه نشدم منظورتون از نقاط مرزی رو کدومه ...

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

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