نمایش نتایج 1 تا 18 از 18

نام تاپیک: سوال : تغییر متغییر در matlab

  1. #1

    سوال : تغییر متغییر در matlab

    سلام دوستان

    من با زبان متلب آشنایی ندارم - برنامه نویسی رو با C#‎ انجام میدم !!!

    مشکلم اینه که :

    یه برنامه دارم که مسله فروشنده دوره گرد و با استفاده از الگوریتم ژنتیک حل میکنه !

    ولی نمیشه تعداد اون شهر ها رو توش تغییر داد ( چون نمی دونم کدوم متغییر هست ! ) و خودش تعداد 25 شهر رو حساب میکنه !


    من می خوام از دوستان کمک بگیرم و بتونم کاری کنم که تعداد شهر ها رو خودم بدم ( از ورودی ) و اون برام حساب کنه !!!!

    ممنون میشم راهنماییم کنید !

    اگر هم نیاز به سورس برنامه هست ، قرار بدم

  2. #2
    کاربر دائمی
    تاریخ عضویت
    مهر 1388
    محل زندگی
    iran
    پست
    311

    نقل قول: سوال : تغییر متغییر در matlab

    شما 25 رو توی برنامه سرچ کنید می تونید متغیر مورد نظرتونو پیدا کنید. اگه نه یا اون از قسمت از کد رو در اینجا قرار بدید و یا برنامه رو اینجا بزارید که بتونیم کمکتون کنیم.

    موفق باشید.

  3. #3

    نقل قول: سوال : تغییر متغییر در matlab

    دوست من نمیشه همه عدد های 25 روز تغییر داد!!! error میده !!!

    اینم کد برنامه :
    input=randi(100,2,26); 
    first_generation=zeros(100,25);

    % try to make first generation
    for z=1:100
    first_generation(z,:)=randperm(25);
    end
    subplot(4,2,1:4)
    plot(input(1,first_generation(1,:)),input(2,first_ generation(1,:)),'*');
    for k=1:500
    if k==1||k==200||k==50||k==500
    switch k
    case 1
    subplot(4,2,5)
    case 50
    subplot(4,2,6)
    case 200
    subplot(4,2,7)
    case 500
    subplot(4,2,8)
    end
    plot(input(1,first_generation(1,:)),input(2,first_ generation(1,:)),'r');
    title(['step = ',int2str(k)]);
    end

    %calculate distance
    distance=zeros(1,100);
    for i=1:100
    for j=1:25
    if(j~=25)
    temp_x=(input(1,first_generation(i,j))-input(1,first_generation(i,j+1)))^2;
    temp_y=(input(2,first_generation(i,j))-input(2,first_generation(i,j+1)))^2;
    else
    temp_x=(input(1,first_generation(i,j))-input(1,26))^2;
    temp_y=(input(2,first_generation(i,j))-input(2,26))^2;
    end
    temp_dis=sqrt(temp_x+temp_y);
    distance(1,i)=distance(1,i)+temp_dis;
    end
    end

    %sort generation according to it's distance
    generation=first_generation;
    generation(:,26)=distance';
    sort_generation=sortrows(generation,26);
    for h=1:25
    sort2_generation(:,h)=sort_generation(:,h);
    end

    %first operation :create shifted matrix: shiftsize is random
    shift_num=randi(25);
    for p=50:99
    sort2_generation(p,:)=circshift(sort2_generation(p ,:),[0 shift_num]);
    end

    %second operation : mutation
    mut(k,:)=randi(25,1,2);
    while(mut(k,1)==mut(k,2))
    mut(k,:)=randi(25,1,2);
    end
    sort2_generation(100,mut(k,1))=sort2_generation(10 0,mut(k,1))+sort2_generation(100,mut(k,2));
    sort2_generation(100,mut(k,2))=sort2_generation(10 0,mut(k,1))-sort2_generation(100,mut(k,2));
    sort2_generation(100,mut(k,1))=sort2_generation(10 0,mut(k,1))-sort2_generation(100,mut(k,2));

    %new generation
    first_generation=sort2_generation;
    end

  4. #4

    نقل قول: سوال : تغییر متغییر در matlab

    دمت گرم دادش ، همه عدد های 25 و 26(که فک کنم مرحله بعدی حساب میشه) رو تغییر دادم و به حالت های 5 و 10 و 20 تایی تبدیل کردم !!!!

    ولی می خوام اینطوری نباشه می خوام یه متغییر از من بخواد ( از ورودی) و هر عددی رو وارد کردم ، بر اساس همون پیش بره ....

    مثلا اگه C#‎ بود جایه عدد 25 یه متغییر مثل x تعریف میکردم و بعد تو محیط ویژوال ازش می خواستم که مقدار x رو از ورودی بخونه ولی تو matlab می دونم چجوری میشه این کارو کرد !!!!!

  5. #5
    کاربر دائمی
    تاریخ عضویت
    مهر 1388
    محل زندگی
    iran
    پست
    311

    نقل قول: سوال : تغییر متغییر در matlab

    خواهش می کنم. برای دریافت ورودی از کاربر از دستور input استفاده کنید

    x= input('plz input number ...' )

  6. #6

    نقل قول: سوال : تغییر متغییر در matlab

    شرمنده من بازم سوال می پرسم ولی اگه یخورده بیشتر توضیح بدی ممنون میشم !!!

    من خودم این طوری برداشت کردم ، اگه غلطه ببخشید چون تا حالا matlab کار نکردم!!!!
    x= input('plz input number ...' )
    input=randi(100,2,26);
    first_generation=zeros(100,x);

    % try to make first generation
    for z=1:100
    first_generation(z,:)=randperm(x);
    end
    subplot(4,2,1:4)
    plot(input(1,first_generation(1,:)),input(2,first_ generation(1,:)),'*');
    for k=1:500
    if k==1||k==200||k==50||k==500
    switch k
    .
    .
    .
    .
    .

  7. #7
    کاربر دائمی
    تاریخ عضویت
    مهر 1388
    محل زندگی
    iran
    پست
    311

    نقل قول: سوال : تغییر متغییر در matlab

    input یه تابع برای دریافت ورودی از کاربره! خط اول
    x= input('plz input number ...' )

    عبارت plz input number رو در کنسول نشون میده و منتظر دریافت ورودی از کاربر می مونه که شما باید 25 یا هر عدد دیگه ای که مایل هستید رو بدید. ورودی کاربر درون متغیر x ذخیره مشه و شما می تونید به جای عدد 25 که در برنامه اولیه یه عدد ثابت بود، متغیر x رو قرار بدید و برنامه با توجه به درخواست کاربر اجرا بشه!

    البته شما چون از تابع input استفاده کردید دیگه نباید متغیری به این نام استفاده کنید:

    input=randi(100,2,26);

    احتمالا به جای 26 هم باید x+1 قرار بدید!
    اگه مشکلی در اجرا بود خطا رو هم بزارید.

    موفق باشید.

  8. #8

    نقل قول: سوال : تغییر متغییر در matlab

    این اررور رو میده :

    25

    ??? Error using ==> input
    The first argument to INPUT must be a string.

    Error in ==> tsp at 10
    plot(input(1,first_generation(1,:)),input(2,first_ generation(1,:)),'*');

  9. #9

    نقل قول: سوال : تغییر متغییر در matlab

    اینم از کدی که تغییر دادم:

    x= input('plz input number ...' )
    first_generation=zeros(100,x);

    % try to make first generation
    for z=1:100
    first_generation(z,:)=randperm(x);
    end
    subplot(4,2,1:4)
    plot(input(1,first_generation(1,:)),input(2,first_ generation(1,:)),'*');
    for k=1:500
    if k==1||k==200||k==50||k==500
    switch k
    case 1
    subplot(4,2,5)
    case 50
    subplot(4,2,6)
    case 200
    subplot(4,2,7)
    case 500
    subplot(4,2,8)
    end
    plot(input(1,first_generation(1,:)),input(2,first_ generation(1,:)),'r');
    title(['step = ',int2str(k)]);
    end

    %calculate distance
    distance=zeros(1,100);
    for i=1:100
    for j=1:x
    if(j~=x)
    temp_x=(input(1,first_generation(i,j))-input(1,first_generation(i,j+1)))^2;
    temp_y=(input(2,first_generation(i,j))-input(2,first_generation(i,j+1)))^2;
    else
    temp_x=(input(1,first_generation(i,j))-input(1,x+1))^2;
    temp_y=(input(2,first_generation(i,j))-input(2,x+1))^2;
    end
    temp_dis=sqrt(temp_x+temp_y);
    distance(1,i)=distance(1,i)+temp_dis;
    end
    end

    %sort generation according to it's distance
    generation=first_generation;
    generation(:,x+1)=distance';
    sort_generation=sortrows(generation,x+1);
    for h=1:x
    sort2_generation(:,h)=sort_generation(:,h);
    end

    %first operation :create shifted matrix: shiftsize is random
    shift_num=randi(x);
    for p=50:99
    sort2_generation(p,:)=circshift(sort2_generation(p ,:),[0 shift_num]);
    end

    %second operation : mutation
    mut(k,:)=randi(x,1,2);
    while(mut(k,1)==mut(k,2))
    mut(k,:)=randi(x,1,2);
    end
    sort2_generation(100,mut(k,1))=sort2_generation(10 0,mut(k,1))+sort2_generation(100,mut(k,2));
    sort2_generation(100,mut(k,2))=sort2_generation(10 0,mut(k,1))-sort2_generation(100,mut(k,2));
    sort2_generation(100,mut(k,1))=sort2_generation(10 0,mut(k,1))-sort2_generation(100,mut(k,2));

    %new generation
    first_generation=sort2_generation;
    end






  10. #10
    کاربر دائمی
    تاریخ عضویت
    مهر 1388
    محل زندگی
    iran
    پست
    311

    نقل قول: سوال : تغییر متغییر در matlab

    خوب ببیینید در بالا هم گفتم شما چون در اینجا از تابع input استفاده می کنید، دیگه نباید متغیری به این نام داشته باشید:

    x= input('plz input number ...' )

    این تابعیکه استفاده شده و تا اینجا مشکلی نیست. اما در کد زیر

    plot(input(1,first_generation(1,:)),input(2,first_ generation(1,:)),'*');

    از متغیر input استفاده کردید!
    البته در خطوط 22 و 31 و32و 24و 35 هم از این متغیر استفاده کردید.
    اسم این متغیر رو عوض کنید مشکلتون حل میشه.
    موفق باشید.

  11. #11

    نقل قول: سوال : تغییر متغییر در matlab

    همون طور که فرمودید من اسم متغییر input ( تا الان فک میکردم که تابع هست) رو تغییر دادم ولی بازم اررور میده !
    plz input number ...25

    x =

    25

    ??? Index exceeds matrix dimensions.

    Error in ==> tsp at 10
    plot(x(1,first_generation(1,:)),x(2,first_generation(1,:)),'*');

    البته اینجا اسمش x هست که اسم دسگه هم گذاشتم ولی باز اررور میده !

  12. #12
    کاربر دائمی
    تاریخ عضویت
    مهر 1388
    محل زندگی
    iran
    پست
    311

    نقل قول: سوال : تغییر متغییر در matlab

    x= input('plz input number ...' )

    input موجود در عبارت بالا تابعه. که یه عدد رو از ورودی در یافت می کنه و در متغیر x ذخیره می کنه!
    میشه بگید هدف از عبارت

    plot(x(1,first_generation(1,:)),x(2,first_generati on(1,:)),'*');

    چیه؟
    x رو در بالا یه متغیر int در یافت کردید. اما در
    x(1,first_generation(1,:))
    مثل تابع و با ماتریس باهاش رفتار می کنید!

  13. #13

    نقل قول: سوال : تغییر متغییر در matlab

    شما فرمودید که چون از input در خط اول به عنوان یک تابع استفاده شده دیگه نمیشه به عنوان متغییر ازش استفاده کرد !!! اینجوری که من متوجه شدم

    و در خط 9 و 10 که باز از input استفاده شده باید تغییر نام بدم - و من یه اسم دیگه بجای input گذاشتم ولی ج نداد و بعد از متغییر x استفاده کردم !!!! البته میدونم غلطه ، حالا شما اگه لطف کنید و یکم بیشتر توضیح بدید ممنون میشم !

  14. #14
    کاربر دائمی
    تاریخ عضویت
    مهر 1388
    محل زندگی
    iran
    پست
    311

    نقل قول: سوال : تغییر متغییر در matlab


    input=randi(100,2,26);
    first_generation=zeros(100,25);

    % try to make first generation
    for z=1:100
    first_generation(z,:)=randperm(25);
    end
    subplot(4,2,1:4)
    plot(input(1,first_generation(1,:)),input(2,first_ generation(1,:)),'*');
    for k=1:500
    if k==1||k==200||k==50||k==500
    switch k
    case 1
    subplot(4,2,5)
    case 50
    subplot(4,2,6)
    case 200
    subplot(4,2,7)
    case 500
    subplot(4,2,8)
    end
    plot(input(1,first_generation(1,:)),input(2,first_ generation(1,:)),'r');
    title(['step = ',int2str(k)]);
    end

    %calculate distance
    distance=zeros(1,100);
    for i=1:100
    for j=1:25
    if(j~=25)
    temp_x=(input(1,first_generation(i,j))-input(1,first_generation(i,j+1)))^2;
    temp_y=(input(2,first_generation(i,j))-input(2,first_generation(i,j+1)))^2;
    else
    temp_x=(input(1,first_generation(i,j))-input(1,26))^2;
    temp_y=(input(2,first_generation(i,j))-input(2,26))^2;
    end
    temp_dis=sqrt(temp_x+temp_y);
    distance(1,i)=distance(1,i)+temp_dis;
    end
    end

    %sort generation according to it's distance
    generation=first_generation;
    generation(:,26)=distance';
    sort_generation=sortrows(generation,26);
    for h=1:25
    sort2_generation(:,h)=sort_generation(:,h);
    end

    %first operation :create shifted matrix: shiftsize is random
    shift_num=randi(25);
    for p=50:99
    sort2_generation(p,:)=circshift(sort2_generation(p ,:),[0 shift_num]);
    end

    %second operation : mutation
    mut(k,:)=randi(25,1,2);
    while(mut(k,1)==mut(k,2))
    mut(k,:)=randi(25,1,2);
    end
    sort2_generation(100,mut(k,1))=sort2_generation(10 0,mut(k,1))+sort2_generation(100,mut(k,2));
    sort2_generation(100,mut(k,2))=sort2_generation(10 0,mut(k,1))-sort2_generation(100,mut(k,2));
    sort2_generation(100,mut(k,1))=sort2_generation(10 0,mut(k,1))-sort2_generation(100,mut(k,2));

    %new generation
    first_generation=sort2_generation;
    end


    کدهای بالا کد اولیه
    شماست، درسته؟
    شما اول بیاید متغیر input در این برنامه رو با یه متغیر دیگه مثلا input_var تغییر بدید.
    بعد از اینکه کلیه متغیرهای input رو تغییر دادید در ابتدای کد، متغیر x با همون کداز ورودی توسط تابع input دریافت کنید، و در برنامه به جای عدد 25 از x استفاده کنید. اگه منطق برنامه شما 26 رو معادل 25+1 در نظر میگیره ( یعنی اگه رودی رو 30بدید باید به جای 26 نوشته بشه 31) به جای 26 ها هم x+1 قرار بدید.
    در واقع فکر کنم شما

    input=randi(100,2,26);

    رو از برنامه حذف کردید که در واقع همون مقداردهی اولیه متغیر input_var شما ست. این خط کد رو به برنامه بعد از تابع input اضافه کنید و اسم اون رو بزارید input_var یا هر نامی که به جای متغیرهای input قرار دادید.

    موفق باشید.

  15. #15

    نقل قول: سوال : تغییر متغییر در matlab

    طبق فرمایش شما من همه این مراحل رو انجام داده بودم !!!

    الان دوباره از روی فایل اصلی- بک آپ مراحل رو رفتم ولی باز یه اررور دیگه میده :
    ??? Index exceeds matrix dimensions.

    Error in ==> tsp at 2
    x= input('plz input number ...' );

  16. #16
    کاربر دائمی
    تاریخ عضویت
    مهر 1388
    محل زندگی
    iran
    پست
    311

    نقل قول: سوال : تغییر متغییر در matlab

    برنامه زیر رو اجرا کنید
    %input=randi(100,2,input_num+1);
    input_num = input('plz add num... :')
    input_ar=floor(1 + (100-1+1) .* rand(2,input_num+1))
    first_generation=zeros(100,input_num);

    % try to make first generation
    for z=1:100
    first_generation(z,:)=randperm(input_num);
    end
    subplot(4,2,1:4)
    plot(input_ar(1,first_generation(1,:)),input_ar(2, first_generation(1,:)),'*');
    for k=1:500
    if k==1||k==200||k==50||k==500
    switch k
    case 1
    subplot(4,2,5)
    case 50
    subplot(4,2,6)
    case 200
    subplot(4,2,7)
    case 500
    subplot(4,2,8)
    end
    plot(input_ar(1,first_generation(1,:)),input_ar(2, first_generation(1,:)),'r');
    title(['step = ',int2str(k)]);
    end

    %calculate distance
    distance=zeros(1,100);
    for i=1:100
    for j=1:input_num
    if(j~=input_num)
    temp_x=(input_ar(1,first_generation(i,j))-input_ar(1,first_generation(i,j+1)))^2;
    temp_y=(input_ar(2,first_generation(i,j))-input_ar(2,first_generation(i,j+1)))^2;
    else
    temp_x=(input_ar(1,first_generation(i,j))-input_ar(1,input_num+1))^2;
    temp_y=(input_ar(2,first_generation(i,j))-input_ar(2,input_num+1))^2;
    end
    temp_dis=sqrt(temp_x+temp_y);
    distance(1,i)=distance(1,i)+temp_dis;
    end
    end

    %sort generation according to it's distance
    generation=first_generation;
    generation(:,input_num+1)=distance';
    sort_generation=sortrows(generation,input_num+1);
    for h=1:input_num
    sort2_generation(:,h)=sort_generation(:,h);
    end

    %first operation :create shifted matrix: shiftsize is random
    % shift_num=randi(input_num);
    shift_num=floor(1 + (input_num-1+1) .* rand(1,1))
    for p=50:99
    sort2_generation(p,:)=circshift(sort2_generation(p ,:),[0 shift_num]);
    end

    %second operation : mutation
    % mut(k,:)=randi(input_num,1,2);
    mut(k,:)=floor(1 + (input_num-1+1) .* rand(1,2))
    while(mut(k,1)==mut(k,2))
    mut(k,:)=floor(1 + (input_num-1+1) .* rand(1,2))
    % mut(k,:)=randi(input_num,1,2);
    end
    sort2_generation(100,mut(k,1))=sort2_generation(10 0,mut(k,1))+sort2_generation(100,mut(k,2));
    sort2_generation(100,mut(k,2))=sort2_generation(10 0,mut(k,1))-sort2_generation(100,mut(k,2));
    sort2_generation(100,mut(k,1))=sort2_generation(10 0,mut(k,1))-sort2_generation(100,mut(k,2));

    %new generation
    first_generation=sort2_generation;
    end
    برای 90 - 44- 25 - 26 که ورودی های منطقی است به درستی جواب میده.

  17. #17

    نقل قول: سوال : تغییر متغییر در matlab

    مرسی از همکاری و کمکت !!!!

    دوست من ، فایل شما باز اررور داد ولی اون کدی که تو پست قبل گفتم رو دوباره اجرا کردم ، دیگه اررور نمی ده و درست شد !!!!

    خیلی ممنون !!!

  18. #18
    کاربر دائمی
    تاریخ عضویت
    مهر 1388
    محل زندگی
    iran
    پست
    311

    نقل قول: سوال : تغییر متغییر در matlab

    خواهش می کنم. این کد روی سیستم من بدرستی جواب میده. احتمالا به دلیل تفاوت ورژن های متلب. اگه توجه کرده باشید به جای تابع randi از یه سری کد دیگه استفاده کردم. یه همچین تغییراتی روی ورژن های مختلف متلب برای اجرا باید داده بشه.
    موفق باشید.

تاپیک های مشابه

  1. سوال : تغییر شکل فرم ؟
    نوشته شده توسط mahdi_sh در بخش برنامه نویسی در 6 VB
    پاسخ: 3
    آخرین پست: یک شنبه 18 اردیبهشت 1384, 08:31 صبح
  2. سوال:تغییر رنگ زمینه در تابع Msgbox
    نوشته شده توسط احمد ذبیحی در بخش برنامه نویسی در 6 VB
    پاسخ: 2
    آخرین پست: پنج شنبه 01 اردیبهشت 1384, 16:05 عصر
  3. سوال: تغییر کدینگ صفحه با استفاده از js
    نوشته شده توسط zoro21750 در بخش طراحی وب (Web Design)
    پاسخ: 0
    آخرین پست: جمعه 19 فروردین 1384, 23:40 عصر
  4. فوری.سوال: تغییر رزولوشن در Kodak Imaging
    نوشته شده توسط zoro21750 در بخش برنامه نویسی در Delphi
    پاسخ: 1
    آخرین پست: پنج شنبه 18 فروردین 1384, 15:48 عصر

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

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