ورود

View Full Version : حل تابع چند جمله ای



صفحه : 1 [2]

rahnema1
دوشنبه 20 مرداد 1393, 17:51 عصر
منظورم اینه

n=[10 20 30 40 44 45 46 60 70 80 49 51 48 50 90];
pp=evalfis(n,a) ;
iGroup1=find(pp<0.5);
iGroup2=find(pp>=0.5);
N1=n(iGroup1)
N2=n(iGroup2)
Age1=age(iGroup1)
Age2=age(iGroup2)

coronaa
دوشنبه 20 مرداد 1393, 18:08 عصر
منظورم اینه

n=[10 20 30 40 44 45 46 60 70 80 49 51 48 50 90];
pp=evalfis(n,a) ;
iGroup1=find(pp<0.5);
iGroup2=find(pp>=0.5);
N1=n(iGroup1)
N2=n(iGroup2)
Age1=age(iGroup1)
Age2=age(iGroup2)

مرسی. عالی بود
مهندس تفاوت کدنویسی من و شما رو مشاهده می کنید؟
برنامه ای که من 15 خط مینویسم رو شما توی 3 خط می نویسید :) :لبخندساده:

rahnema1
دوشنبه 20 مرداد 1393, 18:15 عصر
چند تا دستور هست که زیاد در متلب کاربرد داره برای پیدا کردن اندکس ها یا مثلا کار با ماتریسها که توی اغلب جزوه های مختصر هم دیده میشه چیز خاصی نیست
لیست اینها هم میشه مثلا در گوگل در matlab refcard پیدا کرد

coronaa
سه شنبه 21 مرداد 1393, 09:00 صبح
مهندس من دارم توی کدهام از یه دستور شرطی استفاده میکنم. داخل این شرط میخوام بگم مثلن اگه n=10 بود فلان برنامه ای که توی یه m-file دیگه هست رو اجرا کن ولی اون برنامه بصورت تابع نیست. باید چیکار کنم؟

coronaa
سه شنبه 21 مرداد 1393, 09:11 صبح
واسه ی قوانین چطوری 1 یا 2 مشخص میکنی؟ بر چه اساسیه؟
aa = addrule (aa, [1 1 1 1;2 2 1 1]);

rahnema1
سه شنبه 21 مرداد 1393, 09:27 صبح
مهندس من دارم توی کدهام از یه دستور شرطی استفاده میکنم. داخل این شرط میخوام بگم مثلن اگه n=10 بود فلان برنامه ای که توی یه m-file دیگه هست رو اجرا کن ولی اون برنامه بصورت تابع نیست. باید چیکار کنم؟

فرقی نمیکنه کافیه اسم فایل را بنویسی تا اجرا بشه

rahnema1
سه شنبه 21 مرداد 1393, 09:29 صبح
واسه ی قوانین چطوری 1 یا 2 مشخص میکنی؟ بر چه اساسیه؟
aa = addrule (aa, [1 1 1 1;2 2 1 1]);


اینها داخل هلپ متلب یا مثالها هست

if(input1) then (output1) [1 1 1 1]
if(input2) then (output2) [2 2 1 1]

اول input ها میاد بعد هم output ها میاد و دو تای آخر که من 1 گذاشتم مربوط به وزن و یک پارامتر دیگه هست که پیش فزض یک گذاشتم

coronaa
سه شنبه 21 مرداد 1393, 14:49 عصر
اگه بخوام n جمله ی اول رو بصورت یک بردار نشون بدم چطوریه؟
مثلن وقتی n=5 هست بصورت زیر بشه
P=[ 1 2 3 4 5]

rahnema1
سه شنبه 21 مرداد 1393, 16:54 عصر
اگه بخوام n جمله ی اول رو بصورت یک بردار نشون بدم چطوریه؟
مثلن وقتی n=5 هست بصورت زیر بشه
P=[ 1 2 3 4 5]

متوجه منظور شما نشدم

coronaa
سه شنبه 21 مرداد 1393, 17:56 عصر
متوجه منظور شما نشدم
میخواستم n جمله ی اول اعداد طبیعی رو نمایش بدم. مثلاً اگه n برابر با 10 بود، بنویسه :
P=[ 1 2 3 4 5 6 7 8 9 10]

حل شد. به این صورت منظورم بود :
1:n
:لبخندساده::لبخندساده::لبخن ساده:

coronaa
جمعه 31 مرداد 1393, 20:48 عصر
اینم پلات

plotmf (a, 'input', 1);
plotmf (a, 'output', 1);

چطوری میشه نموداری که رسم میکنه رو ضخیمتر کنم یا سایزش رو تغییر بدم؟
توی فازی این امکان وجود داره؟

rahnema1
جمعه 31 مرداد 1393, 22:11 عصر
چطوری میشه نموداری که رسم میکنه رو ضخیمتر کنم یا سایزش رو تغییر بدم؟
توی فازی این امکان وجود داره؟

دقیقا نمیدونم یه نگاه به هلپش بینداز

coronaa
شنبه 01 شهریور 1393, 17:13 عصر
این یه مثال ساده هست.
همونطوری هم که گفتین جواب رو بر میگردونه دیگه!
چطوری باید جدا جدا توی workspace ذخیره کنم و هر مقادیر محیط و مساحت رو در هر دو مرحله داشته باشم؟
function [P,S]= math(r)

P=(pi)*r;
S=(pi)*r^2;
end
------------------------
clc
r = input('\n input r=');
[P,S]= math(r);
fprintf('\n mohit=%f\n',P);
fprintf('\n masahat=%f \n',S);
% --------------------------------
r = input('\n input r=');
[P,S]= math(r);
fprintf('\n mohit=%f\n',P);
fprintf('\n masahat=%f \n',S);

rahnema1
شنبه 01 شهریور 1393, 21:28 عصر
این جوری
function [P,S]= math(r)

P=(pi)*r;
S=(pi)*r^2;
end
------------------------
clc
r = input('\n input r=');
[P1,S1]= math(r);
fprintf('\n mohit=%f\n',P1);
fprintf('\n masahat=%f \n',S1);
% --------------------------------
r = input('\n input r=');
[P2,S2]= math(r);
fprintf('\n mohit=%f\n',P2);
fprintf('\n masahat=%f \n',S2);

coronaa
شنبه 01 شهریور 1393, 21:44 عصر
ممنونم.
ولی من همینو قبلن نوشته بودم. اینطوری نمیخواستم.
بیخیال. مرسی :)

coronaa
سه شنبه 11 شهریور 1393, 22:56 عصر
همونطوری که توی مقاله گفت این دو تا تابع باید maximize بشن. ولی این دستور که مینیمم سازی میکنه ویک نقطه مینیمم رو بدست میاره که!
مگه اینطور نیست؟

rahnema1
سه شنبه 11 شهریور 1393, 23:07 عصر
همونطوری که توی مقاله گفت این دو تا تابع باید maximize بشن. ولی این دستور که مینیمم سازی میکنه ویک نقطه مینیمم رو بدست میاره که!
مگه اینطور نیست؟

اگه پشت تابع یه علامت منفی بذارید، مینیمم تبدیل میشه به ماکسیمم

coronaa
سه شنبه 11 شهریور 1393, 23:20 عصر
اگه پشت تابع یه علامت منفی بذارید، مینیمم تبدیل میشه به ماکسیمم
من یه فایل آموزشی از متلب سایت گرفتم که دقیقن همین منفی رو گفته ولی اونجا اول یه تابع هدف معرفی کرده و سپس توابع خودش رو نوشته. من که اینجا تابع هدف ندارم!
در ضمن توی هلپ متلب گفته این دستور برای تک متغیره هست ولی من اینجا دوتا متغیر دارم. p و q
فکر کنم از دستور fmincon باید استفاده بشه.
اینطوری نیست؟

rahnema1
سه شنبه 11 شهریور 1393, 23:39 عصر
درسته واسه رابطه 5 فکر کنم fminbnd کافی باشه اما برای رابطه 6 همونطور که اشاره کردیدfmincon باید به کار بره. فکر کنم فقط لازم باشه تابع خودتون را داخل این دستور بذارید اون چیزهایی که لازم نیست را [ ] بذارید

coronaa
چهارشنبه 12 شهریور 1393, 09:32 صبح
درسته واسه رابطه 5 فکر کنم fminbnd کافی باشه اما برای رابطه 6 همونطور که اشاره کردیدfmincon باید به کار بره. فکر کنم فقط لازم باشه تابع خودتون را داخل این دستور بذارید اون چیزهایی که لازم نیست را [ ] بذاریداز چه جهت میگین رابطه (5) با fminbnd و معادله (6) با fmincon حل میشه؟اگه از نظر تعداد متغیر بگیم یا هردو ، دو متغیر p و q دارند و یا هر دو ، فقط یک متغیر q دارند.شما از این الگوریتمی که تو صفحه سوم داده سر در میارید؟فکر کنم این دوتا تابع رو باید با الگوریتمی که داده بهینه کنیم. با همون روش تکرار و آپدیت کردن.دقیقاً متوجه نشدم که باید چیکارش کنم!

rahnema1
چهارشنبه 12 شهریور 1393, 09:58 صبح
زیر کلمه max را نگاه کنید. در رابطه 5 فقط یک متغیر می بینیم اما در رابطه 6 چند تا می بینیم. دلیلش اینه.

coronaa
چهارشنبه 12 شهریور 1393, 10:11 صبح
آها. مرسی.
من هر کاری کردم نتونستم با اون کدها جواب بگیرم. یک تابع هدف و چندتا قید معرفی میکنه ولی اینجا اصلن اینطوری نیست!
یه مثال نمونه که داد اینطوری بود :
function [c, ceq]=NLC(x)

c=x(1)^2+x(2)^2-100;

ceq=[];

end

clc;
clear;
close all;

f=@(x) -x(1)*x(2);

lb=[0 0]';

x0=[1 1]';

[x, fx]=fmincon(f,x0,[],[],[],[],lb,[],@NLC);
این کدوم رو میخواد ماکزیمم کنه؟

coronaa
چهارشنبه 12 شهریور 1393, 10:30 صبح
من اینطوری نوشت. ولی خطا میده!
function [c, ceq]=NLC(x)

c=-p*q ;

ceq=[];

end

clc;
clear;
close all;
% ----------------------------
% Parameters : [MG1 MG2 MG3 MG4]

p=[12.5 12 13 15]; % Trading Price
q=[25 30 40 50]; % Amount of Energy
alpha = [.3 .32 .34 .36];
beta = [.2 .25 .27 .3];
lambda = [1 1 1 1];
D = [3.3 1.6 2.3 2];
m = [3 2 3 2];
k = [.38 .38 .38 .38];
% ----------------------------
% Satisfacton Function

for i=1:4
pq_bar = k.*(D-sum(q));
end
fprintf('Satisfacton Function = ');
disp(pq_bar)
% ----------------------------
% Production Cost

for i=1:4
Cq=alpha.*q.^2+beta.*q;
end
fprintf('Production Cost = ');
disp(Cq)
% --------------------------------

f=@(x) (((p+pq_bar).*q)-Cq);

lb=[0 0]';

x0=[1 1]';

[x, fx]=fminbnd(f,x0,[],[],[],[],lb,[],@NLC);

اشتباهه؟

rahnema1
چهارشنبه 12 شهریور 1393, 13:44 عصر
فرمول 6 اینجور میشه

D = [3.3 1.6 2.3 2];
lb=[0 0 0 0];
q=[25 30 40 50]; % Amount of Energy
alpha = [.3 .32 .34 .36];
lambda = [1 1 1 1];
k = 0.38;
f=@(q)sum(alpha.*q.^2+k*(D-sum(q)).*q);
[x, fx]=fmincon(f,q,[],[],[],[],lb,lambda);

coronaa
چهارشنبه 12 شهریور 1393, 15:58 عصر
1- چرا فرمول 6 رو اینطوری نوشتین؟ به این صورت نیست؟
sum(diff(Cq)+k.*(D-sum(q)).*q)-Cq ;
2- چرا k رو بصورت برداری ننوشتین؟ (بخاطر اینکه مقادیر یکسانی داره؟)
3- پارامت آخر آرگومان fmincon چرا لاندا گذاشتین؟ لاندا ماکزیمم عدد q نیست؟

rahnema1
چهارشنبه 12 شهریور 1393, 17:49 عصر
1- چرا فرمول 6 رو اینطوری نوشتین؟ به این صورت نیست؟
sum(diff(Cq)+k.*(D-sum(q)).*q)-Cq ;
2- چرا k رو بصورت برداری ننوشتین؟ (بخاطر اینکه مقادیر یکسانی داره؟)
3- پارامت آخر آرگومان fmincon چرا لاندا گذاشتین؟ لاندا ماکزیمم عدد q نیست؟

فرمول ساده شده را میشه در انتهای مقاله پیدا کرد
k ها که یکسان هستند
ub همون لاندا باید باشه دیگه

coronaa
چهارشنبه 12 شهریور 1393, 18:24 عصر
مرسی. کاملاً منطقیه.
اون کد آماده NLC رو بخاطر چی قرار میداد؟
و سوال دیگه اینکه الآن وقتی این اجرا میشه یک عدد منفی میده. یعنی اون نقطه، نقطه ی بهینه هست؟
باید معادله ی اولی هم به همین صورت حل بشه ولی با fminbnd و سپس این دوتا رو بذارم توی الگوریتمی که وجود داره؟

rahnema1
چهارشنبه 12 شهریور 1393, 18:50 عصر
مرسی. کاملاً منطقیه.
اون کد آماده NLC رو بخاطر چی قرار میداد؟
و سوال دیگه اینکه الآن وقتی این اجرا میشه یک عدد منفی میده. یعنی اون نقطه، نقطه ی بهینه هست؟
باید معادله ی اولی هم به همین صورت حل بشه ولی با fminbnd و سپس این دوتا رو بذارم توی الگوریتمی که وجود داره؟

فکر کنم رابطه 5 را لازم نداریم چون محاسبه برای موقعیه که فقط یک تولید کننده را در نظر می گیریم
NLC را لازم نداریم فکر کنم برای موقعی هست که بخواهیم شروط دیگه برقرار کنیم
یه چیزی برام مشخص نیست. لاندا که باید برابر باشه با بیشترین ظرفیت تولید هر تولید کننده را اینجا گذاشته 1 که برام مبهمه
در مورد جواب منفی هم دقت کنید که آیا x منفی شده؟ چون اگه اینجور باشه یه جای کار اشکال وجود داره که احتمالا مقدار لاندا باشه

coronaa
چهارشنبه 12 شهریور 1393, 19:10 عصر
منم دقیقاً متوجه نشدم واسه چی 1 گرفته. بر حسب پریونیت هم نمیتونه باشه!
جوابی که میگیرم اینطوریه :
Active inequalities (to within options.TolCon = 1e-006):
lower upper ineqlin ineqnonlin
1
2
3
4

x =

1 1 1 1


fx =

-1.2640

rahnema1
چهارشنبه 12 شهریور 1393, 19:14 عصر
فکر کنم q ها اشتباه هست باید حداکثر 1 باشه

coronaa
چهارشنبه 12 شهریور 1393, 19:23 عصر
شاید حرف شما درست باشه. آخه من مقادیر p و q رو بصورت فرضی گرفته بودم و اصلن به فکر لاندا نبودم!
مهندس کد نباید به این صورت باشه؟
D = 3.3;
lb=[0 0 0 0];
q=[25 30 40 50]; % Amount of Energy
alpha = .3;
lambda = 1 ;
k = 0.38;
f=@(q) sum(alpha.*q.^2+k.*(D-sum(q)).*q);
[x, fx]=fmincon(f,q,[],[],[],[],lb,lambda)
داخل هر میکرو گرید ظاهرن یه سری DG وجود داره که اونا توان تولید میکنند و اطلاعات جدول برای هر میکرو گرید هست و q هم مقدار تک تک انرژی داخل میکروگرید که توسط DG تولید میشه!
q رو بین صفر و یک میگیرم جواب صفر در میاد.
به نظرم مقادیر، بغیر از q نباید برداری باشه.

rahnema1
چهارشنبه 12 شهریور 1393, 19:30 عصر
توی مقاله در جدول 1 هم برای هر کدوم فقط یک مقدار گذاشته (ص 426)

این q ها فقط مقدار حدس اولیه را نشون میده رای ورود به الگوریتم. حالا هر کدوم را 0.5 بذارید مشکلی نیست و اجرا کنید
دفعه دیگه مثلا هر کدوم را مقادیر مختلف بین 0 و یک بذارید در هر صورت فکر کنم جواب fmincon یکسان باشه

rahnema1
چهارشنبه 12 شهریور 1393, 19:32 عصر
علامت منفی پشت تابع فراموش نشه

coronaa
چهارشنبه 12 شهریور 1393, 19:34 عصر
توی مقاله در جدول 1 هم برای هر کدوم فقط یک مقدار گذاشته (ص 426)

این q ها فقط مقدار حدس اولیه را نشون میده رای ورود به الگوریتم. حالا هر کدوم را 0.5 بذارید مشکلی نیست و اجرا کنید
دفعه دیگه مثلا هر کدوم را مقادیر مختلف بین 0 و یک بذارید در هر صورت فکر کنم جواب fmincon یکسان باشه
q رو بین صفر و یک قرار میدم جواب صفر در میاد.

coronaa
چهارشنبه 12 شهریور 1393, 19:40 عصر
تو صفحه 423 ، بعد از رابطه (1) هم دوتا شرط داره اینکه مجموع q نباید بزرگتر یا کوچیکتر از D(دیماند) باشه. اگه بود جریمه میشه یا ضرر میکنه.
پس یعنی باید 4 تا q بدست بیاریم که مجموعشون برابر D بشه دیگه. درسته؟

coronaa
چهارشنبه 12 شهریور 1393, 19:52 عصر
من داده های کد رو بصورت زیر تغییر دادم (مطابق داده های جدول شماره 1) :
D = 6.3;
lb=0 ;
q=[1 1.3 0.5 0.5]; % Amount of Energy
alpha = .3;
lambda = 1 ;
k = 0.38;
f=@(q) -sum(alpha.*q.^2+k.*(D-sum(q)).*q);
[x, fx]=fmincon(f,q,[],[],[],[],lb,lambda)
جوابی که میده :
Active inequalities (to within options.TolCon = 1e-006):
lower upper ineqlin ineqnonlin
1

x =

1.0e+017 *

0 2.9234 -0.8373 -0.8373


fx =

-2.3920e+034

rahnema1
پنج شنبه 13 شهریور 1393, 22:48 عصر
برای تولید تصویر 3 یعنی efficiency از این استفاده کردم ( بر اساس الگوریتم) یه چیزی شبیه این شد
400 را یه مقدار زیاد کی گیریم که طی اون مقدار همگرا بشه

alpha=.3;beta=1.2;k=.38;D=6.3;
f=@(q) -sum(alpha.*q.^2+k.*(D-sum(Q)).*q);
efficiency=zeros(1,10);
for numsupplier=2:10
Q=ones(1,numsupplier)*.5;
lb=zeros(1,numsupplier);
ub=ones(1,numsupplier);
[x1, fx1]=fmincon(f,Q,[],[],[],[],lb,ub);
for tekrar=1:400
for supplier=1:numsupplier
[x2, fx2]=fminbnd(f,0,1);
Q(supplier)=x2;
end
end
efficiency(numsupplier)=fx1/fx2;
end
plot(2:10,efficiency(2:10).*(2:10));

coronaa
پنج شنبه 13 شهریور 1393, 23:02 عصر
ممنونم. میشه بگی چیکار کردی؟
نمودار تقریبن برعکس شکل (3) شد!

coronaa
پنج شنبه 13 شهریور 1393, 23:07 عصر
Q برای چیه؟ با q فرق میکنه؟
مقادیر q بصورت فرضیه دیگه. درسته؟ چون اینا مقادیر انرژی هر DG هستن و ممکنه متفاوت هم باشند.

rahnema1
پنج شنبه 13 شهریور 1393, 23:30 عصر
ببخشید اینجا را درست کنید

efficiency(numsupplier)=fx2/fx1;

Q ثابته اما q قراره بهینه بشه

coronaa
جمعه 14 شهریور 1393, 08:07 صبح
Q کجا تعریف شده؟
برنامه نمیشناستش.
??? Undefined function or variable 'Q'.

rahnema1
جمعه 14 شهریور 1393, 09:03 صبح
Q کجا تعریف شده؟
برنامه نمیشناستش.
??? Undefined function or variable 'Q'.

داخل حلقه تعریف شده

coronaa
جمعه 14 شهریور 1393, 09:23 صبح
خب اول توی خط دوم Q آوردی متلبم گیر میده!
??? Undefined function or variable 'Q'.

Error in ==> @(q)-sum(alpha.*q.^2+k.*(D-sum(Q)).*q)

rahnema1
جمعه 14 شهریور 1393, 09:36 صبح
پس چه طور دیشب نمودار کشیدی؟
می تونی علاوه بر داخل حلقه یک بار هم بیرون حلقه تعریف کنی تا گیر نده

coronaa
جمعه 14 شهریور 1393, 09:38 صبح
پس چه طور دیشب نمودار کشیدی؟
می تونی علاوه بر داخل حلقه یک بار هم بیرون حلقه تعریف کنی تا گیر نده
من فکر کرده بودم شما Q رو اشتباهی گذاشتی واسه همین همه رو q گرفته بودم. جواب داده بود.
اونوقت به numsupplier گیر میده. اینو چیکار کنم. همینطوری بجاش 10 بذارم؟

coronaa
جمعه 14 شهریور 1393, 09:45 صبح
اگه بصورت زیر بنویسم نمودارش خط صاف میشه.
Q=ones(1,10)*.5;
f=@(q) -sum(alpha.*q.^2+k.*(D-sum(Q)).*q);

http://www.uplooder.net/img/image/53/7689d4ef455fc4ed7d2734bf0b7ece73/aa.jpg

coronaa
جمعه 14 شهریور 1393, 09:47 صبح
اگه همه رو q بذارم نمودارش به این صورت میشه.
شما چه نموداری میگیری؟
http://www.uplooder.net/img/image/9/d3b4ba91a19c93d8de04681b995f0cd3/bb.jpg

coronaa
جمعه 14 شهریور 1393, 09:58 صبح
مهندس ببخشید.
اگه منظور شما از این خط:
efficiency(numsupplier)=fx2/fx1;
رابطه ی شماره 15 مقاله هست ، فکر کنم مخرج کسر با الگوریتم گیم تئوری بدست میاد!
این الگوریتم (1) که در مقاله اومده و شما ازش استفاده کردین ، فکر کنم فقط برای صورت کسر باشه. اینطوری نیست؟

rahnema1
جمعه 14 شهریور 1393, 10:24 صبح
یه اصلاح کردم فکر کنم مشکلی نباشه
این که مخرج کسر از گیم تئوری به دست میاد هم من نمیدونم اگه اینطوره امتحان کن چون مقاله خیلی گنگ و مبهمه

global Q;global k;global D;global alpha;
alpha=.3; beta=1.2; k=.38; D=6.3;
function ret = f(q)
global Q;global k;global D;global alpha;
ret=-sum(alpha.*q.^2+k.*(D-sum(Q)).*q);
end
efficiency=zeros(1,10);
for numsupplier=2:10
Q=ones(1,numsupplier)*.5;
lb=zeros(1,numsupplier);
ub=ones(1,numsupplier);
[x1, fx1]=fmincon(f,Q,[],[],[],[],lb,ub);
for tekrar=1:400
for supplier=1:numsupplier
[x2, fx2]=fminbnd(f,0,1);
Q(supplier)=x2;
end
end
efficiency(numsupplier)=fx2/fx1;
end
plot(2:10,efficiency(2:10).*(2:10));

coronaa
جمعه 14 شهریور 1393, 10:46 صبح
مهندس توی متلب function با برنامه اصلی باید جدا باشه.
الآن من به این صورت جدا کردم ولی خطا میده :
function ret = f(q)

alpha=.3; beta=1.2; k=.38; D=6.3;

global Q;global k;global D;global alpha;
ret=-sum(alpha.*q.^2+k.*(D-sum(Q)).*q);
end

efficiency=zeros(1,10);
for numsupplier=2:10
Q=ones(1,numsupplier)*.5;
lb=zeros(1,numsupplier);
ub=ones(1,numsupplier);
[x1, fx1]=fmincon(f,Q,[],[],[],[],lb,ub);
for tekrar=1:400
for supplier=1:numsupplier
[x2, fx2]=fminbnd(f,0,1);
Q(supplier)=x2;
end
end
efficiency(numsupplier)=fx2/fx1;
end
plot(2:10,efficiency(2:10).*(2:10)), grid
چطوری باید جدا بشه؟

rahnema1
جمعه 14 شهریور 1393, 11:01 صبح
توی اکتاو کتاسفانه این تابعها را نداشت من در یه نرم افزار دیگه به دست آوردم اینم نمودارش
http://www.sharefile.ir/uploads/1409943242.png
و صورت کسر هم مطابق با fminbnd یعنی رابطه 5 هست

coronaa
جمعه 14 شهریور 1393, 11:06 صبح
مهندس من پست قبلیم رو ادیت کردم. اون کد رو باید جدا کنم! چطوریه؟

rahnema1
جمعه 14 شهریور 1393, 11:11 صبح
function ret = f(q)
global Q;global k;global D;global alpha;
ret=-sum(alpha.*q.^2+k.*(D-sum(Q)).*q);
end


global Q;global k;global D;global alpha;
alpha=.3; beta=1.2; k=.38; D=6.3;
efficiency=zeros(1,10);
for numsupplier=2:10
Q=ones(1,numsupplier)*.5;
lb=zeros(1,numsupplier);
ub=ones(1,numsupplier);
[x1, fx1]=fmincon(f,Q,[],[],[],[],lb,ub);
for tekrar=1:400
for supplier=1:numsupplier
[x2, fx2]=fminbnd(f,0,1);
Q(supplier)=x2;
end
end
efficiency(numsupplier)=fx2/fx1;
end
plot(2:10,efficiency(2:10).*(2:10)), grid

coronaa
جمعه 14 شهریور 1393, 11:24 صبح
جدا کردم ولی این پیغام رو میده :??? Input argument "q" is undefined.Error in ==> f at 3 ret=-sum(alpha.*q.^2+k.*(D-sum(Q)).*q);

rahnema1
جمعه 14 شهریور 1393, 11:29 صبح
قبل از اجرا یک clear all بزن
تابع را در فایل f.m ذخیره کن

coronaa
جمعه 14 شهریور 1393, 11:34 صبح
همین کار رو کردم.
برنامه فانکشن بصورت زیره :
function ret = f(q)
global Q;global k;global D;global alpha;
ret=-sum(alpha.*q.^2+k.*(D-sum(Q)).*q);
end
برنامه اصلی :
clc; close all; clear;
global Q;global k;global D;global alpha;
alpha=.3; beta=1.2; k=.38; D=6.3;
efficiency=zeros(1,10);
for numsupplier=2:10
Q=ones(1,numsupplier)*.5;
lb=zeros(1,numsupplier);
ub=ones(1,numsupplier);
[x1, fx1]=fmincon(f,Q,[],[],[],[],lb,ub);
for tekrar=1:400
for supplier=1:numsupplier
[x2, fx2]=fminbnd(f,0,1);
Q(supplier)=x2;
end
end
efficiency(numsupplier)=fx2/fx1;
end
plot(2:10,efficiency(2:10).*(2:10)), grid
ولی خطا میده. توی فانکشن q رو نمیشناسه!

rahnema1
جمعه 14 شهریور 1393, 11:40 صبح
حتما یک فایل یا تابع با همین نام در یک فولدر بالاتر داری اگه بتونی نام تابع را تغییر بده یا اون فایل را حذف کن

coronaa
جمعه 14 شهریور 1393, 11:42 صبح
برنامه اصلی رو که ران میکنم خطای زیر رو میده :
??? Input argument "q" is undefined.

Error in ==> f at 3
ret=-sum(alpha.*q.^2+k.*(D-sum(Q)).*q);

rahnema1
جمعه 14 شهریور 1393, 11:44 صبح
kاصلا نام تابع را در همه جا تبدیل کن به fff

coronaa
جمعه 14 شهریور 1393, 11:45 صبح
حتما یک فایل یا تابع با همین نام در یک فولدر بالاتر داری اگه بتونی نام تابع را تغییر بده یا اون فایل را حذف کن
نه اسمشم تغییر دادم. باز همون خطا!

rahnema1
جمعه 14 شهریور 1393, 11:49 صبح
داخل fminbnd و fmincon بذار @f

coronaa
جمعه 14 شهریور 1393, 11:51 صبح
وقتی برنامه اصلی رو ران میکنم، به خط 9 که میرسه میره به برنامه fff .
حالا فانکشن رو که اجرا میکنه ، توی خط سوم برنامه :
ret=-sum(alpha.*q.^2+k.*(D-sum(Q)).*q);
میگه q رو نمیشناسه!

coronaa
جمعه 14 شهریور 1393, 11:53 صبح
داخل fminbnd و fmincon بذار @f
همه ی این تغییرات رو انجام دادم.
??? Input argument "q" is undefined.

Error in ==> fff at 3
ret=-sum(alpha.*q.^2+k.*(D-sum(Q)).*q);

Error in ==> plotjadid1 at 9
[x1, fx1]=fmincon(fff,Q,[],[],[],[],lb,ub);

rahnema1
جمعه 14 شهریور 1393, 11:54 صبح
چیزی به ذهنم نمیرسه
با چند نمونه تابع ساده امتحان کن شاید معلوم بشه
از global هم استفاده کن

coronaa
جمعه 14 شهریور 1393, 11:59 صبح
چیزی به ذهنم نمیرسه
با چند نمونه تابع ساده امتحان کن شاید معلوم بشه
از global هم استفاده کن
کار global چیه؟
یه بار global q هم گذاشتم دیدم نشد.

rahnema1
جمعه 14 شهریور 1393, 12:05 عصر
global باعث میشه متغیرهایی که خارج تابع تعریف شده در داخل تابع هم شناخته بشن

coronaa
جمعه 14 شهریور 1393, 12:18 عصر
نمیشه تابع رو بصورت جداگانه تعریف نکنی و توی همون برنامه اصلی قرار بدی؟
آخه توی فانکشن ، مقادیر آلفا، دیماند و Q در برنامه اصلی تعریف شده ولی q اصلن هیچ جا بعنوان متغیر تعریف نشده.

rahnema1
جمعه 14 شهریور 1393, 12:31 عصر
q که پارامتر ورودی تابع هست

coronaa
جمعه 14 شهریور 1393, 12:38 عصر
پس چرا توی همون فانکشن رابطه ی
ret=-sum(alpha.*q.^2+k.*(D-sum(Q)).*q);
q رو نمیشناسه؟

rahnema1
جمعه 14 شهریور 1393, 13:37 عصر
چرا علامت @ را نذاشتی؟ گفتم به شما که

[x1, fx1]=fmincon(@f,Q,[],[],[],[],lb,ub);

coronaa
جمعه 14 شهریور 1393, 15:48 عصر
چرا علامت @ را نذاشتی؟ گفتم به شما که

[x1, fx1]=fmincon(@f,Q,[],[],[],[],lb,ub);

آخ ببخشید. نمیدونم اصن اینو فراموش کرده بودم. جواب داد. همون نموداری که شما بدست آوردین رو بدست آورد.
حالا یه سوال :
شما توی این برنامه اومدین رابطه ی شماره 6 (یا همون ساده شده ش در رابطه شماره 24)، یک بار با روش fminbnd و یک بار با روش fmincon حل کردین و بعد تقسیم بر هم کردین؟
اونوقت معادله 5 نباید هیچ نقشی داشته باشه و همچنین مقدار p؟

rahnema1
جمعه 14 شهریور 1393, 17:54 عصر
5و6 هر دو یکی هستند فقط بستگی داره چند تا ورودی باشه

coronaa
جمعه 14 شهریور 1393, 18:22 عصر
مهندس قسمت اول سوالم رو جواب میدین؟
هنوز خوب متوجه نشدم که این برنامه داره چیکار میکنه!

rahnema1
شنبه 15 شهریور 1393, 10:25 صبح
فکر کنم این برنامه اشتباه باشه
باید مطالب ستون سمت چپ صفحه 424 هم در نظر گرفته بشه

coronaa
شنبه 15 شهریور 1393, 10:42 صبح
فکر کنم این برنامه اشتباه باشه
باید مطالب ستون سمت چپ صفحه 424 هم در نظر گرفته بشه
مهندس، فکر کنم اینی که تو بدست آوردی باید برای صورت کسر باشه. واسه مخرج از گیم تئوری استفاده میشه و مطالب سمت چپ صفحه 424 هم شاید واسه مخرج کسر باشه.

coronaa
پنج شنبه 20 شهریور 1393, 10:28 صبح
مهندس ببخشید، این برنامه رو بصورت زیر تغییر دادم. مخرج کسر رو یک عدد ثابت گرفتم که همون ماکزیمم سود ائتلاف بین DG های یک MG هست. طبق متن بالای رابطه (15) گفتم احتمالن باید به این صورت باشه. نظر شما چیه؟ اون تکرار 1 تا 400 رو حذف کردم مشکلی توی الگوریتم بوجود نمیاد؟
clc; close all; clear;
global Q;global k;global D;global alpha;
alpha=.3; beta=1.2; k=.38; D=6.3;
V_opt=3.4713; % Tebghe jadvale 4
efficiency=zeros(1,10);
for numsupplier=2:10
Q=ones(1,numsupplier)*.5;
lb=zeros(1,numsupplier);
ub=ones(1,numsupplier);
[x1, V_ne]=fmincon(@fff,Q,[],[],[],[],lb,ub);
% for tekrar=1:400
% for supplier=1:numsupplier
% [x2, fx2]=fminbnd(@fff,0,1);
% Q(supplier)=x2;
% end
% end
efficiency(numsupplier)=V_ne/V_opt;
end
plot(2:10,efficiency(2:10).*(2:10)), grid
ylabel('Symmetric NE efficiency');
xlabel('Number of Suppliers in Microgrid')

rahnema1
پنج شنبه 20 شهریور 1393, 11:58 صبح
فکر کنم اینجوری فایده ای نداشته باشه. احتمالا باید روابط موجود در ستون چپ ص 424 را به عنوان محدودیت الگوریتم بهینه سازی وارد مثلا fmincon کنیم

coronaa
پنج شنبه 20 شهریور 1393, 12:13 عصر
فکر کنم اینجوری فایده ای نداشته باشه. احتمالا باید روابط موجود در ستون چپ ص 424 را به عنوان محدودیت الگوریتم بهینه سازی وارد مثلا fmincon کنیم
کاملن درسته ولی هنوز متوجه نشدم که این قیدها رو چطوری باید در نظر بگیرم.
یه سوال :
توی این برنامه یه جورایی بازده Lowerbound پلات شده واسه upperbound هم میشه همین کار رو کرد؟

rahnema1
پنج شنبه 20 شهریور 1393, 13:44 عصر
حداقل در این مقاله که به روشنی مشخص نیست باید مطالب دیگه را ببینیم

rahnema1
پنج شنبه 20 شهریور 1393, 18:58 عصر
یک برنامه متلب به نام NIRA هست که اینجور مسائل را حل می کنه
http://www.sharefile.ir/uploads/1410456153.zip

این مقالات هم مطالعه کنید
RELAXATION ALGORITHMS IN FINDING NASH EQUILIBRIA

Relaxation algorithms to find Nash equilibria with economic applications

Numerical solutions to coupled-constraint (or generalised Nash) equilibrium problems

NIRA-3 AN IMPROVED MATLAB PACKAGE FOR FINDING NASH EQUILIBRIA IN INFINITE GAMES

coronaa
پنج شنبه 20 شهریور 1393, 23:34 عصر
آقا ممنونم. به زحمت افتادی. شرمنده.
مقالات رو هم دانلود کردم. این برنامه های NIRA چطوری کار میکنه؟ مثل همون mat-tug هست؟
توی فولدر Scripts توی بعضی برنامه هاش آدرس یه فایل داره به اسم :
filename='C:\\MAStools\\workspace\\NetMason\\outpu ts\\temp\\incomeRate.txt';
اینو باید تغییر بدم؟
همچنین توی فولدر NIRA_10_2006 برنامه interfac رو اجرا میکنم یه اسم میخواد. نمیدونم چی باید بنویسم. خروجیش بصورت زیره :
>> interfac
************************** interfac.m ***************************

User interface for the relaxation algorithm

Enter the name of the script file containing the parameters [default=river_j]:
میگه دیفالتش هم کد river_j هست ولی چنین کدی توی اون فایلها نیست!
برنامه آخری ظاهرن یه چیزایی در مورد این برنامه داره توضیح میده. دارم میخونم.
در ضمن، من نباید جایی constraint های مقاله خودم رو در نظر بگیرم؟
بازم مرسی.

rahnema1
شنبه 22 شهریور 1393, 16:35 عصر
اصل کار همون NIRA هستش
دقیقا باهاش کار نکردم ولی با توجه به اینکه مربوط بهinfinite game می شه به این مساله هم میخوره یه سری تنظیمات باید صورت بگیره که داخل pdf هم اشاره شده

coronaa
شنبه 22 شهریور 1393, 17:08 عصر
من باید یه اسکریپت به اسم river-j درست کنم و پارامترهای زیر توش تعریف بشه؟
function[relaxfun, constrfun, description, dims,...
lowerbound, upperbound, precision, maxits, start,...
alphamethod, toler] = river j()
یا هر کدوم از اینا باز جدا یه فانکش است؟
ظاهرن دو تای اولی باید فانکشن جدا باشن. بقیه پارامترها باید تو خود river تعریف بشه؟
میشه کمک کنی؟

coronaa
شنبه 22 شهریور 1393, 18:15 عصر
من ساختار اسکریپت های زیر رو نوشتم ولی کامل نیست.
river_j , river_fj , river_cj
صفحه ی 17 میگه relaxfun و constrfun رو باید از طریق فانکشن های بالایی صدا بزنی. چطوری باید این کار رو بکنم؟
http://uplood.ir/t4VZ

rahnema1
دوشنبه 24 شهریور 1393, 16:29 عصر
یه نسخه جدید NIRA پیدا کردم که در محیط گرافیکی انجام می دهیم و فکر کنم راحت تره
این را امتحان کن manual هم داره
https://drive.google.com/folderview?id=0B39JLTTdR-V8c0hSdUNVVmprM2M&usp=drive_web

من متلب ندارم امتحان کنم توی اکتاو هم تابعهایی مثل fmincon نداره

coronaa
دوشنبه 24 شهریور 1393, 17:41 عصر
ممنونم مهندس
محیط GUI اینو توی گوگل دیده بودم ولی نتونسته بودم دانلودش کنم. دستت درد نکنه.
امیدوارم که بتونم جواب بگیرم.
واقعاً ازت ممنونم.

coronaa
دوشنبه 24 شهریور 1393, 22:04 عصر
مهندس ظاهرن این GUI روی ورژنهای جدید متلب کار میکنه. توی هلپش که صحبت از 2014 میکنه ولی توی Readme صحبت از 2013b میکنه.
من که ندارم. فردا باید برم روی سیستم یکی از بچه ها که 2013a داره چک کنم ببینم چطوریه!
ولی همچنان پیگیر کدنویسی اونم هستم.
یه سوال دارم :
برنامه river-j رو باید بصورت زیر بنویسم؟
نمیخوام تستش کنی. فقط ساختارش به این صورت هست یا نه؟ (صفحه 15)
function[relaxfun, constrfun,, description, dims,...
lowerbound, upperbound, precision, maxits, start,...
alphamethod, toler] = river_j()


relaxfun = river_fj ;
constrfun = river_cj;
description = 'River Basin Pollution Game';
dims = ones(1,10);
lowerbound = zeros(1,10);
upperbound = ones(1,10);
precision = [1e-5,1e-5];
maxits = 100;
start = zeros(1,3);
alphamethod = 3;
toler = [1e-10];

end

river-fj و river-cj خودشون دوتا فانکشن جدا هستن.

rahnema1
سه شنبه 25 شهریور 1393, 07:59 صبح
فکر کنم اینجا محدودیت لازم نداریم پس river_cj لازم نیست
حالا یه تغییراتی دادم
numplayers در فایل interface را برابر 10 گذاشتم که میشه تغییر داد
http://www.sharefile.ir/uploads/1410841460.zip

coronaa
سه شنبه 25 شهریور 1393, 09:17 صبح
شاید محدودیت لازم نباشه ولی باید تابعش وجود داشته باشه. من فعلن فعالش کردم و برابر تهی قرار دادم.
مشکل الآن اینجاست که میگه برای فانکشن river-j تعداد آرگومانهاش زیاده!
وقتی تابع interfac رو توی command window اجرا میکنم پیغام زیر مشاهده میشه :
>> interfac
************************************* interfac.m **********************

User interface for the relaxation algorithm

??? Error using ==> river_j
Too many output arguments.

Error in ==> interfac at 35
[relaxfun,constrfun,description,gametype,dims,lower bound,upperbound,...

rahnema1
سه شنبه 25 شهریور 1393, 09:26 صبح
این یکی
http://www.sharefile.ir/uploads/1410869820.zip

coronaa
سه شنبه 25 شهریور 1393, 09:46 صبح
توی interfac پارامتر gametype نبود که اضافه کردم خودم.
الآن i رو نمیشناسه (توی فانکشن river-fj )
>> interfac
*************************** interfac.m **************************

User interface for the relaxation algorithm

??? Input argument "i" is undefined.

Error in ==> river_fj at 3
f=alpha.*q(i).^2+k.*(D-sum(q)).*q(i);

Error in ==> river_j at 5
relaxfun = river_fj ;

Error in ==> interfac at 35
[relaxfun,description,dims,gametype,lowerbound,uppe rbound,...

توی فانکشن river-fj هیچکدوم از پارامترهای i , q, جایی تعریف نشده!
مهندس river-cj برای تابع هزینه هست. فکر نکنم باید حذفش کنی! خودش باید وجود داشته باشه ولی قیدی براش در نظر نگیریم. نظرتون چیه ؟
function [c, ceq] = river_cj(q, varargin)

alpha=.3;beta=1.2;

c = alpha.*q.^2+beta.*q;

ceq = [ ]; % no equality constraints

end

rahnema1
سه شنبه 25 شهریور 1393, 09:54 صبح
یه اشتباه
توی فایل river_j این را درست کن
alphamethod = 3;

coronaa
سه شنبه 25 شهریور 1393, 10:03 صبح
ببخشید. ظاهرن قسمت دوم پست خودم رو اشتباه شدم. اون تابع هزینه نیست!
ولی فانکشن river-fj هم که رابطه ای رو نوشتید فکر نکنم واسه این اسکریپت باشه.
توی این اسکریپت باید تابع payoff نوشته بشه که من خودم هنوز نفهمیدم این تابع رو از کجا باید گیر بیارم ولی مقادیری که تابع payoff میتونه بدست بیاد رو از برنامه گیم تئوری قبل که کار کردیم میتونم بذارم اینجا.
یک بردار 1 در 3 میتونه باشه.

rahnema1
سه شنبه 25 شهریور 1393, 10:04 صبح
یه سری تغییرات دادم
http://www.sharefile.ir/uploads/1410941311.zip

coronaa
سه شنبه 25 شهریور 1393, 10:13 صبح
یکمی بهتر شد. متغیرها رو میشناسه فعلن!
پیغام :
>> interfac
******************************** interfac.m **************************

User interface for the relaxation algorithm

************************************* relax.m ********************************************

Number of players is 10.

The starting point is: [ [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] ]

Iteration 1
??? Attempted to access toler(2); index out of bounds because
numel(toler)=1.

Error in ==> z_const at 14
options = optimset('Diagnostics','off','Display','off','Larg eScale', 'off',
'MaxFunEvals', 500, 'FunValCheck', 'on', 'TolCon', toler(1), 'TolFun',
toler(2), 'TolX', toler(3));

Error in ==> relax at 101
[z, lambda, exitflag]=z_const(x,dims,lowerbound,upperbound, toler);

Error in ==> interfac at 45
[p, ps, c, cs, n, a, l, t, exitflag] = relax(start, dims, lowerbound,
upperbound, precision, maxits, alphamethod, toler);

ظاهرن toler باید یک بردار باشه ولی اینجا یک عدد هست برابر با :
toler =

1.0000e-010

rahnema1
سه شنبه 25 شهریور 1393, 10:18 صبح
فایل river_j این اصلاح بشه
toler = [1e-10, 1e-10, 1e-10];

coronaa
سه شنبه 25 شهریور 1393, 10:20 صبح
به اشتباهم پی برده بردم :)
انجامش دادم. مهندس ، در ادامه باز constrfun مزاحم میشه. چطوره باشه ولی تهی باشه؟ الآن باز گیر داد.
پیغام :
>> interfac
**************************** interfac.m *************************

User interface for the relaxation algorithm

************************************* relax.m ********************************************

Number of players is 10.

The starting point is: [ [0] [0] [0] [0] [0] [0] [0] [0] [0] [0] ]

Iteration 1
Warning: Options LargeScale = 'off' and Algorithm =
'trust-region-reflective' conflict.
Ignoring Algorithm and running active-set method. To run
trust-region-reflective, set
LargeScale = 'on'. To run active-set without this warning, use Algorithm =
'active-set'.
> In fmincon at 412
In z_const at 16
In relax at 101
In interfac at 45
z(x) = [ [1] [1] [1] [1] [1] [1] [1] [1] [1] [1] ]
Warning: Options LargeScale = 'off' and Algorithm =
'trust-region-reflective' conflict.
Ignoring Algorithm and running active-set method. To run
trust-region-reflective, set
LargeScale = 'on'. To run active-set without this warning, use Algorithm =
'active-set'.
> In fmincon at 412
In relax at 122
In interfac at 45

alpha =

0.5000


x0 =

Columns 1 through 7

0.5000 0.5000 0.5000 0.5000 0.5000 0.5000 0.5000

Columns 8 through 10

0.5000 0.5000 0.5000

Warning: Options LargeScale = 'off' and Algorithm =
'trust-region-reflective' conflict.
Ignoring Algorithm and running active-set method. To run
trust-region-reflective, set
LargeScale = 'on'. To run active-set without this warning, use Algorithm =
'active-set'.
> In fmincon at 412
In op_alph3 at 26
In fmincon at 519
In relax at 122
In interfac at 45
??? Undefined function or method 'str2func' for input arguments of type
'double'.

Error in ==> relaxconstr at 9
cf = str2func(constrfun);

Error in ==> fmincon at 599
[ctmp,ceqtmp] = feval(confcn{3},X,varargin{:});

Error in ==> relax at 122
alpha =
fmincon(@op_alph3,0.5,[],[],[],[],0,1,@relaxconstr,options,x,z,dims,lowerbound,uppe rbound,[],[],toler);

Error in ==> interfac at 45
[p, ps, c, cs, n, a, l, t, exitflag] = relax(start, dims, lowerbound,
upperbound, precision, maxits, alphamethod, toler);

Caused by:
Failure in initial user-supplied nonlinear constraint function
evaluation. FMINCON cannot continue.

rahnema1
سه شنبه 25 شهریور 1393, 10:34 صبح
http://www.sharefile.ir/uploads/1410905537.zip

coronaa
سه شنبه 25 شهریور 1393, 10:44 صبح
ممنونم مهندس. خیلی خیلی دستت درد نکنه :لبخندساده:
خطا نداد و تا آخر اجرا شد. حالا واقعن درسته یا نه رو نمیدونیم. چون 100 در 100 قیدهایی باید لحاظ بشه و جوابها هم همه یکسان شد.
جوابش زیاد بود مستقیم اینجا نذاشتم. به pdf تبدیل کردم.
حالا اگه بخوایم مثل همون برنامه قبلی پلات کنیم ببینیم مثل همون شکل میشه یا نه باید چیکار کنیم؟
این تازه جواب صورت کسر رابطه 15 بود یا جواب کلی بدست اومد؟
مهندس، من هنوز متوجه نشدم که توی اسکریپت river-fj چرا از اون رابطه استفاده کردین. مگه نباید تابع payoff باشه؟
و سوال بعدی اینکه numplayers چطوری 10 میشه؟ مقدارش رو کجا وارد کردی؟


http://uplood.ir/8N4C

rahnema1
سه شنبه 25 شهریور 1393, 22:53 عصر
numplayers همون تعداد ژنراتوهاست که از 2 تا 10 میذاریم که من اینجا 10 گذاشتم.
مطابق قبل مخرج کسر را از این برنامه ها میشه پیدا کرد:

function ret = fffu(q)
global Q;global k;global D;global alpha;
ret=-sum(alpha.*q.^2+k.*(D-sum(Q)).*q);
end


clc; close all; clear;
numplayers=10
global Q;global k;global D;global alpha;
alpha=.3; beta=1.2; k=.38; D=6.3;
lb=zeros(1,numplayers);
ub=ones(1,numplayers);
[x1, fx1]=fmincon(@fffu,ones(1,numplayers)*.5;,[],[],[],[],lb,ub);
disp('makhraj=')
disp(-fx1)

در برنامه interfac هم در قسمت پایانی که 10 تا عدد 0.035774 به دست اومده
مجموع اونها میشه 0.35774 که فکر کنم صورت کسر efficiency میشه یعنی مقدار صورت برابر است با sum(c)

coronaa
سه شنبه 25 شهریور 1393, 23:32 عصر
شما تازه توی این برنامه تعداد numplayersرو مشخص کردین. توی برنامه های قبلی که استفاده می شد از کجا عددش رو میگرفت؟ جایی وارد کرده بودین؟
طبق شکلهایی که توی مقاله هست باید واسه هر supplier یه راندمان وجود داره. یعنی یه عدد تقسیم بر عدد دیگه. اینجا من اگه صورت رو تقسیم بر مخرج کنم فقط یه عدد بدست میاد. اینطوری که نمیتونم پلات کنم!
ضمن اینکه صورت کسر، نقاط تعادل نش هست که عددش 0.66872 هست و اون اعداد 0.035774 بردار payoff هست ظاهرن!
و اینکه چرا همه ی عددها یکسان در میاد؟

rahnema1
چهارشنبه 26 شهریور 1393, 06:23 صبح
برنامه را که گفتم اجرا کن حداقل ببین جوابش مثل جواب اون نمودار شده یا نه. اگر هم اشکالی وجود داشت معلوم می شد. چرا اینقدر چک و چونه می زنی؟ :))
من نمیتونم این را اجرا کنم وگرنه جوابش را الان با نمودار اینجا میذاشتم
مثلا numplayers در برنامه قبلی numsupplier بوده

برای نمودار هم که معلمه . این کار را 9 بار اجرا کن یعنی
یکبار numplayers را برابر 2 قرار بده
یکی برای 3
یکی برای 4
یکی برای 5
...
یکی برای 10
در نتیجه 9 تا عدد داریم که میشه باهاش نمودار کشید البته با یک حلقه ساده هم می تونیم انجام بدیم

عدد 0.66872 چیه؟ میزان تولیده
عدد 0.035774 چیه؟ پول به دست امده هست
در فرمول efficiency میزان پول یا سود به دست اومده تقسیم میشه نه میزان تولید

اینکه یکسان به دست میاد هم علتش اینه که ما در ارائه ورودی ها برای هیچ تولید کننده ای ارجحیتی نسبت به بقیه قائل نشدیم که انتظار داشته باشیم میزان تولید یا سود او با دیگران متفاوت باشه و هدف ما تنها به دست آورد میزان سودی بوده که از طریق تولید کننده ها در تعادل نش به دست میاد

coronaa
چهارشنبه 26 شهریور 1393, 10:22 صبح
ببخشید که انقدر سوال می پرسم. چون می خوام بدونم که چیکار می کنی :لبخندساده:
جوابش در زیر پیوست شد.
مگه این خودش از numplayer دو تا 10 اجرا نمیکنه؟ پس چرا دوباره یه حلقه براش تعریف کنیم؟
http://uplood.ir/DD4W
دیگه دارم مجبور می شم یه پک کامل متلب رو برای شما بصورت اشانتیون بفرستم تا روی سیستمت نصب کنی :لبخندساده:

rahnema1
چهارشنبه 26 شهریور 1393, 10:55 صبح
این برنامه فقط برای 10 انجام شده حلقه ای در کار نیست اون حلقه هم اگه دقت کنی کامنت شده
برنامه قبلی یه اشتباه داشت باید مخرج برابر 4 و خورده ای بشه

function ret = fffu(q)
alpha=.3; beta=1.2; k=.38; D=6.3;
ret=-sum(alpha.*q.^2+k.*(D-sum(q)).*q);
end


clc; close all; clear;
numplayers=10
lb=zeros(1,numplayers);
ub=ones(1,numplayers);
[x1, fx1]=fmincon(@fffu,ones(1,numplayers)*.5;,[],[],[],[],lb,ub);
disp('makhraj=')
disp(-fx1)

coronaa
چهارشنبه 26 شهریور 1393, 11:06 صبح
برای پلات کردنش حلقه for هم گذاشتم :
clc; close all; clear;
interfac
global Q;global k;global D;global alpha;
alpha=.3; beta=1.2; k=.38; D=6.3;
efficiency = zeros(1,10)
for numplayers=2:10
lb=zeros(1,numplayers);
ub=ones(1,numplayers);
[x1, fx1]=fmincon(@fffu,ones(1,numplayers)*.5,[],[],[],[],lb,ub);
disp('makhraj=')
disp(-fx1)
disp('Soorat=')
disp(sum(c))
efficiency(numplayers) = sum(c)/(-fx1)
end
plot(2:10,efficiency(2:10).*(2:10)), grid
ylabel('Symmetric NE efficiency');
xlabel('Number of Suppliers in Microgrid')

جواب efficiency
efficiency =

Columns 1 through 7

0 0.0664 0.0443 0.0332 0.0266 0.0221 0.0190

Columns 8 through 10

0.0166 0.0148 0.0133

http://www.uplooder.net/img/image/66/2921529c00450696aa9957c308c5dcb8/fig.png

coronaa
چهارشنبه 26 شهریور 1393, 11:13 صبح
پست بالایی رو تازه دیدم . اینطوری شد :
clc; close all; clear;
interfac
global Q;global k;global D;global alpha;
alpha=.3; beta=1.2; k=.38; D=6.3;
efficiency = zeros(1,10)
for numplayers=2:10
lb=zeros(1,numplayers);
ub=ones(1,numplayers);
[x1, fx1]=fmincon(@fffu,ones(1,numplayers)*.5,[],[],[],[],lb,ub);
disp('makhraj=')
disp(-fx1)
disp('Soorat=')
disp(sum(c))
efficiency(numplayers) = sum(c)/(-fx1)
end
plot(2:10,efficiency(2:10).*(2:10)), grid
ylabel('Symmetric NE efficiency');
xlabel('Number of Suppliers in Microgrid')
جواب :
No active inequalities.
makhraj=
4.0937

Soorat=
0.3577
efficiency =

Columns 1 through 7

0 0.0925 0.0767 0.0762 0.0799 0.0824 0.0842

Columns 8 through 10

0.0855 0.0866 0.0874
نمودار :
http://www.uplooder.net/img/image/67/0ba758a13c973c8555e6d8fac35315ef/fig2.png

rahnema1
چهارشنبه 26 شهریور 1393, 11:23 صبح
اصلا یه کاری کنیم
در ابتدا نمی خواهیم صورت را به دست بیاریم
تنها کاری که شما می کنید اینه که در فایل interfac بدون حلقه for فقط مقدار numplayers را از 2 تا 10 تغییر بده و برای هر بار که اجرا کردی یکی از اعدادی که در قسمت
with payoffs [ [0.035774
را کپی می کنی در یک جایی مثل نوت پد میذاری
بنابراین نوت پد میشه شامل 9 تا خط که خط اولش یک عدد مثل 0.035774 هست
لطفا این عدد ها را اینجا بذار

این مرحله اول که انجام شد و صورت را به دست آوردیم می ریم سراغ مرحله دوم یعنی به دست آوردن مخرج

clc; close all; clear;

makhraj = zeros(1,10)
for numplayers=2:10
lb=zeros(1,numplayers);
ub=ones(1,numplayers);
[x1, fx1]=fmincon(@fffu,ones(1,numplayers)*.5,[],[],[],[],lb,ub);
disp('makhraj=')
disp(-fx1)
makhraj(numplayers) =(-fx1)
end

coronaa
چهارشنبه 26 شهریور 1393, 11:31 صبح
اگه بخوام اون payoff ها رو بدست بیارم کافیه interfac رو توی command window بنویسم.
ولی نمیدونم numplayer رو تو کجا گذاشتی که تغییر بدم. توی کدوم اسکریپت هست؟

rahnema1
چهارشنبه 26 شهریور 1393, 11:34 صبح
خط 30 از فایل interfac که به این صورته
numplayers=10
را تغییر بده

coronaa
چهارشنبه 26 شهریور 1393, 11:42 صبح
payoff های دو تا 10 :
[1.934] , [1.554] , [1.174] , [0.794] , [0.414] , [0.077012] , [0.057655] , [0.044775] , [0.035774]

rahnema1
چهارشنبه 26 شهریور 1393, 11:54 صبح
حالا اینها را که به دست آوردی بذار داخل یه بردار به نام a و ضرب در 2:10 کن
a.*(2:10)
تا مخرج به دست بیاد
صورت را هم که برنامه اش را گذاشتم

coronaa
چهارشنبه 26 شهریور 1393, 12:08 عصر
اینطوری شد :
clc; close all; clear;
a=[1.934 ,1.554 ,1.174 ,0.794 , 0.414 ,0.077012 ,0.057655 ,0.044775 ,0.035774];
soorat=a.*(2:10)
makhraj = zeros(1,10)
for numplayers=2:10
lb=zeros(1,numplayers);
ub=ones(1,numplayers);
[x1, fx1]=fmincon(@fffu,ones(1,numplayers)*.5,[],[],[],[],lb,ub);
disp('makhraj=')
disp(-fx1)
makhraj(numplayers) =(-fx1)
efficiency(numplayers) = soorat(numplayers-1)/(-fx1)
end

plot(2:10,efficiency(2:10).*(2:10)), grid
ylabel('Symmetric NE Efficiency');
xlabel('Number of Suppliers in Microgrid')
نمودار :
http://www.uplooder.net/img/image/83/ecd5b240c516feabd930e6fe96c2f7ae/fig3.png

این الآن درسته؟

coronaa
چهارشنبه 26 شهریور 1393, 12:22 عصر
تو این برنامه که سایز صورت و مخرج یکی نیست!

مهندس وقتی ما payoff تغذیه کننده های مختلف رو بدست آوردیم دیگه نیازی نیست که ما بیایم مثلن برای تغذیه کننده های با تعداد 5 تا رو ضرب در 5 بکنیم.(این خودش payoff پنج تا تغذیه کننده هست!) منظورم این خطه :
soorat=a.*(2:10)
من الآن فقط خود بردار payoff رو بعنوان صورت در نظر گرفتم نمودارش اینطوری شد :
http://www.uplooder.net/img/image/84/f2b2ed03254b7247b2d4c471652c6eeb/fig5.png

معقول تره به نظرم!
اگه شکل (2) مقاله رو نگاه کنید دقیقن مثل نمودارهای upperbound و simulated شد.

rahnema1
چهارشنبه 26 شهریور 1393, 13:30 عصر
علتش اینه که توی برنامه ای که گذاشتی دو بار ضربدر 2:10 کردی
a.*2:10
و
plot(2:10,efficiency(2:10).*(2:10)), grid

که لازمه موقع plot دیگه در 2:10 ضرب نشه

coronaa
چهارشنبه 26 شهریور 1393, 13:35 عصر
پس برنامه کلی به این صورت شد با نمودار دومی که گذاشتم؟

clc; close all; clear;

payoff=[1.934 ,1.554 ,1.174 ,0.794 , 0.414 ,0.077012 ,0.057655 ,0.044775 ,0.035774];
soorat=payoff.*(2:10)
% soorat=payoff;
makhraj = zeros(1,10) ;
efficiency = zeros(1,10);
for numplayers=2:10
lb=zeros(1,numplayers);
ub=ones(1,numplayers);
[x1, fx1]=fmincon(@fffu,ones(1,numplayers)*.5,[],[],[],[],lb,ub);
disp('makhraj=')
disp(-fx1)
makhraj(numplayers) =(-fx1);
efficiency(numplayers) = soorat(numplayers-1)/makhraj(numplayers);
end
خب ما تا حالا از جدول 3 و 4 استفاده نکردیم. اینطوری باشه که این واسه همه ی مسائل که یکی در میاد!
سایز صورت و مخرج یکینیست. چیکار کنم؟

rahnema1
چهارشنبه 26 شهریور 1393, 13:40 عصر
تا اینجا که پیش رفتیم مربوط به رقابت بین تولید کننده ها بود از این به بعد که در جدول 3و 4 اومده مربوط به همکاری بین اونهاست که فکر کنم از shapley استفاده کرده ( فکر کنم مقاله را به صورت کامل مطالعه نکردی)

coronaa
چهارشنبه 26 شهریور 1393, 13:47 عصر
مطالعه کردم ولی فکر میکردم که صورت کسر باید با نقطه تعادل نش بدست بیاد و مخرج کسر با گیم تئوری مثل shapley !
الآن باید چیکار کنیم؟
این قسمت رو که دیگه توی همون مقاله اولی بدست آوردیم دیگه. داریم کدش رو. با همون mat-tug

rahnema1
چهارشنبه 26 شهریور 1393, 13:58 عصر
مطالعه کردم ولی فکر میکردم که صورت کسر باید با نقطه تعادل نش بدست بیاد و مخرج کسر با گیم تئوری مثل shapley !
الآن باید چیکار کنیم؟
این قسمت رو که دیگه توی همون مقاله اولی بدست آوردیم دیگه. داریم کدش رو. با همون mat-tug

شاید با اون قبلی متفاوت باشه باید دقیقا مقاله را بخونیم چون خوم هم این قسمتش را دقیقا مطالعه نکردم

coronaa
چهارشنبه 26 شهریور 1393, 16:21 عصر
ما توی این برنامه تونستیم تازه مطابق شکل(4)، نمودار simulated efficiency رو رسم کنیم. نمودار upperbound و lowerbound هم از همین برنامه باید بدست بیاد؟
قبلن توی اولین کد یه همچین نموداری بدست آوردی که شبیه lowerbound هست. همینه یا اون کد اشتباس؟
http://www.uplooder.net/img/image/93/4750c21ed724fe7411882bd7c13768b7/fig5.png

coronaa
چهارشنبه 26 شهریور 1393, 16:48 عصر
p=1:100;
a = newfis ('sefroyek', 'sugeno', ...
'algebraic_product', 'algebraic_sum', ...
'min', 'max', 'wtaver');
a = addvar (a, 'input', 'P', [min(p) max(p)]);
a = addmf (a, 'input', 1, 'Low', 'trapmf', [min(p)-1 min(p) range(p)*0.45+min(p) range(p)*0.55+min(p)]);
a = addmf (a, 'input', 1, 'High', 'trapmf', [range(p)*0.45+min(p) range(p)*0.55+min(p) max(p) max(p)+1]);
a = addvar (a, 'output', 'sefroyek', [0 1]);
a = addmf (a, 'output', 1, 'Low', 'constant', 0);
a = addmf (a, 'output', 1, 'High', 'constant',1);
a = addrule (a, [1 1 1 1;2 2 1 1]);
evalfis([48],a);

مهندس این کدی هست که قبلن واسه تقسیم بندی نمرات انجام داده بودی.
قسمت rules اگه بخوام اینو روی کاغذ بصورت if و then بنویسم چطوریه؟
به این صورته ؟
if (input is Low) then (out1 is Low)
if (input is High) then (out2 is High)

rahnema1
چهارشنبه 26 شهریور 1393, 21:09 عصر
ما توی این برنامه تونستیم تازه مطابق شکل(4)، نمودار simulated efficiency رو رسم کنیم. نمودار upperbound و lowerbound هم از همین برنامه باید بدست بیاد؟
قبلن توی اولین کد یه همچین نموداری بدست آوردی که شبیه lowerbound هست. همینه یا اون کد اشتباس؟
http://www.uplooder.net/img/image/93/4750c21ed724fe7411882bd7c13768b7/fig5.png

این اشتباه بود

rahnema1
چهارشنبه 26 شهریور 1393, 21:10 عصر
مهندس این کدی هست که قبلن واسه تقسیم بندی نمرات انجام داده بودی.
قسمت rules اگه بخوام اینو روی کاغذ بصورت if و then بنویسم چطوریه؟
به این صورته ؟
if (input is Low) then (out1 is Low)
if (input is High) then (out2 is High)

اینو یادم رفته فقط میدونم متلب میتونه همین قاعده را با یک دستور ( که یادم نیست) به صورت if then بنویسه

coronaa
پنج شنبه 27 شهریور 1393, 08:36 صبح
اینو یادم رفته فقط میدونم متلب میتونه همین قاعده را با یک دستور ( که یادم نیست) به صورت if then بنویسه
حالا بیا یه چیز من بهت یاد بدم :))
این دوتا دستور باید زیر برنامه نوشته بشه. بعد بصورت GUI اینو بالا میاریم و داخلش قوانین نوشته شده.
writefis(a,'myfile.fis');
fuzzy('myfile.fis');

coronaa
پنج شنبه 27 شهریور 1393, 15:12 عصر
مهندس نمودار upperbound و lowerbound از روی همین برنامه بدست نمیآد؟
این کد زیر رو به برنامه اضافه کردم. نمودار relative error برای upperbound بدست اومد. شکل(4)
error(numplayers) = abs(ub(numplayers-1)-efficiency)/efficiency;

http://www.uplooder.net/img/image/16/7c3a6b494c85ccc4744ac0d704f0e73a/upperbound.png

ولی lowerbound بدست نمیآد. فقط یه خط راست میشه. شاید ورودی lowerbound که همه رو صفر در نظر گرفتیم اشتباه باشه!
http://www.uplooder.net/img/image/60/4dd6bf4d838dd31f742c393b710698cd/lowerbound_relative.png
شما نظرتون چیه؟

rahnema1
پنج شنبه 27 شهریور 1393, 15:56 عصر
upperbound و lowerbound در ص 425 و در Corollary 2 توضیح داده شده
ببینم چی کار می کنی

coronaa
پنج شنبه 27 شهریور 1393, 16:18 عصر
من الآن روی مقدار lowerbound مشکل دارم. فکر میکنم صفر نباید باشه!
نمودار error of upperbound درسته؟ تائید کردی؟
یه مشکل دیگه ای هم که دارم. توی برنامه اصلی سایز صورت و مخرج یکی نیست!

rahnema1
پنج شنبه 27 شهریور 1393, 16:22 عصر
من الآن روی مقدار lowerbound مشکل دارم. فکر میکنم صفر نباید باشه!
نمودار error of upperbound درسته؟ تائید کردی؟
یه مشکل دیگه ای هم که دارم. توی برنامه اصلی سایز صورت و مخرج یکی نیست!

اینها اشتباهه ظاهرا پست من را نخوندی . باید از fmincon یا fminbnd استفاده کنی
ببینیم چی کار می کنی

coronaa
پنج شنبه 27 شهریور 1393, 16:34 عصر
من از این برنامه استفاده کردم. شما اون برنامه اولی رو گفتی اشتباهه!
clc; close all; clear;

payoff=[1.934 ,1.554 ,1.174 ,0.794 , 0.414 ,0.077012 ,0.057655 ,0.044775 ,0.035774];
soorat=payoff.*(2:10)
makhraj = zeros(1,10) ;
efficiency = zeros(1,10);
error =zeros(1,10);
for numplayers=2:10
lb=zeros(1,numplayers);
ub=ones(1,numplayers);
[x1, fx1]=fmincon(@fffu,ones(1,numplayers)*.5,[],[],[],[],lb,ub);
disp('makhraj=')
disp(-fx1)
makhraj(numplayers) =(-fx1);
efficiency(numplayers) = soorat(numplayers-1)/makhraj(numplayers);
error(numplayers) = abs(ub(numplayers-1)-efficiency)/efficiency;
end
plot(2:10,efficiency(2:10)), grid
ylabel('Symmetric NE Efficiency');
xlabel('Number of Suppliers in Microgrid')
axis([2 10 0 1.1])
% ----------------------------------------------
figure
plot(2:10,error(2:10)), grid
ylabel('relative error of the upperbound');
xlabel('Number of Suppliers in Microgrid')
% legend('cos_x','sin_x')
axis([2 10 0 1.1])

rahnema1
پنج شنبه 27 شهریور 1393, 16:45 عصر
این lb,ub برابر با upperbound و lowerbound نیست که
خواهشا و لطفا به همون صفحه مراجعه کن

coronaa
پنج شنبه 27 شهریور 1393, 16:47 عصر
ای بابا ینی این مقادیر payoff و چیزهای دیگه رو بدست آوردیم همه اشتباه بود؟
پس نمودارا چرا درست در اومد؟؟؟

rahnema1
پنج شنبه 27 شهریور 1393, 16:59 عصر
ای بابا ینی این مقادیر payoff و چیزهای دیگه رو بدست آوردیم همه اشتباه بود؟
پس نمودارا چرا درست در اومد؟؟؟

چرا اون صفحه را مطالعه نمی کنی؟؟
اصلا به حرفهام گوش نمی دی
اون چیزی که قبلا به دست آوردیم درست بود و lb و ub که 0 و 1 بود و ثابت بودند و نیازی به محاسبه اونها نیست
اما اینجا حدبالا و پایین برای effciency را می خواهیم به دست بیاریم نه برای supply

coronaa
پنج شنبه 27 شهریور 1393, 17:06 عصر
چشم! فقط منو نزن :))
من یه لحظه داشتم ناامید می شدم. فکر کردم همه اشتباهه.
باشه من میخونمش. ببینم میتونم کاری انجام بدم یا نه.
ممنونم.

coronaa
پنج شنبه 27 شهریور 1393, 20:59 عصر
سلام دوست عزیز :لبخندساده:
من یه فانکشن ساختم به اسم Lmax و یکی هم به اسم Jmax ، طبق روابط 16 و 17 . بصورت زیر :
function ret = Lmax(L)

global k;global D;global alpha;

ret=-((alpha-k)./m).*L.^2+k.*D.*L;
end
function ret = Jmax(J)

global k;global D;global alpha;

ret=-(((alpha./m-k).*J.^2)+K.*D.*J);
end
بعد اومدم توی برنامه اصلی حد بالا و پایین راندمان رو بصورت شرطی قرار دادم.(بالای روابط 16)
حالا دیگه نمیدونم مقادیر fminbnd و fmincon رو چطوری مشخص کنم.
لاندا از کجا باید بدست بیاد؟
clc; close all; clear;
global q;global k;global D;global alpha ;global lambda;
alpha=.3; beta=1.2; k=.38; D=6.3; m=10;
L=sum(q);
J=sum(q);
for numsupplier=2:10
if lambda > k*D/((m+1)*k-2*alpha)
lobnd=((m*k^2*D^2*(k-alpha))/(((m+1)*k-2*alpha))^2)/(((alpha-k).*Lmax^2/m)+k*D*Lmax);
upbnd=((m*k^2*D^2*(k-alpha))/(((m+1)*k-2*alpha))^2)/((alpha/m-k)*Jmax^2+k*m*D*Jmax);
end
if lambda < k*D/((m+1)*k-2*alpha)
lobnd= (m^2.*(alpha.*lambda.^2+k.*(D-m*lambda).*lambda))/(((alpha-k).*Lmax.^2)+k*m*d*Lmax);
upbnd= (m.*(alpha.*lambda.^2+k.*(D-m*lambda).*lambda))/(((alpha-k*m).*Jmax.^2)+k*m*d*Jmax);
end
[x1, fx1]=fmincon(@fff,Q,[],[],[],[],lobnd,upbnd);
for tekrar=1:400
for supplier=1:numsupplier
[x2, fx2]=fminbnd(@fff,0,1);
Q(supplier)=x2;
end
end
efficiency(numsupplier)=fx2/fx1;
end
plot(2:10,efficiency(2:10).*(2:10)), grid
ylabel('Symmetric NE efficiency');
xlabel('Number of Suppliers in Microgrid')
در ضمن، ظاهرن با روابط 40 و 41 و 42 میشه بازده رو بدست آورد. هم رابطه ی V_NE مشخصه و هم رابطه ی V_opt
اینجا دیگه انگار payoff هم نمیخواد!

rahnema1
پنج شنبه 27 شهریور 1393, 22:35 عصر
چه دلیلی داشته که از این حلقه ها استفاده کردی؟

for tekrar=1:400
for supplier=1:numsupplier

coronaa
پنج شنبه 27 شهریور 1393, 22:51 عصر
چه دلیلی داشته که از این حلقه ها استفاده کردی؟

for tekrar=1:400
for supplier=1:numsupplier
آخه گفته بودی از fminbnd و fmincon باید استفاده کنی فکر کردم مثل اون برنامه اولی باید نوشته بشه!
الآن این قسمت برنامه رو حذف کنم؟
for tekrar=1:400
for supplier=1:numsupplier
[x2, fx2]=fminbnd(@fff,0,1);
Q(supplier)=x2;
end
end
efficiency(numsupplier)=fx2/fx1;

rahnema1
جمعه 28 شهریور 1393, 06:10 صبح
بخشهایی را خوب پیش رفتی
اولا توضیح بده اون صفحه چیکار می خواهد بکنه و مراحلش را بگو
ثانیا در هلپ متلب در مورد دو تابع fmincon و fminbnd مطالعه کن و بگو هر کدوم برای چه کاری مناسبه و اینکه میشه یکی را به جای دیگری استفاده کرد؟

coronaa
جمعه 28 شهریور 1393, 08:55 صبح
ما میخوایم حد بالا و پایین راندمان رو بدست بیاریم. یعنی مشخص کنیم که راندمانی که بدست میاد از این مقادیر نباید تجاوز کنه.
توی این کرانهای بالا و پایین، دو متغیر Lmax و Jmax هم دارم که باید مشخص بشن. یعنی خود این دوتا هم باید اول ماکسیمم بشن تا توی کرانها قرار بگیرن.
L و J مجموع مقادیر انرژی تغذیه کننده ها هستن که ما اول باید این دوتا رو با روابط 16 و 17 بیشینه کنیم و بعد توی کرانهای بالا و پایین قرار بدیم.
ضمن اینکه خود این راندمای که میخواد بدست بیاد بصورت شرطی باید باشه. یعنی اگه لاندا از اون مقدار بزرگتر بود ، کران بالا و پایین راندمان به این صورته و اگر لاندا کوچکتر از اون مقدار بود ، راندمان باید توی این بازه قرار بگیره. یعنی حد بالا و پایین یا همون upperbound و lowerbound آن به این صورت میشه.
ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ــــــــــــــــــــــــ
در مورد توابع fmincon و fminbnd ، خدمت شما عرض کنم که هر دو برای مسائل غیر خطی مقید شده استفاده میشن. ولی fminbnd برای یک متغیر استفاده شده و fmincon برای توابع چند متغیره استفاده میشه. پس نمیشه جای همدیگه هم استفاده کرد!
به نظرم توی این مسئله هم باید از fmincon استفاده کنیم.

rahnema1
جمعه 28 شهریور 1393, 09:21 صبح
به نظرم توی این مسئله هم باید از fmincon استفاده کنیم.

شاید بشه برای مسائل یک متغیره هم از fmincon استفاده کرد فقط به جای چند متغیر از یک متغیر استفاده می کنیم ( من که متلب ندارم شما امتحان کن ببین میشه یا نه)

سوال: در اینجا یک تابع داریم که در اون تابع باید همزمان دو تا متغیر max بشن
یا اینکه دو تا تابع داریم که برای هرکدوم باید یک متغیر max بشه؟

ببینم چی کار می کنی نمودار را بکش

coronaa
جمعه 28 شهریور 1393, 09:37 صبح
طبق روابط 16 و 17 دو تا تابع داریم که باید ماکزیمم بشن و هر تابع هم یک متغیر جدا داره. L و J دوتا متغیر هستن که L برای کران پایین و J برای کران بالا استفاده میشه.
مهندس من سوادم در همین حده! خب همون برنامه ای که بالا گذاشتم در همین حد بلدم. ران که میکنم یه سری متغیرها مثل لاندا رو نمیشناسه.
باید چیکار کنم؟

rahnema1
جمعه 28 شهریور 1393, 10:27 صبح
یه همچین چیزی
بعضی ها را کد خودت کپی کردم ( ضمانتش با خودت)

alpha=.3; beta=1.2; k=.38; D=6.3;lambda=1;
for m=2:10
parameterfunL=@(L,apha,k,m,D) (alpha-k)/m*(L^2)+k*D*L;
parameterfunJ=@(j,apha,k,m,D) (alpha/m-k)*(j^2)+k*D*j;

fl=@(L) parameterfunL(L,apha,k,m,D);
fj=@(j) parameterfunJ(j,apha,k,m,D);

Lmax=fminbnd(@fl,0,m*lambda);
Jmax=fminbnd(@fj,0,m*lambda);

if lambda > k*D/((m+1)*k-2*alpha)
lobnd=((m*k^2*D^2*(k-alpha))/(((m+1)*k-2*alpha))^2)/(((alpha-k).*Lmax^2/m)+k*D*Lmax);
upbnd=((m*k^2*D^2*(k-alpha))/(((m+1)*k-2*alpha))^2)/((alpha/m-k)*Jmax^2+k*m*D*Jmax);
end
if lambda < k*D/((m+1)*k-2*alpha)
lobnd= (m^2.*(alpha.*lambda.^2+k.*(D-m*lambda).*lambda))/(((alpha-k).*Lmax.^2)+k*m*d*Lmax);
upbnd= (m.*(alpha.*lambda.^2+k.*(D-m*lambda).*lambda))/(((alpha-k*m).*Jmax.^2)+k*m*d*Jmax);
end
end

coronaa
جمعه 28 شهریور 1393, 10:42 صبح
برای خط 9 و 10 اشاره گر رو برداشتم. خطا میداد :
Lmax=fminbnd(fl,0,m*lambda);
Jmax=fminbnd(fj,0,m*lambda);
خب حالا این upbnd و lobnd رو بدست میاده. یک عدد هست. همین درسته یا باید یک بردار بده؟

coronaa
جمعه 28 شهریور 1393, 10:49 صبح
بالایی اشتباه شدم. به ازای m های مختلف up,lo بدست میاد ولی نمیدونم چطوری باید توی یه بردار بذارم!

coronaa
جمعه 28 شهریور 1393, 10:56 صبح
حل شد.
الآن به دوتا بردار تبدیل شد ولی عدداش یه طوریه!
upbnd
1.0e+004 *

Columns 1 through 7

0 1.6698 1.5303 0.7856 0.7421 0.2988 0.0941

Columns 8 through 10

0.0000 0.0000 0.0000
lobnd
1.0e+004 *

Columns 1 through 7

0 3.3397 4.5908 3.1424 3.7103 1.7930 0.6588

Columns 8 through 10

0.4396 0.3148 0.2507

coronaa
جمعه 28 شهریور 1393, 11:39 صبح
مهندس دوتا برنامه رو با هم ترکیب کردم و بجای lp و ub از برنامه جدید استفاده کردم تا ببینم نمودارش چطوری میشه.
این کارم اشتباهه؟
فانکشن fffu
function ret = fffu(q)
alpha=.3; beta=1.2; k=.38; D=6.3;
ret=-sum(alpha.*q.^2+k.*(D-sum(q)).*q);
end

برنامه اصلی :
clc; close all; clear;
alpha=.3; beta=1.2; k=.38; D=6.3;lambda=1;

for m=2:10
parameterfunL=@(L,alpha,k,m,D) (alpha-k)/m*(L^2)+k*D*L;
parameterfunJ=@(j,alpha,k,m,D) (alpha/m-k)*(j^2)+k*D*j;

fl=@(L) parameterfunL(L,alpha,k,m,D);
fj=@(j) parameterfunJ(j,alpha,k,m,D);

Lmax=fminbnd(fl,0,m*lambda);
Jmax=fminbnd(fj,0,m*lambda);

if lambda > k*D/((m+1)*k-2*alpha)
lobnd(m)=((m*(k^2)*D^2*(k-alpha))/(((m+1)*k-2*alpha))^2)/(((alpha-k).*Lmax^2/m)+k*D*Lmax);
upbnd(m)=((m*(k^2)*D^2*(k-alpha))/(((m+1)*k-2*alpha))^2)/((alpha/m-k)*Jmax^2+k*m*D*Jmax);
end
if lambda < k*D/((m+1)*k-2*alpha)
lobnd(m)= (m^2.*(alpha.*lambda.^2+k.*(D-m*lambda).*lambda))/(((alpha-k).*Lmax.^2)+k*m*D*Lmax);
upbnd(m)= (m.*(alpha.*lambda.^2+k.*(D-m*lambda).*lambda))/(((alpha-k*m).*Jmax.^2)+k*m*D*Jmax);
end

end
fprintf('Lowerbound\n ');
disp(lobnd)
fprintf('\n---------------------------------------\n');
fprintf('Upperbound \n');
disp(upbnd)
% ---------------------------------------------------
% ---------------------------------------------------
payoff=[1.934 ,1.554 ,1.174 ,0.794 , 0.414 ,0.077012 ,0.057655 ,0.044775,0.035774];
soorat=payoff.*(2:10);
makhraj = zeros(1,10) ;
efficiency = zeros(1,10);
error =zeros(1,10);
for numplayers=2:10
lb=lobnd(1:numplayers);
ub=upbnd(1:numplayers);
[x1, fx1]=fmincon(@fffu,ones(1,numplayers)*.5,[],[],[],[],lb,ub);
disp('makhraj=')
disp(-fx1)
makhraj(numplayers) =(-fx1);
efficiency(numplayers) = soorat(numplayers-1)/makhraj(numplayers);
error(numplayers) = abs(ub(numplayers-1)-efficiency)/efficiency;
end
plot(2:10,efficiency(2:10)), grid
ylabel('Symmetric NE Efficiency');
xlabel('Number of Suppliers in Microgrid')
axis([2 10 0 1.1])
% ----------------------------------------------
figure
plot(2:10,error(2:10)), grid
ylabel('relative error of the upperbound');
xlabel('Number of Suppliers in Microgrid')
% legend('cos_x','sin_x')
axis([2 10 0 1.1])
% ----------------------------------------------
یه پیغام خطا هم میده :


Exiting due to infeasibility: 1 lower bound exceeds the corresponding upper bound.
makhraj=
??? In an assignment A(I) = B, the number of elements in B and
I must be the same.

Error in ==> plot5 at 42
makhraj(numplayers) =(-fx1);

coronaa
جمعه 28 شهریور 1393, 11:56 صبح
ظاهرن توی مرحله یک ، fx1 پوچ در میاد!

چیکار باید بکنم؟

coronaa
جمعه 28 شهریور 1393, 19:59 عصر
مهندس من وقتی برای خط پایینی مقدار lb و ub رو بصورت زیر انتخاب میکنم، واسه اولین مرحله( یعنی m برابر 2)، fx1 رو پوج میده. این کارم اشتباهه؟
lb=lobnd(1:numplayers);
ub=upbnd(1:numplayers);
[x1, fx1]=fmincon(@fffu,ones(1,numplayers)*.5,[],[],[],[],lb,ub);

میخواستم طبق شکل (4)، نمودار حد بالا و پایین رو بدست بیارم.
خواهش میکنم یه کمکی بکن.

rahnema1
جمعه 28 شهریور 1393, 21:12 عصر
ین یکی را امتحان کن

alpha=.3; beta=1.2; k=.38; D=6.3;lambda=1;
ll=zeros(1,10);
uu=zeros(1,10);

for m=2:10
parameterfunL=@(L,alpha,k,m,D) -(alpha-k)/m*(L^2)+k*D*L;
parameterfunJ=@(j,alpha,k,m,D) -(alpha/m-k)*(j^2)+k*D*j;

fl=@(L) parameterfunL(L,alpha,k,m,D);
fj=@(j) parameterfunJ(j,alpha,k,m,D);

Lmax = fmincon(@fl,m*lambda/2,[],[],[],[],0,m*lambda);
Jmax = fmincon(@fj,m*lambda/2,[],[],[],[],0,m*lambda);

if lambda > k*D/((m+1)*k-2*alpha)
lobnd=((m*k^2*D^2*(k-alpha))/(((m+1)*k-2*alpha))^2)/(((alpha-k).*Lmax^2/m)+k*D*Lmax);
upbnd=((m*k^2*D^2*(k-alpha))/(((m+1)*k-2*alpha))^2)/((alpha/m-k)*Jmax^2+k*m*D*Jmax);
end
if lambda < k*D/((m+1)*k-2*alpha)
lobnd= (m^2.*(alpha.*lambda.^2+k.*(D-m*lambda).*lambda))/(((alpha-k).*Lmax.^2)+k*m*D*Lmax);
upbnd= (m.*(alpha.*lambda.^2+k.*(D-m*lambda).*lambda))/(((alpha-k*m).*Jmax.^2)+k*m*D*Jmax);
end
ll(m)=lobnd;
uu(m)=upbnd;
end

coronaa
جمعه 28 شهریور 1393, 21:23 عصر
من توی خط 12 و 13 اشاره گرها رو بر میدارم. وگرنه خطا میده:
جواب :
ll =

0 Inf Inf Inf Inf Inf Inf Inf Inf Inf

>> uu

uu =

1.0e+015 *

Columns 1 through 7

0 Inf Inf 2.2085 Inf Inf Inf

Columns 8 through 10

0.0542 Inf Inf

rahnema1
جمعه 28 شهریور 1393, 21:42 عصر
دو تا فایل برای این تابعها درست کن

function ret=fj(j)
global m;
alpha=.3; beta=1.2; k=.38; D=6.3;lambda=1;
ret= -(alpha/m-k)*(j^2)+k*D*j;
end

function ret=fl(L)
global m;
alpha=.3; beta=1.2; k=.38; D=6.3;lambda=1;
ret= -(alpha-k)/m*(L^2)+k*D*L;
end


بعدش هم این یکی را اجرا کنچ

global m;
alpha=.3; beta=1.2; k=.38; D=6.3;lambda=1;
ll=zeros(1,10);
uu=zeros(1,10);

for m=2:10


Lmax = fmincon(@fl,m*lambda/2,[],[],[],[],0,m*lambda);
Jmax = fmincon(@fj,m*lambda/2,[],[],[],[],0,m*lambda);

if lambda > k*D/((m+1)*k-2*alpha)
lobnd=((m*k^2*D^2*(k-alpha))/(((m+1)*k-2*alpha))^2)/(((alpha-k).*Lmax^2/m)+k*D*Lmax);
upbnd=((m*k^2*D^2*(k-alpha))/(((m+1)*k-2*alpha))^2)/((alpha/m-k)*Jmax^2+k*m*D*Jmax);
end
if lambda < k*D/((m+1)*k-2*alpha)
lobnd= (m^2.*(alpha.*lambda.^2+k.*(D-m*lambda).*lambda))/(((alpha-k).*Lmax.^2)+k*m*D*Lmax);
upbnd= (m.*(alpha.*lambda.^2+k.*(D-m*lambda).*lambda))/(((alpha-k*m).*Jmax.^2)+k*m*D*Jmax);
end
ll(m)=lobnd;
uu(m)=upbnd;
end

coronaa
جمعه 28 شهریور 1393, 21:54 عصر
جواب :
http://uplood.ir/53lR

rahnema1
شنبه 29 شهریور 1393, 00:01 صبح
علامت منفی پشت تابع ها حواسم نبود که کل تابع را در پرانتز بذارم
این جور درسته:

ret= -((alpha/m-k)*(j^2)+k*D*j);
ret= -((alpha-k)/m*(L^2)+k*D*L);

coronaa
شنبه 29 شهریور 1393, 09:29 صبح
مرسی. فعلن ll و uu جواهای قابل قبولی هستن.
ll

ll =

Columns 1 through 7

0 0.8358 0.6716 0.5073 0.3431 0.1789 0.0333

Columns 8 through 10

0.0249 0.0193 0.0155

>> uu

uu =

Columns 1 through 7

0 0.5000 0.3333 0.2499 0.1773 0.0954 0.0098

Columns 8 through 10

0.0074 0.0057 0.0046
حالا وقتی اینا رو بعنوان lb و ub انتخاب میکنم باز مرحله اول fx1 پوچ میشه.
clc; close all; clear;
alpha=.3; beta=1.2; k=.38; D=6.3;lambda=1;
ll=zeros(1,10);
uu=zeros(1,10);

for m=2:10
parameterfunL=@(L,alpha,k,m,D) -((alpha-k)/m*(L^2)+k*D*L);
parameterfunJ=@(j,alpha,k,m,D) -((alpha/m-k)*(j^2)+k*D*j);

fl=@(L) parameterfunL(L,alpha,k,m,D);
fj=@(j) parameterfunJ(j,alpha,k,m,D);

Lmax = fmincon(fl,m*lambda/2,[],[],[],[],0,m*lambda);
Jmax = fmincon(fj,m*lambda/2,[],[],[],[],0,m*lambda);

if lambda > k*D/((m+1)*k-2*alpha)
lobnd=((m*k^2*D^2*(k-alpha))/(((m+1)*k-2*alpha))^2)/(((alpha-k).*Lmax^2/m)+k*D*Lmax);
upbnd=((m*k^2*D^2*(k-alpha))/(((m+1)*k-2*alpha))^2)/((alpha/m-k)*Jmax^2+k*m*D*Jmax);
end
if lambda < k*D/((m+1)*k-2*alpha)
lobnd= (m^2.*(alpha.*lambda.^2+k.*(D-m*lambda).*lambda))/(((alpha-k).*Lmax.^2)+k*m*D*Lmax);
upbnd= (m.*(alpha.*lambda.^2+k.*(D-m*lambda).*lambda))/(((alpha-k*m).*Jmax.^2)+k*m*D*Jmax);
end
ll(m)=lobnd;
uu(m)=upbnd;
end
fprintf('Lowerbound\n ');
disp(lobnd)
fprintf('\n---------------------------------------\n');
fprintf('Upperbound \n');
disp(upbnd)
% ---------------------------------------------------
% ---------------------------------------------------
payoff=[1.934 ,1.554 ,1.174 ,0.794 , 0.414 ,0.077012 ,0.057655 ,0.044775,0.035774];
soorat=payoff.*(2:10);
makhraj = zeros(1,10) ;
efficiency = zeros(1,10);
error =zeros(1,10);
for numplayers=2:10
lb=ll(1:numplayers);
ub=uu(1:numplayers);
[x1, fx1]=fmincon(@fffu,ones(1,numplayers)*.5,[],[],[],[],lb,ub);
disp('makhraj=')
disp(-fx1)
makhraj(numplayers) =(-fx1);
efficiency(numplayers) = soorat(numplayers-1)/makhraj(numplayers);
error(numplayers) = abs(ub(numplayers-1)-efficiency)/efficiency;
end
plot(2:10,efficiency(2:10)), grid
ylabel('Symmetric NE Efficiency');
xlabel('Number of Suppliers in Microgrid')
axis([2 10 0 1.1])
% ----------------------------------------------
figure
plot(2:10,error(2:10)), grid
ylabel('relative error of the upperbound');
xlabel('Number of Suppliers in Microgrid')
% legend('cos_x','sin_x')
axis([2 10 0 1.1])
% ----------------------------------------------

جواب :
http://uplood.ir/bfF8
خط 45 و 46 رو باید از 1 شروع کنم یا جور دیگه باید نوشته بشه؟

rahnema1
شنبه 29 شهریور 1393, 09:34 صبح
شما یه دونه M را جا انداخته بودی
داخل مقاله هم یک توان 2 جا افتاده بود

alpha=.3; beta=1.2; k=.38; D=6.3;lambda=1;
ll=zeros(1,10);
uu=zeros(1,10);
for m=2:10
parameterfunL=@(L,alpha,k,m,D) -((alpha-k)/m*(L^2)+k*D*L);
parameterfunJ=@(j,alpha,k,m,D) -((alpha/m-k)*(j^2)+k*D*j);

fl=@(L) parameterfunL(L,alpha,k,m,D);
fj=@(j) parameterfunJ(j,alpha,k,m,D);

Lmax =fminbnd(fl,0,m*lambda);
Jmax =fminbnd(fj,0,m*lambda);
if lambda > k*D/((m+1)*k-2*alpha)
lobnd=((m*k^2*D^2*(k-alpha))/(((m+1)*k-2*alpha))^2)/(((alpha-k).*Lmax^2/m)+k*D*Lmax);
upbnd=((m*k^2*D^2*(k-alpha))/(((m+1)*k-2*alpha))^2)/((alpha/m-k)*Jmax^2+k*D*Jmax);
end
if lambda < k*D/((m+1)*k-2*alpha)
lobnd= (m^2.*(alpha.*lambda.^2+k.*(D-m*lambda).*lambda))/(((alpha-k).*Lmax.^2)+k*m*D*Lmax);
upbnd= (m.^2.*(alpha.*lambda.^2+k.*(D-m*lambda).*lambda))/(((alpha-k*m).*Jmax.^2)+k*m*D*Jmax);
end
ll(m)=lobnd;
uu(m)=upbnd;
end
plot(2:10,([ll' uu'](2:end,:))),grid

coronaa
شنبه 29 شهریور 1393, 09:49 صبح
حل شد.......................................

coronaa
شنبه 29 شهریور 1393, 09:56 صبح
من برنامه بالایی رو اجرا کردم که جوابهای بالایی رو داد.
برای شما رو تازه میخوام اجرا کنم ولی این خط خطا میده :
plot(2:10,([ll' uu'](2:end,:))),grid

خطا :
??? Error: File: plot7.m Line: 27 Column: 21
Unbalanced or unexpected parenthesis or bracket.

coronaa
شنبه 29 شهریور 1393, 10:09 صبح
آقا فعلن حل شد.
صبر کنید تا کدها رو مرتب کنم. نمودارا درست در اومد. :لبخندساده::تشویق::تشویق::تش یق::تشویق:

coronaa
شنبه 29 شهریور 1393, 11:10 صبح
من کدها رو مرتب کردم و نمودارها رو پلات کردم. شکل(2)، نمودار simulated efficiency و efficiency upperbound روی هم میوفته.
احتمال داره که نمودار simulated اشتباه بدست اومده باشه؟؟
شکل(4) رو هم رسم کردم ولی اینجا هم نمودار خطای lowerbound اشتباه بدست میاد!
http://www.uplooder.net/img/image/40/5831e4372b45d11a802efd057cf14cd6/fig9.png
http://www.uplooder.net/img/image/93/d861eb53b5fb546e233b86e274b61514/fig7.png
http://www.uplooder.net/img/image/69/df9c9ef257846551af7d2cc6bf730256/fig8.png
تا اینجا هم خیلی ازت ممنونم.

coronaa
شنبه 29 شهریور 1393, 16:10 عصر
مهندس من lowerbound برای محاسبه simulated رو بصورت زیرگرفتم نموداراش بهتر شد.
lb=ll(2:numplayers);
کد بالا رو بجای
lb=zeros(1,numplayers);
گذاشتم.
http://www.uplooder.net/img/image/41/9a4c5beb556cfc351612e488ca80a6df/simulate.png
http://www.uplooder.net/img/image/97/72c5a4e130df655b6c868f5a21e85c3d/error.png

هنوز به جواب دقیق نرسیدیم. به نظرم مشکل از lb هست.(همونی که برای fmincon) استفاده شد. نباید همه صفر باشه.
الآن lb جدید که همون مقادیر ll هست. نموداره بهتر شد. مقادیر ll بصورت زیر هست :
Columns 1 through 7

0 0.8358 0.6716 0.5074 0.3431 0.1789 0.0333

Columns 8 through 10

0.0249 0.0193 0.0155

نظر شما چیه؟

coronaa
سه شنبه 01 مهر 1393, 20:30 عصر
مهندس یه سوال دارم.
منظور از payoff یعنی سود و revenue یعنی درآمد.
توی مقاله گفتهV-NE بیانگر درآمد کلی بدست‌آمده تمامی ژنراتورها در تعادل نش متقارن و V-opt معادل با ماکزیمم سود اخذشده در MG می‌باشد.
ما توی کدها اومدیم توی صورت کسر بجای درآمد کلی از سود ژنراتورها استفاده کردیم. به نظرتون مشکلی نداره؟

coronaa
سه شنبه 01 مهر 1393, 20:37 عصر
و سوال بعدیم اینه که وقتی ما برای simulated efficiency کران بالا و پایین تعریف کردیم، نباید این رو بعنوان یک قید تعریف کنیم که دیگه راندمانمون از این محدوده خارج نشه؟

rahnema1
چهارشنبه 02 مهر 1393, 19:14 عصر
مهندس یه سوال دارم.
منظور از payoff یعنی سود و revenue یعنی درآمد.
توی مقاله گفتهV-NE بیانگر درآمد کلی بدست‌آمده تمامی ژنراتورها در تعادل نش متقارن و V-opt معادل با ماکزیمم سود اخذشده در MG می‌باشد.
ما توی کدها اومدیم توی صورت کسر بجای درآمد کلی از سود ژنراتورها استفاده کردیم. به نظرتون مشکلی نداره؟

داشتم بررسی می کردم، فکرر کنم مشکل این نباشه

rahnema1
چهارشنبه 02 مهر 1393, 19:15 عصر
و سوال بعدیم اینه که وقتی ما برای simulated efficiency کران بالا و پایین تعریف کردیم، نباید این رو بعنوان یک قید تعریف کنیم که دیگه راندمانمون از این محدوده خارج نشه؟

از محدوده که خارج نشده. تنها چیزی که به عنوان محدودیت عناون شده حد بالا و پایین supply هست

coronaa
پنج شنبه 03 مهر 1393, 07:41 صبح
مهندس یه سوال دارم.
توی مقاله گفتهV-NE بیانگر درآمد کلی بدست‌آمده تمامی ژنراتورها در تعادل نش متقارن و V-opt معادل با ماکزیمم سود اخذشده در MG می‌باشد.

مهندس به نظرم برای مخرج کسر باید از جدول (4) استفاده کنیم. وقتی میگه ماکزیمم سود اخذ شده بین میکروگریدها یعنی ائتلاف بین 4 تا میکروگریدی که وجود داره. توی جدول 3 هم همین رو در نظر گرفته. اومد سود هر میکروگرید رو توی ائتلاف 4 تایی میکروگریدها بدست آورد.
ولی یه مشکلی داریم اینه که صورت کسر یک بردار 9 عددی است و مخرج کسر یک بردار 4 عددی میشه. اینطوری میشه راندمان رو بدست آورد؟

rahnema1
پنج شنبه 03 مهر 1393, 08:01 صبح
مهندس به نظرم برای مخرج کسر باید از جدول (4) استفاده کنیم. وقتی میگه ماکزیمم سود اخذ شده بین میکروگریدها یعنی ائتلاف بین 4 تا میکروگریدی که وجود داره. توی جدول 3 هم همین رو در نظر گرفته. اومد سود هر میکروگرید رو توی ائتلاف 4 تایی میکروگریدها بدست آورد.
ولی یه مشکلی داریم اینه که صورت کسر یک بردار 9 عددی است و مخرج کسر یک بردار 4 عددی میشه. اینطوری میشه راندمان رو بدست آورد؟

اون جدول برای همکاری بین چند میکروگرید هست اما در مساله نش فقط رابطه بین تولید کننده های داخل یک میکروگرید بررسی میشه. ضمن اینکه پارامترها نش هم در جدول 1 گذاشته شده که با موارد جدول 2 متفاوته

coronaa
پنج شنبه 03 مهر 1393, 08:19 صبح
یعنی توی این مقاله اومد دوتا موضوع جدا از هم رو بررسی کرد؟
پس همکاری بین میکروگریدها ربطی به اون شبیه سازیها و نمودارها نداره دیگه. درسته؟

rahnema1
پنج شنبه 03 مهر 1393, 09:17 صبح
یعنی توی این مقاله اومد دوتا موضوع جدا از هم رو بررسی کرد؟
پس همکاری بین میکروگریدها ربطی به اون شبیه سازیها و نمودارها نداره دیگه. درسته؟

جواب این سوال را نمیدونی؟

coronaa
پنج شنبه 03 مهر 1393, 10:30 صبح
خب وقتی تا حالا از این گیم و ائتلاف ها توی کدهامون استفاده نکردیم ربطی نداره دیگه!میخواستم نظر شما رو بدونم. گفتم شاید دارم اشتباه متوجه میشم.

coronaa
پنج شنبه 03 مهر 1393, 13:51 عصر
مهندس یه سوال دارم
اگه بخوام در هر سطر عددهایی که بزرگتر از صفر هستند رو نشون بده باید چطوری بنویسم؟

0 3.6000 0 1.6448
0 3.6000 0 1.9814
0.9283 0 0 3.1717
0 0 0 4.4521
0 0 0 6.6977

به این صورت نشون بده :
3.6000 1.6448
3.6000 1.9814
0.9283 3.1717
4.4521
6.6977

rahnema1
پنج شنبه 03 مهر 1393, 14:13 عصر
به این دو صورت میشه انجام داد

a=[0 3.6000 0 1.6448;
0 3.6000 0 1.9814;
0.9283 0 0 3.1717;
0 0 0 4.4521;
0 0 0 6.6977];
cellfun(@(x) x(x>0) ,num2cell(a,2) ,'UniformOutput', false)

for i=1:size(a,1); disp(a(i,a(i,:)>0)); end

coronaa
پنج شنبه 03 مهر 1393, 14:39 عصر
و اگر هم بخوایم بگیم سطرهایی که بیشتر مساوری دوتا المان دارند رو نشون بده چی؟

coronaa
پنج شنبه 03 مهر 1393, 14:41 عصر
و اگر هم بخوایم بگیم سطرهایی که بیشتر مساوری دوتا المان دارند رو نشون بده چی؟
مرسی. حل شد :
for i=1:size(a,1);
r=a(i,a(i,:)>0);
if numel(r)>=2
disp(r);
end
end
ولی نمیدونم چطوری اینو توی یه ماتریس قرار بدم!

rahnema1
پنج شنبه 03 مهر 1393, 17:04 عصر
توی cellarray قرار بدید.

coronaa
جمعه 04 مهر 1393, 11:16 صبح
34.1401 11.7570 7.1426

phi(Total) = 53.0398

coronaa
شنبه 05 مهر 1393, 06:32 صبح
یه سوال دیگه.
ببخشید که موضوع های این پست یکمی قاطی شد ولی دوست دارم که همه ی سوالاتم توی یک پست جواب داده بشه :)
میشه توی یک متلب یک محیط گرافیکی درست کرد؟
مثلن یه پنجره درست بشه و متنی داخلش نوشته بشه؟ میشه کد نویسی کرد؟
منظورم inputdlg و اینچیزا نیست!

rahnema1
شنبه 05 مهر 1393, 19:25 عصر
یه سوال دیگه.
ببخشید که موضوع های این پست یکمی قاطی شد ولی دوست دارم که همه ی سوالاتم توی یک پست جواب داده بشه :)
میشه توی یک متلب یک محیط گرافیکی درست کرد؟
مثلن یه پنجره درست بشه و متنی داخلش نوشته بشه؟ میشه کد نویسی کرد؟
منظورم inputdlg و اینچیزا نیست!

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

coronaa
شنبه 05 مهر 1393, 19:45 عصر
بله امکان ایجاد پنجره هست توی همین تولباکس ها مثالهای مختلفی میشه دید که پنجره درست کرده اند
خب این همون دستور inputdlg میشه. از این پنجره هایی که yes or no داره یا انتخاب میکنیم کدوم برتامه اجرا بشه نه!
یه پنجره یا اصلن بهتره بگم یه صفحه که سایزش رو خودمون انتخاب کنیم و متنی روش بنویسیم یا رنگی رنگیش کنیم. منظورم گرافیکیه.
شما چیز دیگه ای مد نظرتون بود؟

rahnema1
یک شنبه 06 مهر 1393, 05:54 صبح
خب این همون دستور inputdlg میشه. از این پنجره هایی که yes or no داره یا انتخاب میکنیم کدوم برتامه اجرا بشه نه!
یه پنجره یا اصلن بهتره بگم یه صفحه که سایزش رو خودمون انتخاب کنیم و متنی روش بنویسیم یا رنگی رنگیش کنیم. منظورم گرافیکیه.
شما چیز دیگه ای مد نظرتون بود؟

دقیقا نمیتونم بگم چون با octave سرو کار دارم توی هلپ متلب باید به خوبی توضیح داده باشه

coronaa
شنبه 12 مهر 1393, 18:26 عصر
مهندس ببخشید، من آرگومان CorePlot رو از همون فایل mat-tug بصورت زیر نوشتم درسته؟
اگه v های ما بصورت
v=[29.7999 8.2776 3.2196 39.5726 35.4018 12.1579 53.0398 ]
باشه
CorePlot(bw,'float',0,'none',10^5*eps)
bw همون v هست!
توی فانکشنش اینطوری تعریف کرد :
CorePlot(varargin)
که ظاهرن خود varargin چند تا پارامتر داره.
پیغامی که میده به اینصورته :
??? Error using ==> optimset at 242
Invalid value for OPTIONS parameter Algorithm:
must be 'active-set', 'trust-region-reflective', 'interior-point',
'levenberg-marquardt', 'trust-region-dogleg', or 'lm-line-search'.

Error in ==> coreQ at 43
opts=optimset('Simplex','on','LargeScale','on','Al gorithm','simplex','MaxIter',128);

Error in ==> CorePlot at 130
if coreQ(v,tol)==0

Error in ==> testShapley1 at 52
CorePlot(bw,'float',0,'none',10^5*eps)
توی optimset چه مشکلی وجود داره؟
خط 242 این فانکشن به این صورته :
checkfield(Names{j,:},arg,optimtbx);

rahnema1
یک شنبه 13 مهر 1393, 07:11 صبح
اولا باید متلب ورژن جدید نصب شده باشه و ثانیا باید cddmex هم نصب شده باشه ( در فایل pdf گفته)

coronaa
یک شنبه 13 مهر 1393, 09:16 صبح
توی متلب 2013 هم اجرا کردم نشد.
من متلب 2009 دارم که cddmex هم نصبه. یعنی همون فایل cddmex.dll توی مسیر قرار داره که قبلن بحث شده بود و اجرا هم میشد.
الآن دستوراتی که به این فایل ربط داره اجرا میشه ولی این یکی نمیدونم مشکلش چیه!
مثلن دستورات زیر اجرا میشه :
[core_vert crst]=CddCoreVertices(bw,10^5*eps)
[acrq]=CddAntiCoreQ(bw,10^5*eps);
ولی coreplot اجرا نمیشه!

coronaa
یک شنبه 13 مهر 1393, 17:18 عصر
میخوام نمودار سطح رسم کنم ولی میگه مقادیر pe و pm بصورت ماتریسی نیستند. باید چیکار کنم؟
pe= [5 10 15 20 25 30 35 40 45 50];
pm=[20 28 36 44 52 60 72 80 92 100];
DeltaP=[];
for i=1:10
DeltaP=pm(i)-pe(i);
DeltaPP(i)=DeltaP;
end
disp(DeltaPP)
surf(pe,DeltaPP,pm);
پیغامش اینه :
??? Error using ==> surf at 78
Z must be a matrix, not a scalar or vector.

rahnema1
یک شنبه 13 مهر 1393, 21:21 عصر
آخه مشکل اینجاست که من octave دارم و نسخه متلب ندارم که تست کنم

coronaa
یک شنبه 13 مهر 1393, 23:50 عصر
آخه مشکل اینجاست که من octave دارم و نسخه متلب ندارم که تست کنم
این الآن در جواب کدوم یک از دوتا مشکل بالا بود؟
coreplot یا surf ؟؟؟

rahnema1
دوشنبه 14 مهر 1393, 06:47 صبح
این الآن در جواب کدوم یک از دوتا مشکل بالا بود؟
coreplot یا surf ؟؟؟

جواب اولی بود
با surf چه چیزی می خواهد رسم بشه؟ (توضیح بیشتر)

coronaa
دوشنبه 14 مهر 1393, 07:28 صبح
جواب اولی بود
با surf چه چیزی می خواهد رسم بشه؟ (توضیح بیشتر)
خب من سه تا بردار 1 در 10 به اسم های pe, pm , DeltaPP دارم که میخوام نمودار سطح این سه تا بردار رو رسم کنم.
نمیشه اینطوری؟
بردار 1 در 10 با ماتریس 1 در 10 چه فرقی میکنه که متلب میگه باید بصورت ماتریسی باشه؟

rahnema1
دوشنبه 14 مهر 1393, 14:07 عصر
خب من سه تا بردار 1 در 10 به اسم های pe, pm , DeltaPP دارم که میخوام نمودار سطح این سه تا بردار رو رسم کنم.
نمیشه اینطوری؟
بردار 1 در 10 با ماتریس 1 در 10 چه فرقی میکنه که متلب میگه باید بصورت ماتریسی باشه؟

نمودار سطح دیگه چیه؟ میشه یه کم بیشتر توضیح بدید چیکار می خواهید بکنید/

coronaa
دوشنبه 14 مهر 1393, 16:50 عصر
به اینجور نمودارا میگن نمودار سطح :
124283
حالا این پارامترهایی که من توی کدم داشتم همون x,y,z هستن.

rahnema1
دوشنبه 14 مهر 1393, 17:37 عصر
به اینجور نمودارا میگن نمودار سطح :
124283
حالا این پارامترهایی که من توی کدم داشتم همون x,y,z هستن.

تابع trisurf واسه همین کار میشه استفاده کرد

coronaa
دوشنبه 21 مهر 1393, 12:28 عصر
مهندس یه سوال دارم.
اگه چندتا فانکشن داشته باشیم و یک برنامه اصلی که یک متغیری به اسم m وجود داره که هم توی فانکشن ها هست، هم توی برنامه اصلی.
آیا میشه کدی نوشت که وقتی مقدار m رو توی برنامه اصلی تغییر دادم همین مقدار توی فانکشن ها هم تغییر کنه؟

rahnema1
دوشنبه 21 مهر 1393, 19:13 عصر
مهندس یه سوال دارم.
اگه چندتا فانکشن داشته باشیم و یک برنامه اصلی که یک متغیری به اسم m وجود داره که هم توی فانکشن ها هست، هم توی برنامه اصلی.
آیا میشه کدی نوشت که وقتی مقدار m رو توی برنامه اصلی تغییر دادم همین مقدار توی فانکشن ها هم تغییر کنه؟

متغیر را به صورت global تعریف کنید

global a;
a=5;

function ret = myfunc()
global a;
%...
end

coronaa
دوشنبه 21 مهر 1393, 21:03 عصر
متغیر را به صورت global تعریف کنید

global a;
a=5;

function ret = myfunc()
global a;
%...
end

فانکشن های من توی یه m-file دیگه هستن. با برنامه اصلی جداست!

rahnema1
دوشنبه 21 مهر 1393, 21:09 عصر
اشکالی نداره با همون global درست میشه

coronaa
دوشنبه 21 مهر 1393, 21:31 عصر
مرسی حل شد :)
توی متلب یه سری فرمت ها هست که برای نشان دادن چند رقم اعشار هست.
مثلن 2 رقم اعشار ، 4 رقم اعشار یا 15 رقم اعشار . ولی من میخوام 6 رقم اعشار نشون بده. چطوریه؟
با digits خواستم انجام بدم نشد. شما میدونید چطوریه؟

rahnema1
سه شنبه 22 مهر 1393, 05:12 صبح
مرسی حل شد :)
توی متلب یه سری فرمت ها هست که برای نشان دادن چند رقم اعشار هست.
مثلن 2 رقم اعشار ، 4 رقم اعشار یا 15 رقم اعشار . ولی من میخوام 6 رقم اعشار نشون بده. چطوریه؟
با digits خواستم انجام بدم نشد. شما میدونید چطوریه؟

sprintf('%.6f',12.34567658)

coronaa
سه شنبه 22 مهر 1393, 10:53 صبح
sprintf('%.6f',12.34567658)
منظورم این بود همه ی اعدا رو با یک نماد علمی بنویسه.
یعنی همه رو با 10e-6 نشون بده!

rahnema1
سه شنبه 22 مهر 1393, 12:36 عصر
یعنی این جوری؟
sprintf('%f x 10e-6',12.34567658/10e-6)

coronaa
سه شنبه 22 مهر 1393, 14:52 عصر
من به این صورت زیر نوشتم و جوابی که گرفتم اینطوری بود :
sprintf('%10e\n',v')
جواب :
6.140758e+005
2.023135e+006
3.572194e+006
2.637223e+006
4.186298e+006
5.595317e+006
6.209423e+006
ـــــــــــــــــــــــــ ـــــــــــــــــــــــــ ــــــــــــــــــــ
sprintf('%f x 10e-6\n',v')
جواب :
614075.750000 x 10e-6
2023134.500000 x 10e-6
3572194.000000 x 10e-6
2637222.808247 x 10e-6
4186297.933594 x 10e-6
5595317.432922 x 10e-6
6209423.423902 x 10e-6

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

coronaa
یک شنبه 27 مهر 1393, 20:16 عصر
سلام
ببخشید چندتا سوال داشتم
شما توی کدهای nira بغیر از river-fj, river-cj, river-j چیز دیگه ای رو هم کم و زیاد کردین؟
مثلن توی interfac یا relax و ... !
numplayers رو که میدونم تغییر دادین توی interfac
* توی interfac چرای این کد رو اضافه کردین؟ دلیلتون چی بود؟ درسته که میخواستیم payoff رو بدست بیاریم ولی اگه میخواست توی این قسمت بدست بیاد که ادامه برنامه واسه چی بود؟ (البته جوابها رو مشکلی ندارم. درست در اومدن!)
payoff(numplayers)=c(1,1);

rahnema1
یک شنبه 27 مهر 1393, 21:50 عصر
والا این کد را من نذاشتم داخل interfac فکر کنم خودتون گذاشتید
من فقط گفتم شما به طور دستی numplayer را از 1 تا 10 تغییر بدید و هر دفعه که اجرا کردید نتیجه را در نوت پد کپی کنید تا 10 تا نتیجه داشته باشیم

coronaa
یک شنبه 27 مهر 1393, 22:00 عصر
نه منم نذاشتم. با کد اصلیش مقایسه کردم دیدم این اضافه شد. احتمالن خودتون گذاشتید!

rahnema1
یک شنبه 27 مهر 1393, 22:11 عصر
فایل زیپ که برای شما فرستادم محتواش را نگاه کردم . داخل interfac چنین چیزی نبود!

coronaa
یک شنبه 27 مهر 1393, 22:31 عصر
خب منم همینو میگم دیگه!
حالا کی اون خط رو اضافه کرد خدا میدونه :))

coronaa
جمعه 02 آبان 1393, 17:59 عصر
من یه celldata درست کردم که ابعادش 1 در 4 هست و در هر سلول، یک ماتریس 1 در 10 وجود داره.
به این صورت :
celldata =

[1x10 double] [1x10 double] [1x10 double] [1x10 double]
حالا چطوری میتونم ماتریس های موجود در هر سلول رو پشت سر هم بصورت سطری بنویسم؟
یعنی یه ماتریس 4 در 10 داشته باشم!

coronaa
جمعه 02 آبان 1393, 20:03 عصر
مهندس با دستور nchoosek نمیشه حالت های مختلف Merge & Split رو نوشت؟
مثل تصویر زیر :
http://www.uplooder.net/img/image/88/49e146f4001a1e2998cdb4fd1f3cfb52/collection.jpg

من 46 حالت رو نوشتم. نمیدونم چند حالت بوجود میاد!

coronaa
جمعه 02 آبان 1393, 22:01 عصر
ببخشید من امروز زیاد سوال دارم :)
این یه قسمت برنامه هست که به ازای numk مختلف ، که تشکیل celldata میدن، میاد نمودار رو رسم میکنه :

numk =[0.2000 0.4000 0.6000 0.8000];
for i=1:length(numk)
mat=celldata{1,i};
plot((2:10),mat(2:10),'r')
ylabel('Symmetric NE Efficiency');
xlabel('Number of Suppliers in Microgrid');
legend('simulated efficiency')
axis([2 10 0 1.1])
hold on
end
حالا نمیدونم چطوری توی نمودار مشخص کنم که هر نمودار به ازای کدوم numk هست! میشه نشون داد؟

124913

rahnema1
شنبه 03 آبان 1393, 18:56 عصر
یعنی یه ماتریس 4 در 10 داشته باشم!

متوجه نشدم

rahnema1
شنبه 03 آبان 1393, 18:57 عصر
مهندس با دستور nchoosek نمیشه حالت های مختلف Merge & Split رو نوشت؟
من 46 حالت رو نوشتم. نمیدونم چند حالت بوجود میاد!
ترکیب چندتا دستور باید باشه

rahnema1
شنبه 03 آبان 1393, 19:00 عصر
حالا نمیدونم چطوری توی نمودار مشخص کنم که هر نمودار به ازای کدوم numk هست! میشه نشون داد؟

124913

تو دستورات پلات دستوری به نام legend هم هست که میشه مشخص کرد

coronaa
شنبه 03 آبان 1393, 20:29 عصر
متوجه نشدم
ببین اون سلولی که ساخته شد، 4 تا سلول داخلی داره که هر سلول داخلی یه ماتریس 1 در 10 هست. یعنی من کل این سلول، 4 تا متریس 1 در 10 دارم.
حالا میخوام این بردارهای 1 در 10 رو توی یک ماتریس قرار بدم. بصورت زیر :
[1x10 double]
[1x10 double]
[1x10 double]
[1x10 double]

که بشه یک ماتریس 4 در 10

coronaa
شنبه 03 آبان 1393, 20:31 عصر
تو دستورات پلات دستوری به نام legend هم هست که میشه مشخص کرد
این کار رو قبلن انجام دادم. توی کد بالایی هم قرار داره. ولی چون توی حلقه قرار میگیره انگار متمایز نمیکنه!

rahnema1
شنبه 03 آبان 1393, 21:13 عصر
legend را چند بار نباید اجرا کنید تنها یکبار کافیه ( پس از اجرای حلقه) توی هلپ ببینید

سلول:

c = {}
for i = 1:4
c{i} = rand(1, 10);
end
m = zeros(4, 10);
for i = 1:4
m(i, :) = c{i};
end

coronaa
شنبه 03 آبان 1393, 22:32 عصر
legend را چند بار نباید اجرا کنید تنها یکبار کافیه ( پس از اجرای حلقه) توی هلپ ببینید

سلول:

c = {}
for i = 1:4
c{i} = rand(1, 10);
end
m = zeros(4, 10);
for i = 1:4
m(i, :) = c{i};
end

دستت درد نکنه. سلول درست شد!
ولی legend هنوز درست نشد. توی legend چی باید قرار بدم؟ من که نمیدونم چه تعداد نمودار رسم میشه که بخوام برای تک تکش نامگذاری کنم!
for i=1:length(numk)
mat=celldata{1,i};
plot((2:10),mat(2:10),'r')
ylabel('Symmetric NE Efficiency');
xlabel('Number of Suppliers in Microgrid');
axis([2 10 0 1.1])
hold on
end
legend('simulated efficiency')
grid

rahnema1
دوشنبه 05 آبان 1393, 19:26 عصر
واضحه! تعدادش برابر با length(numk) هست

coronaa
دوشنبه 05 آبان 1393, 19:46 عصر
واضحه! تعدادش برابر با length(numk) هست
:)
اینطوری که میدونم تعداد نمودارها برابر length(numl) هست. چطوری به legend بفهمونم که مثلن 4 تا نمودار کشیده شد حالا تو بیا از 1 تا 4 بهشون lable بزن!
نمیدونم منظورم رو رسوندم یا نه! میخوام وقتی 10 تا نمودار کشید. بیاد مشخص کنه که کدوم نمودار برای کدوم k هست.

rahnema1
دوشنبه 05 آبان 1393, 19:57 عصر
این مثال هلپ متلب یه کم تغییر دادم
خیلی واضحه نمیدونم کجا مشکل دارید

x = -pi:pi/20:pi;
y1 = sin(x);
y2 = cos(x);

figure
plot(x,y1,'-ro',x,y2,'-.b')
strings= {'sin(x)', 'cos(x)'};
legend(strings)

coronaa
دوشنبه 05 آبان 1393, 20:09 عصر
تفاوت من و شما اینه که شما از قبل میدونستید دوتا نمودار دارید و برای هر کدوم مشخص کردین ro باشه یا b- باشه. ولی من توی string نمیدونم چندتا جمله باید داشته باشم.با حلقه for میشه مشخص کرد؟
منم همچین نموداری رو رسم کردم و چون میدونستم چندتا نمودار هست برای هر کدوم نامگذاری کردم :
125025

rahnema1
دوشنبه 05 آبان 1393, 20:19 عصر
گفتم که تعدادش مشخصه

coronaa
دوشنبه 05 آبان 1393, 20:32 عصر
گفتم که تعدادش مشخصه
خب فرض کنید برنامه شما 5 تا نمودار sin با زوایای مختلف رسم میکنه. البته از قبل نمیدونی 5 تا هست چون توی حلقه for قرار داره!
حال این دوتا خط پایینی رو چطوری تغییر میدی؟
plot(x,y1,'-ro',x,y2,'-.b')
strings= {'sin(x)', 'cos(x)'};

rahnema1
دوشنبه 05 آبان 1393, 20:47 عصر
a=rand(5,10);
symb = {'-r',':b','-.g','--c','-om'};
strings = {'a','b','c','d','e'}
figure,hold on;
for i =1:5
plot( a(i,:),symb{i});
end
legend(strings)

coronaa
دوشنبه 05 آبان 1393, 20:53 عصر
خب فرقی نکرد!
شما از قبل میدونستی که میخوای 5 تا نمودار رسم کنی.
symb = {'-r',':b','-.g','--c','-om'};
strings = {'a','b','c','d','e'}

rahnema1
دوشنبه 05 آبان 1393, 21:02 عصر
حالا شما یه مثال ساده بزنید که نشه با این روش ترسیم کرد

coronaa
دوشنبه 05 آبان 1393, 21:08 عصر
n=input('tedade nemoodarha ra vared konid')
a=rand(n,10);
symb = {'-r',':b','-.g','--c','-om'};
strings = {'a','b','c','d','e'}
figure,hold on;
for i =1:n
plot( a(i,:),symb{i});
end
legend(strings)

حالا چی؟
دو جمله پایینی باید با تغییر n تغییر کنه!
symb = {'-r',':b','-.g','--c','-om'};
strings = {'a','b','c','d','e'}

coronaa
دوشنبه 05 آبان 1393, 21:34 عصر
حالا من نمیخوام حتمن نمودارها رنگی بشه. همه یه رنگ باشه ولی از k1 تا kn شماره گذاری باشه.

rahnema1
دوشنبه 05 آبان 1393, 21:34 عصر
بالاخره در پلات می خواهی نامهای معتبر به هر خط بدی

n=10;
a=rand(n,20);
rang={'b','g','r','c','m','y' ,'k'};
symb={'.' ,'o' ,'x' ,'+' ,'*' ,'s' ,'d' ,'v' ,'^' ,'<' ,'>' };
szrg = numel(rang);
szsy =numel(symb);
figure,hold on
for i =1:n
plot(a(i,:), sprintf('-%c%c', rang{mod(i, szrg) + 1}, symb{mod(i, szsy) + 1}))
end
legend(int2str((1:n)'))

rahnema1
دوشنبه 05 آبان 1393, 21:38 عصر
n=10;
a=rand(n,20);
plot(1:20,a)
legend(int2str((1:n)'))

coronaa
دوشنبه 05 آبان 1393, 21:53 عصر
طیب الله :)
چیزی که میخواستم همین بود. حالا باید با برنامه ی خودم تطبیقش بدم.
دستت درد نکنه مهندس.

coronaa
چهارشنبه 28 آبان 1393, 19:41 عصر
سلام
من یه چند جمله ای دارم بصورت زیر :
2x^4 + 3x^2 + 1.5x +5
چطوری میتونم بگم ضریب x^4 و x با هم جمع بشه؟

rahnema1
چهارشنبه 28 آبان 1393, 20:15 عصر
چند جمله ای شما به این صورت نوشته میشه
mypol =[2 0 3 1.5 5];
برای چاپ اون اینجور میشه
polyout(mypol)
جمع ضرایب:
mypol(1) + mypol(3)

coronaa
چهارشنبه 28 آبان 1393, 20:35 عصر
درسته ولی اگه کاربر نتونه به چندجمله ای دسترسی داشته باشه و در حین یه عملیاتی توی برنامه ساخته بشه اونوقت چی؟منظورم اینه که mypol خودش باید ساخته بشه؟

rahnema1
چهارشنبه 28 آبان 1393, 20:40 عصر
سوالتون واضح نیست. لطفا یک مثال عملی بزنید

coronaa
چهارشنبه 28 آبان 1393, 20:52 عصر
مرسی. اون چیزی که تو ذهنم بود اشتباه بود. توی متلب همون ضرایب چند جمله ای تولید میشه. در حالی که من فکر میکردم خود چند جمله ای رو مینویسه.
تشکر. حل شد.

coronaa
سه شنبه 25 آذر 1393, 21:48 عصر
سلام آقای مهندس :)
من یه کد دارم که در هر حلقه for میاد یه مقدار رو توی خروجی نشون میده. مثلن 10 بار این حلقه باید اجرا بشه. من چطوری میتونم در پایان برنامه، تمام مقادیر رو در یک سلول 1 در 10 ذخیره کنم؟

rahnema1
چهارشنبه 26 آذر 1393, 07:06 صبح
سلام
این جور میشه

mycelll = {};
for i = 1:10
mycell{i} = i*i;
end

coronaa
چهارشنبه 26 آذر 1393, 18:28 عصر
سلام
این جور میشه

mycell = {};
for i = 1:10
mycell{i} = i*i;
end

مرسی. قبلنم اینو گفته بودین. هر کاری میکردم نمیشد. الآن درست شد.
حالا اگه بخوام کل این مجموعه، 5 بار تکرار بشه و هر بار که اجرا میشه در یک سطر قرار بگیره و حلقه بعدی در سطر زیرین قرار بگیره چطوریه؟
به این صورت :
126666

coronaa
چهارشنبه 26 آذر 1393, 19:03 عصر
من اینطوری نوشتم ولی ظاهرن اشتباهه!
celltotal = {};
for j = 1:5

mycell = {};
for i = 1:10
mycell{i} = i*i;
end
celltotal{j} = mycell{j};

end
m = zeros(5, 10);
for ii = 1:5
m(ii, :) = celltotal{ii};
end

rahnema1
چهارشنبه 26 آذر 1393, 19:04 عصر
این جور میشه نوشت

mycell ={};
for i = 1:5
for j= 1:10
mycell{i,j} = i*j;
end
end

coronaa
چهارشنبه 26 آذر 1393, 19:10 عصر
این کد بالایی که نوشتم اشتباهه؟ جوابش به این صورته :
m =

1 1 1 1 1 1 1 1 1 1
4 4 4 4 4 4 4 4 4 4
9 9 9 9 9 9 9 9 9 9
16 16 16 16 16 16 16 16 16 16
25 25 25 25 25 25 25 25 25 25

rahnema1
چهارشنبه 26 آذر 1393, 19:21 عصر
فکر کنم اینجور باید بنویسید

celltotal = {};
for j = 1:5
mycell = {};
for i = 1:10
mycell{i} = i*i;
end
celltotal{j} = mycell;
end
m = zeros(5, 10);
for ii = 1:5
m(ii, :) = cell2mat(celltotal{ii});
end


اگه قرار بود توی آرایه بریزید خب از همون اول این کار را می کردید

m = zeros(5, 10);
for i=1:5
for j=1:10
m(i,j) = i*j;
end
end

ostadsho
پنج شنبه 27 آذر 1393, 11:40 صبح
ممنون..مشکل منم تقریبا همین بود حل شد

ostadsho
پنج شنبه 27 آذر 1393, 11:45 صبح
ییییییییییییییییییییییییی ییییییییییییییییییییییییی ییییییییییییییییییییییییی ییی

coronaa
سه شنبه 02 دی 1393, 19:17 عصر
سلام
چطوری میتونم یه بردار ستونی بسازم که ستون اول از 1 تا 10 باشه و ستون دوم فقط یک عدد ثابت؟
clc; clear all;

p=input('Enter x :');
x=zeros(10,2);
for t=1:10

x(t,1)=p;
% x(t,:)= x(t,p)

end
x

rahnema1
سه شنبه 02 دی 1393, 19:28 عصر
x = [(1:10)', repmat(6,10,1)]
یا
x = zeros(10, 2);
x(:, 1) = 1:10;
x(:, 2) = 6;

coronaa
سه شنبه 02 دی 1393, 19:31 عصر
اگه بخوام این بردار که از نوع double هست به نوع struct تبدیلش کنم میشه؟

rahnema1
سه شنبه 02 دی 1393, 19:35 عصر
لطفا دقیقا بگید چیکار میخواهید بکنید

coronaa
سه شنبه 02 دی 1393, 19:53 عصر
لطفا دقیقا بگید چیکار میخواهید بکنید

مرسی از کمکتون.
مشکلم که بر طرف شد ولی میخواستم بدونم میشه یه داده عددی که بصورت double هست رو به فرمت struct تبدیلش کرد. احتمال داده بودم که داده هایی که تو سیمولینک کار میکنن فرمت struct رو قبول می کنند.
حالا اگه منظورم رو متوجه نشدین، دیگه بیخیال شید. شاید سوال پوچی پرسیدم!

coronaa
شنبه 13 دی 1393, 11:43 صبح
سلام
میشه فهمید تابع نمودار زیر چیه؟
یا اصلن میشه نمودار اینچنینی رو توی متلب تخمین زد؟
http://www.uplooder.net/img/image/74/d64e927c2bca60dae04d47b077ba9f37/zzz.bmp

rahnema1
شنبه 13 دی 1393, 19:35 عصر
سلام
میشه فهمید تابع نمودار زیر چیه؟
یا اصلن میشه نمودار اینچنینی رو توی متلب تخمین زد؟
http://www.uplooder.net/img/image/74/d64e927c2bca60dae04d47b077ba9f37/zzz.bmp

سلام
باید ابتدا نقاط نمودار x و y را به یک طریقی استخراج کنید
تابع احتمالا یک تابع نمایی هست که با روش زیر میتونید فرمول اون را بدست بیارید
با استفاده از polyfit هم میشه یک چند جمله ای را به نمودار فیت کرد

data = [
0 126.6;
1 101.8;
2 71.6;
3 85.1;
4 101.6;
5 67.5;
6 68.1;
7 55.2;
8 62.9;
9 45.5;
10 41.9;
11 46.3;
12 34.1;
13 38.2;
14 41.7;
15 24.7;
16 41.5;
17 24.5;
18 36.6;
19 19.6;
20 22.8;
21 29.6;
22 23.5;
23 15.9;
24 15.3;
25 13.4;
26 26.8;
27 9.8;
28 18.8;
29 25.9;
30 19.3
];
x= [ones(size(data, 1), 1), data(:, 1)];
y = log (data(:, 2));
zaraeb = pinv (x) * y;
plot(data (:, 1), data (:, 2), 'o')
hold on;
plot(data (:, 1), exp (zaraeb' * x'))

coronaa
شنبه 13 دی 1393, 21:18 عصر
این داده ها رو بصورت فرضی در نظر گرفتین؟
دستور pinv چه کاری انجام میده؟
راستش هدف من برازش منحنی نبود. من هدفم اینه که این نمودار رو توی متلب رسم کنم. حالا صرفنظر اینکه بدونم چه تابعی هست.
الآن با این برازشی هم که انجام دادین زیاد دقیق به اون تابع نیست!

rahnema1
شنبه 13 دی 1393, 21:32 عصر
این داده ها رو بصورت فرضی در نظر گرفتین؟
دستور pinv چه کاری انجام میده؟
راستش هدف من برازش منحنی نبود. من هدفم اینه که این نمودار رو توی متلب رسم کنم. حالا صرفنظر اینکه بدونم چه تابعی هست.
الآن با این برازشی هم که انجام دادین زیاد دقیق به اون تابع نیست!

با استفاده از روش کمترین مربعات منحنی را فیت می کنیم
این داده ها فرضی هستند
همون طور که گفتم باید داده ها را از روی نمودار استخراج کنید حالا به صورت چشمی نقاط x و y را استخراج کنید یا یک روش اتوماتیک پیدا کنید که مختصات منحنی را بکشه بیرون