حالا این اسم چه ربطی به این تاپیک داره....
آقای (مهندسسسسسس) کرونا جوابشو تو پیام خصوصی بهم دادن که اینجا میذارم البته ایشون کلا 2 تا تاپیک بیشتر تو این سایت ایجاد نکردن اولیش به نام حل تابع چند جمله ای بود که حدود 500 تا پست داخلش ایجاد شد از مطالب مختلف:
https://barnamenevis.org/showthread.php?460429
دومیش هم هفت بیجاره
نوشته شده توسط coronaa
مهندس من به این صورت میخوام :
تصویر رگرسیون هست ولی من تایتلش رو ادیت کردم و خودم یه سری رشته و عدد بهش اضافه کردم. کد بصورت زیره :
plotregression(reff1,q1);
h1=get(gca,'Title');
st1=get(h1,'String');
st1=st1(12:end);
title({'Validation of Link(1)';[st1,' & ' 'R^2 = ' num2str(R2_1),' & ' 'RMSE = ' num2str(sqrt(MSE1))]});
ولی برای دوتا تصویر یکجا نمیشه!
فکر کنم دستور رگرسیون تو متلب زیاد باشه اگه بتونی از یکی دیگه استفاده کن
متاسفانه برنامه octave دستور plotregression نداره وگرنه حتما امتحانش میکردم
باید اینجور باشه قاعدتا
f2 = sum(abs(diff(out1))) + sum(abs(diff(out2)));
شاید لازم باشه اون جمع ضربدر واحد اپسیلون زمان بشه که این هم تنها یک ضریبه که نهایتا در فرمول بهینه سازی تاثیری نداره
میدونیم که با دستور rand میشه یه نویز تصادفی ساخت. به نظرت میشه بگیم به مدت مثلاً 4 ثانیه داده تصادفی ایجاد کن؟
بسته به این داره که در هر ثانیه چند تا نمونه گرفته باشیم اگه در هر ثانیه صد تا نمونه بگیریم میشه 400 عدد رندوم
اصلا rand نمیدونه ثانیه چیه. این ما هستیم که مشخص می کنیم که چند تا تولید بشه بله همین دستور درسته
این توزیع نرماله قبلی توزیع یکنواخت بود
بستگی به سیستم شما داره. انواع و اقسام نویز داریم
سلام
از نویسنده مقاله در مورد وزنها پرسیدم. گفت هرکدوم رو 0.5 بگیر.
کد بصورت زیر شد ولی مقدار نهایی بین صفر و یک نمیشه. چرا؟
w1=0.5;
w2=0.5;
out1=rand(1,100);
out2=rand(1,100);
e1=.1*out1;
e2=.1*out2;
f1 = sum(abs(e1))+sum(abs(e2))
f2 = sum(abs(diff(out1))) + sum(abs(diff(out2)))
F = w1*f1+w2*f2
طبق مقاله ای که براتون فرستاده بودم، همه ی مقادیر IAE بین صفر و یک هست.
باید چند دور مقاله را مطالعه کرد تا مشخص بشه چی به چیه
حالا مثلا هر جا خیلی سخت باشه و درکش هم خیلی مشکل باشه من خودم میام پیش نیازهای اون را مطالعه می کنم تا بتونم مطلب را درک کنم
ممنونم.
توی این مقاله که زیاد توضیح نداد.
خودمم جداگانه سرچ کردم هم اون چیزی که میخواستم نبود.
حالا منم بیشتر مطالعه میکنم تا ببینم چطوریه؟
با سلام مجدد خدمت دوست عزیزمون :)
این رابطه رو چطوری میشه پیاده سازی کرد؟
باید از sum استفاده کنیم یا حلقه for ؟؟؟
بحث تعصب داشتن روی یک نرم افزار خاص نیست. بلکه من باید چند موضوع رو با هم ادغام کنم که شاید فط maxima یا octave نتونه اون کار رو انجام بده.
من ابتدا باید با فازی یه سری پارامترها رو بدست بیارم که مسلماً توی متلب باید باشه. بعد باید روابط مرتبه کسری رو پیاده سازی کنم (همین فرمول و چندتا دیگه) و سپس باید با متلب کنترلرم رو طراحی کنم. پس نمیشه که من با maxima انجام بدم و چون این کدها باید به هم پیوسته باشن نمیشه فقط نتایج رو از این بگیرم و ببرم توی متلب.
در ضمن، من اینجا فقط شما رو قبول دارم :)
پیشاپیش سال نو شما هم مبارک
آخرین ویرایش به وسیله coronaa : پنج شنبه 28 اسفند 1393 در 23:41 عصر
حالا شاید بشه بعضی قسمتها را از جای دیگه گرفت که در هر صورت بستگی به کار شما داره داره
:) این نظر لطفتونه. متاسفانه این تالار خیلی سوت و کوره و کمتر کسی تمایل داره بیاد فعالیت کنه مطلبی بذاره و یا به سوالی پاسخ بده به این خاطر هست که شاید پستهای یکی مثل من به چشم بیاددر ضمن، من اینجا فقط شما رو قبول دارم :)
سال نو شما هم مبارک. :) شما هم سال خوبی داشته باشید خدا کنه سال جدید بهتر از سال کهنه باشهپیشاپیش سال نو شما هم مبارک
سلام
من دارم با الگوریتم ژنتیک کار میکنم.
یه function دارم که دو تا ورودی داره. حالا نمیدونم توی دستور ga چطوری برای هر کدوم باند بالا و پایین انتخاب کنم و یا اصلاً چطوری برای توابع چند متغیره کار میکنه!
شما آشنایی دارید؟
این تابع :
function [ p ] = sys_performance( K1 , K2 )
%UNTITLED2 Summary of this function goes here
% Detailed explanation goes here
set_param('exam/Gain1', 'Gain', num2str(K1))
set_param('exam/Gain2', 'Gain', num2str(K2))
simout=sim('exam');
p = ITAE;
end
این هم دستور ga در یک m-file دیگه :
clc
clear all
load_system('exam')
options=gaoptimset('PlotFcn', @gaplotbestf);
K_opt = ga(@sys_performance, 1 , [], [], [], [], 0.001 , 10, [], options);
سلام نه با تابع ga متلب کار نکردم الان اجرا نمیشه؟
سلام
یه سوال :
چرا عملیاتی که توی یک فانکشن صورت میگیره در workspace ذخیره نمیشه؟
من یه فانکشن دارم که در حال اجرای برنامه اصلی، ممکنه 100 بار (و یا بیشتر) تکرار بشه. میخوام نتایجی که توی فانکشن بدست میاد رو ذخیره کنم. ولی وقتی اجرای برنامه تموم میشه، هیچی ذخیر ه نمیشه!
این فانکشن :
function [ p ] = sys_performance( K )
kp1 = K(1,1);
ki1 = K(1,2);
kd1 = K(1,3);
L1 = abs(K(1,4));
M1 = abs(K(1,5));
set_param('exam2/FOPID1',...
'kp', num2str(kp1) ,'ki', num2str(ki1),'kd', num2str(kd1),...
'vi',num2str(-L1),'vd', num2str(M1))
simout=sim('exam2');
p = ITAE;
c = {};
for i = 1:100
c{i} = [kp1 , ki1 , kd1 , L1 , M1];
end
m = zeros(100,5);
for i = 1:100
m(i, :) = c{i};
end
end
و این برنامه ی اصلی :
clc
clear all
tic
% load nintblocks
load_system('exam')
options=gaoptimset('PlotFcn', @gaplotbestf, 'Display','iter');
K_opt = ga(@sys_performance, 5 , [], [], [], [],...
[0.01 , 0.01 , 0.01 , 0.01 , 0.01 ] ,...
[30 , 60 , 100 , 1.2 , 1 ], [], options);
m-file هر کدوم جداست. البته شما نمیتونید اجراش کنید. از الگوریتم ژنتیک استفاده شدهکه نمیدونم توی octave کار میکنه یا نه!
شما می تونید از یه سری متغیر global استفاده کنید که نتایج را برای شما ذخیره کنه مثلا یک تابع هست که یک بردار را می گیره و مین وماکس اون را به دست میاره و نتیجه تابع برابره با min+max
اما ما می خواهیم اون مین و ماکسی هم که در تابع به دست اومده یه جایی ذخیره داشته باشیم حالت اول با به صورت سلولی از سلولها
و روش دوم به صورت سلولی از آرایه ها می شه انجام داد
clear all;
function ret = myfunc(v)
global natayej;
global index;
mn = min(v);
mx = max(v);
natayej{index} = {mn , mx};
index = index + 1;
ret = min(v) + max(v);
end
global natayej;
global index;
natayej = {};
index = 1;
a = zeros(1,10);
for i = 1:10
a(i) = myfunc(rand(1,16));
end
clear all;
function ret = myfunc(v)
global natayej;
global index;
mn = min(v);
mx = max(v);
natayej(index) = [mn , mx];
index = index + 1;
ret = min(v) + max(v);
end
global natayej;
global index;
natayej = {};
index = 1;
a = zeros(1,10);
for i = 1:10
a(i) = myfunc(rand(1,16));
end
برا من با آرایه بهتره فکر کنم. ولی هر دو الآن خطا میده :
??? Undefined function or method 'myfunc' for input arguments of type 'double'.
Error in ==> test at 10
a(i) = myfunc(rand(1,16));
این ذخیره کردنها باید توی همون فانکشنی که مقادیری که میخوام ذخیره کنم باید انجام باشه.
و میخوام اینطوری باشه که مثلاً اگه دو تا مقدار میخواد ذخیره بشه و اون تابع 100 بار تکرار میشه همه ی اینها توی یه آرایه ی 100 در 2 ذخیره بشه. البته تعداد تکرار تابع دست من نیست!
بذارید دقیقتر توضیح بدم یک فایل به نام myfunc.m ایجاد کنید و داخلش تابع myfunc را بذارید و این تابع مثلا همون تابعی هست که در الگوریتم ژنتیک استفاده میشه که نهایتا مقادیر مین و ماکس توی natayej ذخیره میشه
نشد باز!
اشتباه میذارم؟
این تابعی که باید با ژنتیک اجرا بشه :
function [ p ] = sys_performance( K )
global natayej;
global index;
kp1 = K(1,1);
ki1 = K(1,2);
kd1 = K(1,3);
L1 = abs(K(1,4));
M1 = abs(K(1,5));
natayej(index) = [kp1 , ki1 , kd1 , L1 , M1 ];
index = index + 1;
set_param('exam2/FOPID1',...
'kp', num2str(kp1) ,'ki', num2str(ki1),'kd', num2str(kd1),...
'vi',num2str(-L1),'vd', num2str(M1))
simout=sim('exam2');
p = ITAE;
end
و این کد اصلی که من اجراش میکنم :
clc
clear all
tic
global natayej;
global index;
natayej = {};
index = 1;
load_system('exam2')
options=gaoptimset('PlotFcn', @gaplotbestf, 'Display','iter');
K_opt = ga(@sys_performance, 5 , [], [], [], [],...
[0.01 , 0.01 , 0.01 , 0.01 , 0.01 ] ,...
[30 , 60 , 100 , 1.2 , 1 ], [], options);
toc
این پیغام رو میده :
??? In an assignment A(I) = B, the number of elements in B and
I must be the same.
Error in ==> sys_performance at 15
natayej(index) = [kp1 , ki1 , kd1 , L1 , M1 ];
شما از همون cell استفاده کنید. اون را عمدا گذاشتم که اگه پارامترهایی که بخواهند در natayej قرار بگیرند و در صورتیکه هم اندازه نباشند به راحتی در cell جا بشن ولی وقتی که هم اندازه نباشند نمیتونن در یک آرایه جا بشن
مرسی. انجام شد.
ولی نفهمیدم از اینکه گفتید هم اندازه نباشن!
خب 5 تا پارامتر بدست میاد. که هر 5 تا هم یه مقدار عددی هستن. مگه تعداد رقمهاشونم مهمه؟
xxxxxxxxxxxxxxx
یه سوال پرسیده بودم که حلش کردم :)
آخرین ویرایش به وسیله coronaa : چهارشنبه 05 فروردین 1394 در 00:24 صبح