منظورم اینه
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)
Printable View
منظورم اینه
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)
چند تا دستور هست که زیاد در متلب کاربرد داره برای پیدا کردن اندکس ها یا مثلا کار با ماتریسها که توی اغلب جزوه های مختصر هم دیده میشه چیز خاصی نیست
لیست اینها هم میشه مثلا در گوگل در matlab refcard پیدا کرد
مهندس من دارم توی کدهام از یه دستور شرطی استفاده میکنم. داخل این شرط میخوام بگم مثلن اگه n=10 بود فلان برنامه ای که توی یه m-file دیگه هست رو اجرا کن ولی اون برنامه بصورت تابع نیست. باید چیکار کنم؟
واسه ی قوانین چطوری 1 یا 2 مشخص میکنی؟ بر چه اساسیه؟
aa = addrule (aa, [1 1 1 1;2 2 1 1]);
اگه بخوام n جمله ی اول رو بصورت یک بردار نشون بدم چطوریه؟
مثلن وقتی n=5 هست بصورت زیر بشه
P=[ 1 2 3 4 5]
این یه مثال ساده هست.
همونطوری هم که گفتین جواب رو بر میگردونه دیگه!
چطوری باید جدا جدا توی 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);
این جوری
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);
ممنونم.
ولی من همینو قبلن نوشته بودم. اینطوری نمیخواستم.
بیخیال. مرسی :)
همونطوری که توی مقاله گفت این دو تا تابع باید maximize بشن. ولی این دستور که مینیمم سازی میکنه ویک نقطه مینیمم رو بدست میاره که!
مگه اینطور نیست؟
من یه فایل آموزشی از متلب سایت گرفتم که دقیقن همین منفی رو گفته ولی اونجا اول یه تابع هدف معرفی کرده و سپس توابع خودش رو نوشته. من که اینجا تابع هدف ندارم!
در ضمن توی هلپ متلب گفته این دستور برای تک متغیره هست ولی من اینجا دوتا متغیر دارم. p و q
فکر کنم از دستور fmincon باید استفاده بشه.
اینطوری نیست؟
درسته واسه رابطه 5 فکر کنم fminbnd کافی باشه اما برای رابطه 6 همونطور که اشاره کردیدfmincon باید به کار بره. فکر کنم فقط لازم باشه تابع خودتون را داخل این دستور بذارید اون چیزهایی که لازم نیست را [ ] بذارید
از چه جهت میگین رابطه (5) با fminbnd و معادله (6) با fmincon حل میشه؟اگه از نظر تعداد متغیر بگیم یا هردو ، دو متغیر p و q دارند و یا هر دو ، فقط یک متغیر q دارند.شما از این الگوریتمی که تو صفحه سوم داده سر در میارید؟فکر کنم این دوتا تابع رو باید با الگوریتمی که داده بهینه کنیم. با همون روش تکرار و آپدیت کردن.دقیقاً متوجه نشدم که باید چیکارش کنم!
زیر کلمه max را نگاه کنید. در رابطه 5 فقط یک متغیر می بینیم اما در رابطه 6 چند تا می بینیم. دلیلش اینه.
آها. مرسی.
من هر کاری کردم نتونستم با اون کدها جواب بگیرم. یک تابع هدف و چندتا قید معرفی میکنه ولی اینجا اصلن اینطوری نیست!
یه مثال نمونه که داد اینطوری بود :
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);
این کدوم رو میخواد ماکزیمم کنه؟
من اینطوری نوشت. ولی خطا میده!
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);
اشتباهه؟
فرمول 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);
1- چرا فرمول 6 رو اینطوری نوشتین؟ به این صورت نیست؟
sum(diff(Cq)+k.*(D-sum(q)).*q)-Cq ;
2- چرا k رو بصورت برداری ننوشتین؟ (بخاطر اینکه مقادیر یکسانی داره؟)
3- پارامت آخر آرگومان fmincon چرا لاندا گذاشتین؟ لاندا ماکزیمم عدد q نیست؟
مرسی. کاملاً منطقیه.
اون کد آماده NLC رو بخاطر چی قرار میداد؟
و سوال دیگه اینکه الآن وقتی این اجرا میشه یک عدد منفی میده. یعنی اون نقطه، نقطه ی بهینه هست؟
باید معادله ی اولی هم به همین صورت حل بشه ولی با fminbnd و سپس این دوتا رو بذارم توی الگوریتمی که وجود داره؟
فکر کنم رابطه 5 را لازم نداریم چون محاسبه برای موقعیه که فقط یک تولید کننده را در نظر می گیریم
NLC را لازم نداریم فکر کنم برای موقعی هست که بخواهیم شروط دیگه برقرار کنیم
یه چیزی برام مشخص نیست. لاندا که باید برابر باشه با بیشترین ظرفیت تولید هر تولید کننده را اینجا گذاشته 1 که برام مبهمه
در مورد جواب منفی هم دقت کنید که آیا x منفی شده؟ چون اگه اینجور باشه یه جای کار اشکال وجود داره که احتمالا مقدار لاندا باشه
منم دقیقاً متوجه نشدم واسه چی 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
فکر کنم q ها اشتباه هست باید حداکثر 1 باشه
شاید حرف شما درست باشه. آخه من مقادیر 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 نباید برداری باشه.
توی مقاله در جدول 1 هم برای هر کدوم فقط یک مقدار گذاشته (ص 426)
این q ها فقط مقدار حدس اولیه را نشون میده رای ورود به الگوریتم. حالا هر کدوم را 0.5 بذارید مشکلی نیست و اجرا کنید
دفعه دیگه مثلا هر کدوم را مقادیر مختلف بین 0 و یک بذارید در هر صورت فکر کنم جواب fmincon یکسان باشه
علامت منفی پشت تابع فراموش نشه
تو صفحه 423 ، بعد از رابطه (1) هم دوتا شرط داره اینکه مجموع q نباید بزرگتر یا کوچیکتر از D(دیماند) باشه. اگه بود جریمه میشه یا ضرر میکنه.
پس یعنی باید 4 تا q بدست بیاریم که مجموعشون برابر D بشه دیگه. درسته؟
من داده های کد رو بصورت زیر تغییر دادم (مطابق داده های جدول شماره 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
برای تولید تصویر 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));
ممنونم. میشه بگی چیکار کردی؟
نمودار تقریبن برعکس شکل (3) شد!
Q برای چیه؟ با q فرق میکنه؟
مقادیر q بصورت فرضیه دیگه. درسته؟ چون اینا مقادیر انرژی هر DG هستن و ممکنه متفاوت هم باشند.
ببخشید اینجا را درست کنید
efficiency(numsupplier)=fx2/fx1;
Q ثابته اما q قراره بهینه بشه
Q کجا تعریف شده؟
برنامه نمیشناستش.
??? Undefined function or variable 'Q'.
خب اول توی خط دوم Q آوردی متلبم گیر میده!
??? Undefined function or variable 'Q'.
Error in ==> @(q)-sum(alpha.*q.^2+k.*(D-sum(Q)).*q)
پس چه طور دیشب نمودار کشیدی؟
می تونی علاوه بر داخل حلقه یک بار هم بیرون حلقه تعریف کنی تا گیر نده
اگه بصورت زیر بنویسم نمودارش خط صاف میشه.
Q=ones(1,10)*.5;
f=@(q) -sum(alpha.*q.^2+k.*(D-sum(Q)).*q);
http://www.uplooder.net/img/image/53...b7ece73/aa.jpg
اگه همه رو q بذارم نمودارش به این صورت میشه.
شما چه نموداری میگیری؟
http://www.uplooder.net/img/image/9/...95f0cd3/bb.jpg
مهندس ببخشید.
اگه منظور شما از این خط:
efficiency(numsupplier)=fx2/fx1;
رابطه ی شماره 15 مقاله هست ، فکر کنم مخرج کسر با الگوریتم گیم تئوری بدست میاد!
این الگوریتم (1) که در مقاله اومده و شما ازش استفاده کردین ، فکر کنم فقط برای صورت کسر باشه. اینطوری نیست؟
یه اصلاح کردم فکر کنم مشکلی نباشه
این که مخرج کسر از گیم تئوری به دست میاد هم من نمیدونم اگه اینطوره امتحان کن چون مقاله خیلی گنگ و مبهمه
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));
مهندس توی متلب 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
چطوری باید جدا بشه؟