-
نقل قول: حل تابع چند جمله ای
شاید حرف شما درست باشه. آخه من مقادیر 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 یکسان باشه
-
نقل قول: حل تابع چند جمله ای
علامت منفی پشت تابع فراموش نشه
-
نقل قول: حل تابع چند جمله ای
نقل قول:
نوشته شده توسط
rahnema1
توی مقاله در جدول 1 هم برای هر کدوم فقط یک مقدار گذاشته (ص 426)
این q ها فقط مقدار حدس اولیه را نشون میده رای ورود به الگوریتم. حالا هر کدوم را 0.5 بذارید مشکلی نیست و اجرا کنید
دفعه دیگه مثلا هر کدوم را مقادیر مختلف بین 0 و یک بذارید در هر صورت فکر کنم جواب fmincon یکسان باشه
q رو بین صفر و یک قرار میدم جواب صفر در میاد.
-
نقل قول: حل تابع چند جمله ای
تو صفحه 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'.
-
نقل قول: حل تابع چند جمله ای
نقل قول:
نوشته شده توسط
coronaa
Q کجا تعریف شده؟
برنامه نمیشناستش.
??? Undefined function or variable 'Q'.
داخل حلقه تعریف شده
-
نقل قول: حل تابع چند جمله ای
خب اول توی خط دوم Q آوردی متلبم گیر میده!
??? Undefined function or variable 'Q'.
Error in ==> @(q)-sum(alpha.*q.^2+k.*(D-sum(Q)).*q)
-
نقل قول: حل تابع چند جمله ای
پس چه طور دیشب نمودار کشیدی؟
می تونی علاوه بر داخل حلقه یک بار هم بیرون حلقه تعریف کنی تا گیر نده
-
نقل قول: حل تابع چند جمله ای
نقل قول:
نوشته شده توسط
rahnema1
پس چه طور دیشب نمودار کشیدی؟
می تونی علاوه بر داخل حلقه یک بار هم بیرون حلقه تعریف کنی تا گیر نده
من فکر کرده بودم شما Q رو اشتباهی گذاشتی واسه همین همه رو q گرفته بودم. جواب داده بود.
اونوقت به numsupplier گیر میده. اینو چیکار کنم. همینطوری بجاش 10 بذارم؟
-
نقل قول: حل تابع چند جمله ای
اگه بصورت زیر بنویسم نمودارش خط صاف میشه.
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
چطوری باید جدا بشه؟
-
نقل قول: حل تابع چند جمله ای
توی اکتاو کتاسفانه این تابعها را نداشت من در یه نرم افزار دیگه به دست آوردم اینم نمودارش
http://www.sharefile.ir/uploads/1409943242.png
و صورت کسر هم مطابق با fminbnd یعنی رابطه 5 هست
-
نقل قول: حل تابع چند جمله ای
مهندس من پست قبلیم رو ادیت کردم. اون کد رو باید جدا کنم! چطوریه؟
-
نقل قول: حل تابع چند جمله ای
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
-
نقل قول: حل تابع چند جمله ای
جدا کردم ولی این پیغام رو میده :??? Input argument "q" is undefined.Error in ==> f at 3 ret=-sum(alpha.*q.^2+k.*(D-sum(Q)).*q);
-
نقل قول: حل تابع چند جمله ای
قبل از اجرا یک clear all بزن
تابع را در فایل f.m ذخیره کن
-
نقل قول: حل تابع چند جمله ای
همین کار رو کردم.
برنامه فانکشن بصورت زیره :
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 رو نمیشناسه!
-
نقل قول: حل تابع چند جمله ای
حتما یک فایل یا تابع با همین نام در یک فولدر بالاتر داری اگه بتونی نام تابع را تغییر بده یا اون فایل را حذف کن
-
نقل قول: حل تابع چند جمله ای
برنامه اصلی رو که ران میکنم خطای زیر رو میده :
??? Input argument "q" is undefined.
Error in ==> f at 3
ret=-sum(alpha.*q.^2+k.*(D-sum(Q)).*q);
-
نقل قول: حل تابع چند جمله ای
kاصلا نام تابع را در همه جا تبدیل کن به fff
-
نقل قول: حل تابع چند جمله ای
نقل قول:
نوشته شده توسط
rahnema1
حتما یک فایل یا تابع با همین نام در یک فولدر بالاتر داری اگه بتونی نام تابع را تغییر بده یا اون فایل را حذف کن
نه اسمشم تغییر دادم. باز همون خطا!
-
نقل قول: حل تابع چند جمله ای
داخل fminbnd و fmincon بذار @f
-
نقل قول: حل تابع چند جمله ای
وقتی برنامه اصلی رو ران میکنم، به خط 9 که میرسه میره به برنامه fff .
حالا فانکشن رو که اجرا میکنه ، توی خط سوم برنامه :
ret=-sum(alpha.*q.^2+k.*(D-sum(Q)).*q);
میگه q رو نمیشناسه!
-
نقل قول: حل تابع چند جمله ای
نقل قول:
نوشته شده توسط
rahnema1
داخل 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);
-
نقل قول: حل تابع چند جمله ای
چیزی به ذهنم نمیرسه
با چند نمونه تابع ساده امتحان کن شاید معلوم بشه
از global هم استفاده کن
-
نقل قول: حل تابع چند جمله ای
نقل قول:
نوشته شده توسط
rahnema1
چیزی به ذهنم نمیرسه
با چند نمونه تابع ساده امتحان کن شاید معلوم بشه
از global هم استفاده کن
کار global چیه؟
یه بار global q هم گذاشتم دیدم نشد.
-
نقل قول: حل تابع چند جمله ای
global باعث میشه متغیرهایی که خارج تابع تعریف شده در داخل تابع هم شناخته بشن
-
نقل قول: حل تابع چند جمله ای
نمیشه تابع رو بصورت جداگانه تعریف نکنی و توی همون برنامه اصلی قرار بدی؟
آخه توی فانکشن ، مقادیر آلفا، دیماند و Q در برنامه اصلی تعریف شده ولی q اصلن هیچ جا بعنوان متغیر تعریف نشده.
-
نقل قول: حل تابع چند جمله ای
q که پارامتر ورودی تابع هست
-
نقل قول: حل تابع چند جمله ای
پس چرا توی همون فانکشن رابطه ی
ret=-sum(alpha.*q.^2+k.*(D-sum(Q)).*q);
q رو نمیشناسه؟
-
نقل قول: حل تابع چند جمله ای
چرا علامت @ را نذاشتی؟ گفتم به شما که
[x1, fx1]=fmincon(@f,Q,[],[],[],[],lb,ub);