نوشته‌ها

شبیه سازی رفتار یک رله مغناطیسی با متلب

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

function z = out(s)
global t
i1=s(1);
x=s(2);
v=s(3);
we=s(4);
f=s(5);
%……………………………………..
xo=.003;
r=10;
k=2667;
u=5;
if t>.15
u=0;
end
m=.055;
d=4;
c=6.293e-5;
%……………………………………..
di1=(47.67)*(u-r*i1);
dx=v;
dv=((-c/2)*((i1/x)^2)-(d*v)-k*(x-xo))/m;
dwe=(u*i1-r*i1^2);
df=(-.5)*c*((i1/x)^2)*v;
%……………………………………..
z(1)=di1;
z(2)=dx;
z(3)=dv;
z(4)=dwe;
z(5)=df;
%……………………………………..
end

با توجه به ام فایل بالا می بینیم که s بعنوان یک بردار تعریف شده است, ضمن اینکه چون معادله مکانیکی حاکم بر سیستم مشتق دوم نسبت به زمان دارد دو حالت برای آن تعریف کرده ایم و اما برای معادله الکتریکی i را یک حالت در نظر گرفتیم.

برنامه اصلی در متلب نیز به صورت زیر است:

clear all
clc
global t
%%…………………………
dt=.0001;
t=0;
i1=0;
x=3e-3;
v=0;
we=0;
f=0;
s=[i1,x,v,we,f];
n=1;
c=6.293e-5;
%………………………….
while (t<.25)
A=out(s);
B=out(s+A*dt/2);
C=out(s+B*dt/2);
D=out(s+C*dt);
s=s+(A+B*2+C*2+D)*dt/6;
%………………………
if (t<.025)
s=[0,3e-3,0,0,0];
end
%………………………
n=n+1;
t=t+dt;
ii1(n)=s(1);
xx(n)=s(2);
vv(n)=s(3);
wee(n)=s(4);
ff(n)=s(5);
tt(n)=t;

end

figure
plot(tt,xx);xlabel(‘t’) ;ylabel(‘X’);
figure
plot(tt,ii1);xlabel(‘t’) ;ylabel(‘i1’);
figure
plot(tt,vv);xlabel(‘t’) ;ylabel(‘v’);
figure
plot(tt,wee);xlabel(‘t’) ;ylabel(‘we’);
figure

plot(tt,ff);xlabel(‘t’) ;ylabel(‘f’);

نتایج را در زیر مشاهده می کنیم:
matlabi_electromagnetic1
در شکل بالا تغییرات x را مشاهده می کنیم و در ادامه تغییرات جریان را می بینیم:
matlabi_electromagnetic2 matlabi_electromagnetic3 matlabi_electromagnetic4 matlabi_electromagnetic5

خلاصه مبحث آموزشی :
پیشگویی سری زمانی یک مساله مهم کاربردی است که در بسیاری از زمینه ها نظیر پیش بینی وضع هوا، اقتصاد ، کنترل و … استفاده می شود .
در این پست ما از هوش مصنوعی (شبکه عصبی ، الگوریتم ژنتیک و الگوریتم فازی) برای مدل کردن سیستم ( مساله سری زمانی ) استفاده می کنیم و این روشها را با یکدیگر مقایسه می نماییم .
مساله سری زمانی به عنوان یک مساله شناسایی سیستم در نظر گرفته شده است ، درحالیکه ورودی های سیستم مقادیر گذشته سری زمانی اند و خروجی مطلوب مقدار آینده آن می باشد .
شبکه های عصبی backpropagation ، RBF (Radial Basis Functions) و PNN (polynomial neural network ) مورد بررسی قرار گرفته و سپس مدل پیشرفته PNN یعنی GBSON (genetic-based self organizing network) که تلفیقی از الگوریتم ژنتیک و شبکه عصبی PNN می باشد مورد بررسی قرار گرفته است .
در نهایت نیز یک مدل خاص از شبکه فازی برای تحلیل مورد استفاده قرار گرفته است .
مقدمه :
یک سری زمانی مجموعه ای از مشاهدات X(t) می باشد که هر کدام در یک زمان معین استخراج شده اند .
یک سری زمانی گسسته ، سری ای است که در زمانهای گسسته نمونه برداری شده است .
سری زمانی پیوسته سری ای است که با ثبت پیوسته مشاهدات در یک دوره زمانی بدست آمده است.[1]
مثالی از یک سری زمانی در شکل (1) آمده است .
برای تحلیل داده های سری زمانی باید آن را به اجزایش تجزیه کرد .
هر جزء به عنوان یک فاکتور که در سری زمانی تاثیرگذار است در نظر گرفته میشود .
سه جزء اصلی سری زمانی مشخص شده اند .
1- Trend (تمایل) : گرایش به افزایش یا کاهش در دراز مدت را در یک سری زمانی نمایش می دهد .
2- Seasonality (فصلی) : رفتار تناوبی یک سری زمانی را در یک دوره معین از زمان نمایش می دهد .
3- Fluctuation (نوسان، تغییر) جزء بی قاعده سری زمانی می باشد . [1]
سری زمانی مکی گلاس

شکل (1) سری زمانی مکی گلاس

کاربردهای پیشگویی سری های زمانی را می توان در حوزه های تجارت ، اقتصاد ، کنترل موجودی ، پیش بینی وضع هوا ، پردازش سیگنال و کنترل و سایر زمینه ها پیدا کرد .
در این مقاله هوش مصنوعی برای حل مساله سری زمانی بکار گرفته شده است .
مساله سری زمانی به عنوان یک مساله شناسایی سیستم در نظر گرفته شده است ، درحالیکه ورودی های سیستم مقادیر گذشته سری زمانی اند و خروجی مطلوب مقدار آینده آن می باشد .
یک روش برای حل اینگونه مسائل استفاده از شبکه عصبی می باشد .
 
از میان شبکه های عصبی شبکه های عصبی TDNN و PNN بیشتر برای تشخیص سری زمانی بکار می روند در این مقاله شبکه های عصبی backpropagation ، RBF و PNN مورد بررسی قرار گرفته است و سپس برای رفع اشکالات آن از الگوریتم ژنتیک استفاده شده است و در نهایت نیز یک سیستم فازی برای حل مساله بکار گرفته شده است .

  1. سری زمانی مکی گلاس:

سری زمانی مکی گلاس با استفاده از فرمول زیر بدست می آید :
Time series prediction using neural network
این سری برای T>17 حالت آشوبگونه و اغتشاشی از خود نشان می دهد و بنابراین در مسایل پیش بینی سری های زمانی چون پیش بینی نقاط بعدی این سری مشکل می شود از این سری جهت آزمایش استفاده می شود .
[2] نمونه این سری برای نقطه شروع 8/0 X=و 25T= به صورت زیر می شود :
Time series prediction using neural network
2-شبکه های عصبی :
ایده شبکه عصبی در سال 1943 توسط مک کلوچ و پیتز ارایه شد.
این دو نفر مدل ساده نرون را ایجاد کردند که این نرون قابلیت ساخت دروازه های AND و OR را داشت .
سپس این مدل توسط دانشمندان دیگر توسعه پیدا کرد و از حالت تک نرون به شبکه ای از نرون ها توسعه یافت .
برای استفاده از یک شبکه عصبی باید ابتدا شبکه را تعلیم داد.
در سالهای گذشته ساختار های متنوعی برای شبکه های عصبی ارایه شده است.
شاید به مطالب زیر نیز علاقمند باشید:

که از مهمترین آنها می توان به شبکه های بازگشتی و feedforward اشاره کرد .
برای این شبکه ها الگوریتم های مختلف تعلیم ارایه شده اند که می توان آنها را به دو دسته نظارتی و بدون ناظر تقسیم کرد .
از جمله کاربردهای شبکه های عصبی می توان به شناخت الگوهای مرئی (صوت،چهره،تصویر)، تقریب توابع، طبقه بندی، کنترل کننده ها و پیش بینی (وضع هوا،سریهای زمانی و…) اشاره کرد.
در بخش های بعد از شبکه های عصبی گوناگون برای پیش بینی سری زمانی استفاده شده است که ابتدا نوع شبکه ، ساختار آن و سپس الگوریتم تعلیم شبکه توضیح داده شده است .
2-1 شبکه عصبی RBF :
شبکه های عصبی بطور وسیعی در مسایل سری های زمانی و پیش بینی بکار می روند ساختارها و مدلهای گوناگونی از این شبکه ها برای این گونه مسایل طراحی شده اند یکی از این شبکه های عصبی شبکه عصبی توابع پایه ای شعاعی می باشد .
این شبکه یک لایه پنهان دارد که متشکل از نرونهایی است که تابع فعالیت آنها یک تابع گوسین ، چندجمله ای ، مکعبات و … می تواند باشد .
پارامترهای شبکه عصبی RBF وزنهای بین لایه پنهان و لایه خروجی ، مراکز توابع فعالیت وشعاع توابع فعالیت می باشند .
این شبکه برای مدلسازی سیستم سری زمتنی بکار برده شده است و نتایج آن در قسمت آزمایشات با بقیه شبکه ها مقایسه شده است .
الگوریتم تعلیم شبکه عصبی RBF :
ورودی الگوریتم:
حداکثر خطای مورد نظر ، الگوهای تعلیم و شعاع نرون های لایه مخفی
مراحل:

  1. l=1 تعداد یک نرون در لایه مخفی
  2. یک الگوی تعلیم را بطور تصادفی انتخاب کرده و آن را به عنوان مرکز نرون l قرار می دهیم .
  3. محاسبه وزنهای لایه دومTime series prediction using neural network
  4. خطای شبکه به تمامی الگوهای تعلیم را بدست می آوریمTime series prediction using neural network
  5. اگر خطا از خطای مورد نظر کمتر است توقف کن
  6. در غیر اینصورت l=l+1 به گام 2 برگرد .

مزایا و معایب شبکه RBF :

  • اشکالات RBF :
  1. این شبکه برای الگوهای تعلیم خطای نسبتا کمی دارد ولی برای الگوهای تست خطا زیاد می شود
  2. شعاع r باید ابتدا تعیین شود که با تغییر r وزنها خیلی تغییر می کنند .
  3. 2هر چه تعداد نرون ها بیشتر شود تعمیم پذیری شبکه (جواب آن به داده های تست) بدتر می شود .

2-2- شبکه عصبی Backpropagation :

  • الگوریتم شبکه عصبی Backpropagation :

الگوریتم دسته ای :

  1. وزنهای اولیه شبکه را در مقادیر تصادفی کوچک قرار می دهیم .
  2. برای تمام الگوهای تعلیم P=1,2,…,p مراحل انتشار مستقیم و معکوس زیر را تکرار کن

2-1) انتشار مستقیم : ورودی Xp را به شبکه اعمال و تمام خروجیها و خالص ورودیها (net)را حساب کن .
2-2) انتشار معکوس : ابتدا خطا را حساب می کنیم سپس را حساب مي كنيم .
يعنی از لايه خروجي شروع كرده و اين محاسبات را انجام مي دهيم و براي لايه های دیگر نيز محاسبات را به صورت زير انجام مي دهیم:
2-3) مقادیر را ذخیره می کنیم .
2-4) حساسیت نسبت به تک تک الگوها را حساب کرده و همه را با هم جمع می کنیم

  1. وزنهای جدید را محاسبه می کنیم :
  2. به قدم 2 برگرد تا شرط پایان برقرار شود. (ساده ترین شرط توقف تعداد تکرار الگوریتم یا رسیدن الگوریتم به یکخطای مطلوب است )

الگوریتم تکراری نیز دقیقا مانند این روش است با این تفاوت که بعد از بدست آوردن خطای یک الگو وزنها را عوض می کنیم .
البته الگوریتم تکراری همگرایی اش سریعتر است .
1476-4598-4-29-1-lسیستم فازی :
نظريه فازی برای اولين بار در سال 1960 توسط استاد ايرانی دانشگاه کاليفرنيا، پروفسور لطفی زاده مطرح شد.
درکنترل فازی برای هر پديده يک تابع در نظر مي گيرند که ميزان تعلق آن را به يک مجموعه بيان مي کند .
در این شيوه سه مرحله وجود دارد.
ابتدا مرحله فازی سازی است که مرحله تعريف مجموعه های فازی برای متغيرهای ورودی وخروجی است.
برای تعريف اين مجموعه های فازی، بايد دانش اوليه ای از دامنه تعريف هر کدام از اين متغيرها داشته باشيم .
در مرحله بعد يا مرحله استنتاج،تعدادی قاعده فازی بوجود مي آوريم و در مرحله آخر که مرحله غيرفازی سازی نام دارد،با توجه به مقادیری که در مرحله استنتاج بدست آمده است مقداری حقيقی برای خروجی بدست مي آوريم
الگوریتم تعليم (روش جدول جستجو):

  1. مجموعه های فازیی را تعیین می کنیم که زوج های ورودی – خروجی را پوشش دهد
  2. از روی هر زوج ورودی – خروجی یک قاعده تولید می کنیم.
  3. یک درجه به هر قاعده تولید شده در گام دوم نسبت می دهیم و از بین قواعد متضاد قاعده ای که بالاترین درجه را دارا می باشد نگه می داریم. که به این ترتیب تعداد قواعد کاهش می یابد.
  4. پایگاه قواعد فازی را ایجاد می کنیم.
  5. ساخت سیستم فازی بر اساس پایگاه قواعد.

این طراحی بر اساس سیستم فازی با موتور استنتاج ضرب، فازی ساز منفرد و غیر فازی ساز میانگین مراکز به صورت زیر خواهد بود:
Time series prediction using neural network
اشکالات سیستم (روش جدول جستجو):

  1. در این روش توابع تعلق ثابت اند و به زوج های ورودی خروجی بستگی ندارند . بدین معنی که توابع تعلق با توجه به زوج های ورودی خروجی به طور بهینه ای به دست نمی آیند.
  2. پایگاه قواعد فازی در این روش ممکن است کامل نباشد که در نتیجه سیستم پاسخ خوبی به داده های تست نمی دهد.

GMDH (Group Method Data Handling) :
در اواخر دهه 1960 توسط Ivakhnenko به عنوان وسیله ای برای شناسایی ارتباطات غیرخطی بین متغیرهای ورودی و خروجی ارائه شد .
الگوریتم GMDH یک ساختار بهینه از مدل را توسط نسلهای موفق توصیفات جزئی (PD) داده که به عنوان چندجمله ای های درجه دوم با دو ورودی در نظر گرفته شده اند را ارائه می کند .
البته این الگوریتم مشکلاتی نیز دارد که بعدها این مشکلات توسط ارائه شبکه عصبی چند جمله ای تا حدودی مرتفع شده است .
تابع انتقال هرPD از فرمول زیر بدست می آید :
Time series prediction using neural network
اشکالات GMDH :
1- گرایش به ایجاد چندجمله ای کاملا پیچیده برای سیستمهای نسبتا ساده دارد .
2- به علت ساختار عمومی GMDH ( چند جمله ای دو متغیره درجه دوم ) ، گرایش به ایجاد یک شبکه (مدل) کاملا پیچیده وقتی که برای سیستمهای غیرخطی مراتب بالاتر بکار می رود دارد .
3- برای سیستمهای کمتر از سه ورودی ساختار مناسبی ندارد .
راه حل :
استفاده از شبکه عصبی چندجمله ای در این روش
GMDH-network
2-3- شبکه عصبی PNN (Polynomial neural network):
 
شبکه عصبی چندجمله ای الگوریتم جدیدی است که قابلیت انعطاف بسیار زیادی دارد به طوریکه هر گره در این شبکه هم از لحاظ تعداد ورودی (حداکثر سه ورودی) و هم از لحاظ تابع انتقال آن (حداکثر سه ورودی) می تواند متفاوت باشد .
مرتبه چندجمله ای ها در هر گره شبکه می تواند متفاوت (خطی ، درجه دوم ومکعب)باشد .
معماری این شبکه از ابتدا ثابت نیست (هم ساختار و هم پارامترهای شبکه ) اما کاملا بهینه می شود ، بطور مثال تعداد لایه ها می تواند با اضافه شدن لایه جدید اگر لازم باشد افزایش یابد .
الگوریتمهای آموزش شبکه‏های چندجمله‏ای

    • Group Method of Data Handling (GMDH)
    • Polynomial Network Training Routine (PNETTR)
    • Algorithm for Synthesis of Polynomial Network (ASPN)
    • همگی توسط A.G.Ivakhnenko معرفی شده‏اند.

ساختار کلی شبکه عصبی PNN به صورت شماتیک :
Time series prediction using neural network
الگوریتم تعلیم شبکه عصبیPNN :
ابتدا داده ها را به صورت زیر در می آوریم :
Time series prediction using neural network
برای محاسبه خروجی تخمینی ، ما برای هر جفت ورودی یک PD تشکیل می دهیم. تعداد PD ها بر اساس تعداد ورودیها می باشد .
مثلا اگر 4 ورودی داشته باشیم تعداد آنها 6 عدد می شود . پارامترهای مدل از روی حداقل خطای داده های آموزش بدست می آیند .
بعلاوه ما بهترین مدل را برای تشکیل لایه اول انتخاب می کنیم.
 
در نهایت ما PD های جدید را از روی متغیرهای میانه (Zm ها) که در تکرار جدید واقع شده اند ایجاد می کنیم .
سپس ما یک جفت از متغیرهای ورودی جدید را گرفته و عملیات را روی آن انجام می دهیم تا زمانیکه به معیار توقف برسیم .
هنگامی که لایه پایانی ساخته شد گره با بهترین عملکرد به عنوان خروجی در نظر گرفته می شود . بقیه گره های آن لایه حذف می شوند . این عملیات در لایه های قبلی تا لایه اول انجام می شود .
مراحل طراحی شبکه PNN :

  1. ابتدا متغیرهای ورودی را نرمالیزه کرده و مطابق جدول زیر آنها را تقسیم می کنیم .

X متغیرهای ورودی

خروجیY

x1 x2 ….. xN

Y

2-داده ها را به دو دسته تست و آموزش تقسیم می کنیم :

X

Y

x11 x21 ….. xN1
x12 x22 ….. xN2
.
.
.
x1ntr x2ntr ….. xNntr

Y1

Y2

.

.

.

Yntr

x11 x21 ….. xN1
x12 x22 ….. xN2
.
.
.
x1nte x2nte ….. xNnte

Y1

Y2

.

.

.

Ynte

n=nte+ntr داده آموزش برای تشکیل مدل PNN استفاده می شود .
(محاسبه ثوابت هر PD گرههای موجود در هر لایه)سپس داده تست برای ارزیابی مدل PNN استفاده می شود .
شاید به مطالب زیر نیز علاقمند باشید:

  1. انتخاب یک ساختار برای PNN :

ساختار PNN براساس تعداد ورودی ها و مرتبه PD هر لایه انتخاب می شود .
دو نوع ساختار PNN بنیادی و PNN اصلاح شده ، متمایز شده اند . هر کدام از آنها به دو دسته تقسیم می شوند : جدول زیر این دو ساختار را نشان می دهد .

  1. تعیین تعداد متغیرهای ورودی و مرتبه چندجمله ای تشکیل دهنده PD :

ما متغیرهای ورودی یک گره را ازبین N متغیر ورودی انتخاب می کنیم .
تعداد کل PD های لایه حاضر بر طبق تعداد متغیرهای ورودی انتخاب شده از گره های لایه قبل تغییر می کند .
در نتیجه تعداد گرهها برابر N!/(N-r)!r! می شود که r تعداد متغیرهای ورودی انتخاب شده است.

  1. تخمین ثوابت PD :

از رابطه زیر محاسبه می شوند :
Time series prediction using neural network
i شماره گره ، k شماره داده ntr تعداد داده آموزش ، n تعداد ورودیهای انتخابی ، m ماکسیمم درجه، n’ تعداد ثوابت تخمینی .
5- انتخاب PD با بهترین عملکرد :
هر PD توسط داده های آموزش و تست تخمین زده شده و ارزیابی می شود .
سپس ما اینها را باهم مقایسه کرده و PD هایی را که عملکرد بهتری داشته اند جدا می کنیم .
معمولا ما یک تعداد W از قبل تعیین شده از این PD ها را انتخاب می کنیم .
6-چک کردن شرط توقف :
الف- اگر خطای مرحله بعدی از خطای مرحله قبلی بزرگتر باشد .
ب-اگر تعداد لایه ها به تعداد از قبل تعیین شده توسط کاربر برسد.
7- انتخاب متغیرهای جدید برای لایه بعد.
خروجی های لایه قبل را به عنوان ورودی لایه جدید در نظر می گیریم.
مراحل 4 تا 7 را تا رسیدن به شرط توقف تکرار می کنیم .
Time series prediction using neural network
همان طور که دیده می شود ضرایب این شبکه به وسیله فرمول زیر به دست می آیند :
Time series prediction using neural network
این ضرایب به صورت زیر بدست می آیند ، همانطورکه می دانیم خروجی به صورت زیر بدست می آید:

حال برای محاسبه ضرایب مراحل زیر طی می شوند :
Time series prediction using neural network
هر چند این فرمول ضرایبی را می دهد که خطا را کاهش می دهد اما این خطا می نیمم خطا نیست و با تغییر ضرایب می توان به جوابهای بهتری دست یافت .
اما این ضرایب را چگونه می توان از میان انبوه اعداد یافت؟
یکی از راه حلها استفاده از الگوریتم ژنتیک برای بدست آوردن بهترین ضرایب جهت کاهش خطا می باشد .
حال به صورت زیر از الگوریتم ژنتیک برای بهبود ضرایب در شبکه عصبی PNN استفاده شده است :
الف – ورودیهای لایه اول را همان متغیرهای مستقل داده ورودی در نظر می گیریم .
ب – خروجی های هر لایه بهترین گره های بدست آمده توسط الگوریتم ژنتیک هستند که اینها خود ورودی های لایه بعد می شوند .
ج – ضرایب هر گره را به صورت جمعیت اولیه برای الگوریتم ژنتیک در نظر می گیریم و الگوریتم ژنتیک را برای یافتن بهترین ضرایب بکار می بریم .
پس از بدست آوردن بهترین ضرایب این گره های با بهترین ضرایب را از بقیه جدا می کنیم و ورودی را به اینها می دهیم تا خروجی گره های لایه اول بدست آید .

این خروجی ها را به عنوان ورودی لایه بعدی در نظر می گیریم .
این کار را تا زمانی که به خطای مورد نظر برسیم ادامه می دهیم .
روشی که در این تحقیق استفاده شده است به صورت زیر می باشد :
ابتدا سه گره را در نظر می گیریم .
سپس برای هر گره به ترتیب 20 جمعیت در نظر می گیریم .
هر فرد به صورت زیر در نظر گرفته می شود .
هر فرد را به عنوان یک رشته 128 بیتی در نظر می گیریم که هر 32 بیت آن مربوط به یک ضریب می باشد .
در اینجا 4 ضریب در نظر گرفته شده است .
بیت اول از هر 32 بیت به عنوان بیت علامت در نظر گرفته می شود (+ یا – ) .
2 بیت بعدی برای قسمت صحیح ضریب و مابقی بیت ها برای قسمت اعشاری در نظر گرفته می شوند .
Time series prediction using neural network
 
حال ابتدا با استفاده از روش تورنمنت (q=6) 6 فرد را انتخاب کرده دو نفر را به عنوان والد انتخاب می کنیم .
سپس عمل تقاطع را با ضریب Pc=0.95 و بعد آن عمل جهش را با ضریب Pm=.05 انجام می دهیم ، تا دو فرزند جدید ایجاد شوند . این کار را تا زمان تولید P=20 فرزند تکرار می کنیم.
حال با استفاده از روش Elitism (نخبه گرایی) بهترین فرد نسل قبل را نیز به نسل جدید منتقل می کنیم . این کار را به تعداد نسل های لازم (3500 نسل ) تکرار می کنیم .
سپس بهترین فرد نسل آخر را به عنوان ضرایب برای این گره انتخاب میکنیم و به گره بعد می رویم .
بعد از این که لایه اول تمام شد اگر به شرط توقف رسیدیم می ایستیم در غیر اینصورت به لایه بعد می رویم .
خروجی های لایه اول را به عنوان ورودی لایه بعد در نظر گرفته و همین مراحل را برای لایه بعد تا زمان رسیدن به پاسخ مطلوب ادامه می دهیم .
در کلیه محاسبات برای شبکه ها تعداد ورودی ها را 3 در نظر گرفته ایم . یعنی جمله چهارم را بر اساس سه جمله قبل مشخص می کنیم .
– نتایج بدست آمده از شبکه BP :
در اینجا از شبکه عصبی BP با ساختار 3L 15N 1L استفاده شده است که نتایج زیر بدست آمده است.
نمودار تعداد تکرار اموزش شبکه وخطای بدست امده برای داده ها:

نمودار جواب مطلوب و جواب شبکه به داده آموزش که به صورت زیر می باشد ولی به علت خطای بسیار ناچیز با چشم قابل مشاهده نیست .

خطای بدست آمده از داده آموزش:

نمودار جواب مطلوب و جواب شبکه به داده تست که به صورت زیر می باشد ولی به علت خطای بسیار ناچیز با چشم قابل مشاهده نیست .
Time series prediction using neural network
 
خطای داده تست:
Time series prediction using neural network
2- نتایج بدست آمده از شبکه RBF:
شکل زیر داده آموزش مطلوب و پاسخ شبکه به داده های ورودی را نشان می دهد.
Time series prediction using neural network
 
شکل زیر خطای شبکه نسبت به داده آموزش را نشان می دهد :
Time series prediction using neural network
نمودار جواب مطلوب و جواب شبکه RBF به داده تست که به صورت زیر می باشد :
Time series prediction using neural network
خطای داده تست:

3- نتایج بدست آمده از سیستم فازی (جدول جستجو):
شکل زیر داده آموزش مطلوب و پاسخ سیستم به داده های ورودی را نشان می دهد:

به علت خطای زیاد سیستم فازی با چشم نیز این خطا قابل مشاهده است .
شکل زیر خطای سیستم نسبت به داده آموزش را نشان می دهد : 1246/0 = Etr

نمودار جواب مطلوب و جواب سیستم فازی به داده تست که به صورت زیر می باشد :
Time series prediction using neural network
هر چند که در داده های تست سیستم فازی بهتر عمل کرده است اما باز هم خطا نسبت به شبکه عصبی زیاد است.
خطای داده تست: 032/0Ete =
Time series prediction using neural network
4- نتایج بدست آمده از شبکه عصبی PNN :
شکل زیر داده آموزش مطلوب و پاسخ سیستم به داده های ورودی را نشان می دهد:
Time series prediction using neural network
شکل زیر خطای شبکه نسبت به داده آموزش را نشان می دهد :Time series prediction using neural network
نمودار جواب مطلوب و جواب شبکه PNN به داده تست که به صورت زیر می باشد :
 

شکل زیر خطای شبکه نسبت به داده آموزش را نشان می دهد :

5- نتایج بدست آمده از شبکه عصبی GBSON:
شکل اصلی و شکل پیش بینی شده داده آموزش :

شکل زیر خطای شبکه نسبت به داده آموزش را نشان می دهد :
نمودار جواب مطلوب و جواب شبکه GBSON به داده تست :

خطای داده تست :
مقایسه عملکرد شبکه ها در پیش بینی سری زمانی

شبکه عصبی ژنتیک GBSONشبکه عصبی PNNشبکه عصبی RBFشبکه عصبی BPسیستم فازی
0023/000245/00011/00023/01246/0خطای داده آموزش
0016/000186/00031/00017/0032/0خطای داده تست
00195/00022/00022/0002/00639/0میانگین خطا

نتیجه گیری :
از لحاظ سرعت شبکه عصبی PNN بهترین سرعت را چه در مرحله آموزش و چه در مرحله تست دارا می باشد .
بهترین پاسخ برای داده آموزش را شبکه عصبی RBF دارا می باشد و بدترین پاسخ مربوط به سیستم فازی می باشد .
بهترین پاسخ برای داده تست را شبکه عصبی- ژنتیک GBSON دارا می باشد و بدترین پاسخ مربوط به سیستم فازی می باشد . البته سرعت آموزش شبکه GBSON بسیار پایین است .
از لحاظ میانگین خطا نسبت به داده تست و آموزش نیز بهترین پاسخ مربوط به شبکه GBSON می باشد .
MFILE ها :
1- برنامه نوشته شده برای شبکه BP در مطلب :

clc

clear

load(‘E:\shenasaey projeh\x’);load(‘E:\shenasaey projeh\xtr’);load(‘E:\shenasaey projeh\xte’)

load(‘E:\shenasaey projeh\ytr’);load(‘E:\shenasaey projeh\yte’);

xtr=xtr’;

ytr=ytr’;

xte=xte’;

net.trainParam.epochs = 500;

net.trainParam.goal = 0;

net.performFcn=’mse’;

net = newff(xtr,ytr,[15]);

net = train(net,xtr,ytr);

y = sim(net,xtr);

y=[x(1:3) y];

figure(1)

plot(y)

hold on

plot(x(1:300),’k’)

etr=(x(1:300)-y).^2;

figure(2)

plot(x(1:300)-y,’r’)

Etr=sqrt(sum(etr)/300)

figure(3)

yte=sim(net,xte);

plot(yte,’r’)

hold on

plot(x(301:600),’b’)

e=(x(301:600)-yte).^2;

figure(4)

plot(x(301:600)-yte,’k’)

E=sqrt(sum(e)/300)

2- برنامه نوشته شده برای شبکه RBF :

clc

clear

load(‘E:\shenasaey projeh\x’)

load(‘E:\shenasaey projeh\xte’)

load(‘E:\shenasaey projeh\xtr’)

load(‘E:\shenasaey projeh\yte’)

load(‘E:\shenasaey projeh\ytr’)

xtr=xtr’;

ytr=ytr’;

xte=xte’;

yte=yte’;

net=newrbe(xtr,ytr);

Y=[];

for i=1:297

Y =[Y sim(net,xtr(:,i))];

end

Y=[x(1,1:3) Y];

plot(x(1,1:300),’b’)

hold on

plot(Y,’k’)

figure(2)

plot(x(1,1:300)-Y,’b’)

Etr=sqrt(sum((x(1,1:300)-Y).^2)/300)

Y=[];

for i=1:300

Y =[Y sim(net,xte(:,i))];

end

figure(3)

plot(yte,’k’)

hold on

plot(Y,’b’)

Ete=sqrt(sum((yte-Y).^2)/300)

figure(4)

plot(yte-Y,’b’)

  1. برنامه نوشته شده برای سیستم فازی :

clc

clear

T=30;

x=[1.2];

delta=1;

for i=2:T

x(i)=x(i-1)/1.1;

end

for i=T+1:round(600/delta)

x(i)=(1/1.1)*(x(i-1)+0.2*x(i-T)/(1+x(i-T)^10));

end

max_x=max(x)+0.2;

min_x=min(x)-0.2;

n=4;

sin=15;

stp=(max_x-min_x)/(sin-1);

y=min_x:0.01:max_x;

cent=min_x:stp:max_x;

% for i=1:sin

% k=trimf(y,[cent(i)-stp cent(i) cent(i)+stp]);

% end

so=15;

stp_o=(max_x-min_x)/(so-1);

cent_o=min_x:stp_o:max_x;

% for i=1:so

% k=trimf(y,[cent_o(i)-stp_o cent_o(i) cent_o(i)+stp_o]);

% end

for k=1:296

for t=1:4

for i=1:sin

mu_a(i)=trimf(x(k+t-1),[cent(i)-stp cent(i) cent(i)+stp]);

end

rule(k,t)=find(mu_a==max(mu_a));

rule_d(k,t)=max(mu_a);

end

for i=1:so

mu_b(i)=trimf(x(k+4),[cent_o(i)-stp_o cent_o(i) cent_o(i)+stp_o]);

end

B(k,1)=find(mu_b==max(mu_b));

B_d(k,1)=max(mu_b);

end

D=prod(rule_d’)’.*B_d;

for i=296:-1:1

for j=i-1:-1:1

if rule(i,:)==rule(j,:)

if D(j)<D(i)

D(j)=-inf;

else

D(i)=D(j);

B(i)=B(j);

D(j)=-inf;

end

end

end

end

for i=296:-1:1

if D(i)==-inf

D(i)=[];

rule(i,:)=[];

B(i)=[];

end

end

l_rule=length(rule);

hold on;

for u=1:596

suming_s=0;

suming_m=0;

pro=ones(1,l_rule);

y=[x(u) x(u+1) x(u+2) x(u+3)];

for k=1:l_rule

for t=1:4

pro(k)=pro(k)*trimf(y(t),[cent(rule(k,t))-stp cent(rule(k,t)) cent(rule(k,t))+stp]);

end

suming_s=suming_s+pro(k)*cent_o(B(k));

suming_m=suming_m+pro(k);

end

f(u+4)=suming_s/suming_m;

end

plot(x(1,1:300),’b’)

hold on

plot(f(1,1:300),’r’)

figure(2)

plot(x(1,1:300)-f(1,1:300),’b’)

Etr=sqrt(sum((x(1,1:300)-f(1:300)).^2)/300)

figure(3)

plot(x(1,301:600),’r’)

hold on

plot(f(1,301:600),’b’)

Ete=sqrt(sum((x(1,301:600)-f(1,301:600)).^2)/300)

figure(4)

plot(x(1,301:600)-f(1,301:600),’r’)

  1. برنامه نوشته شده برای شبکه PNN :

clc

clear

load(‘E:\shenasaey projeh\x’);load(‘E:\shenasaey projeh\xte’);load(‘E:\shenasaey projeh\yte’)

load(‘E:\shenasaey projeh\ytr’);load(‘E:\shenasaey projeh\xtr’)

c=[];

[sx,lx]=size(xtr);

y_col=[ytr;yte];

zte=[]; % khoroji laye 1

ztr=[];

xpd=cell(1,3);

ff=0;preE=10^10;

while 1

ff=ff+1

t=0;

for i=1:lx-1

for j=i+1:lx

t=t+1;

xpd{t}=Xpd([xtr(:,i) xtr(:,j)]);

end

end

for k=1:3

c(k,:)=inv(xpd{k}’*xpd{k})*xpd{k}’*ytr;

end

for kk=1:297

ztr=[ztr quad(xtr(kk,:),c)];

end

for kk=1:300

zte=[zte quad(xte(kk,:),c)];

end

z=[ztr’;zte’];

E_col=[];

for k=1:3

e=0;

for jj=1:597

e=e+(y_col(jj,1)-z(jj,k))^2;

end

u=e/597;

E_col=[E_col sqrt(u)];

end

xtr=ztr’;xte=zte’;

zz=z;

z=[];

if min(preE)<=min(E_col)

break

end

preE=E_col;

ztr1=ztr;zte1=zte;

ztr=[];zte=[];

[sx,lx]=size(xtr);

xpd=[];

end

Etr=[];

for k=1:3

e=0;

for jj=1:297

e=e+(y_col(jj,1)-zz(jj,k))^2;

end

u=e/297;

Etr=[Etr sqrt(u)]

end

Ete=[];

for k=1:3

e=0;

for jj=298:597

e=e+(y_col(jj,1)-zz(jj,k))^2;

end

u=e/300;

Ete=[Ete sqrt(u)]

end

y_col=[x(1:3)’; y_col];

figure(1)

plot(y_col(1:300,1))

hold on

ztr1=ztr1′;

zte1=zte1′;

ztr=[ztr1(:,1);zte1(:,1)];

ztr=[x(1:3)’;ztr];

plot(ztr(1:300,1),’r’)

s=(y_col-ztr);

figure(2)

plot(s)

figure(3)

plot(y_col(301:600,1))

hold on

plot(ztr(301:600,1),’r’)

s=(y_col(301:600,1)-ztr(301:600,1));

figure(4)

plot(s)

5- M-FILE مربوط به آموزش شبکه عصبی – ژنتیک GBSON :

clc

clear

load(‘C:\Documents and Settings\PC\Desktop\New Folder\Dtr’)

load(‘C:\Documents and Settings\PC\Desktop\New Folder\Dte’)

x=Dtr(:,1:3); % dadeye vorodi

xte=Dte(:,1:3);yte=Dte(:,4);

[sx,lx]=size(x);ytr=Dtr(:,4); % khoroji matlob

y_col=[ytr;yte];cs=[];c_f=[];P=20;l=128;

yyte=[]; % khoroji laye

Pc=.95;Pm=.1;q=6;

a1=cell(1,3);

c=cell(1,3);

c_laye=[];

xu=cell(1,3);

for laye=1:15

E=[];

ztr_col=[];ztr=[];

aa=[];a_new=[];

n=300;

for i=1:3

a1{i}=randint(P,l); %matrice valedin

end

for node=1:3

k=node;

a=a1{node};

for g=1:3500

E=[];

i=1;

while i<5

for ii=1:P

c_f(ii,i)=2.^(-1:-1:-29)*a(ii,32*(5-i)-28:(32*(5-i)))’;

cs(ii,i)=bi2de(a(ii,32*(5-i)-30:32*(5-i)-29),’left-msb’)+c_f(ii,i); %halgheye ijade sabetha

if a(ii,32*(5-i)-31)==1

cs(ii,i)=-cs(ii,i);

end

end

i=i+1;

end

for i=1:P %halgheye be dast avardane khoroji

xpd=Xpd(x,k);

for kk=1:300

ztr=[ztr;sum(xpd(kk,:).*cs(i,:))];

end

ztr_col(:,i)=ztr;

ztr=[];

end

syy=0;

for i=1:P %halgheye be dast avardane khata

for j=1:300

syy=syy+(ztr_col(j,i)-ytr(j,1))^2;

end

E=[E;sqrt((1/n)*(syy))];

syy=0;

end

if rem(g,50)==0

g

laye

E(1:3,:)

cs(1:3,:)

end

e=E;

fd=[];

ii=0;

while ii<3

ii=ii+1;

fd=find(e==min(e));

if length(fd)>1

for j=2:length(fd)

e(fd(j,1),1)=10^5*e(fd(j,1),1);

end

end

a_e(ii,:)=a(fd(1,1),:);

[sa,la]=size(a_e);

e(fd(1,1),:)=10^5*e(fd(1,1),:);

cr=[];

if sa>2

cr=[];

for k1=1:sa

for k2=k1+1:sa

if k1~=k2

k3=1;

cu=0;

while k3<128

if a_e(k1,k3)==a_e(k2,k3)

cu=cu+1;

end

k3=k3+32;

end

if cu==4

cr=[cr k2];

end

end

end

end

end

if cr~=0

if length(cr)==3

a_e(2:3,:)=[];

ii=ii-2;

end

if length(cr)==1

a_e(cr(1),:)=[];

ii=ii-1;

end

end

fd=[];

end

for i=1:P %halgheye fitnes

f(i,1)=1/(E(i,1));

end

sum_f=sum(f(1,:));

ss=0;

m=0;

for tt=1:P/2 %halgheye tolide farzandan

o=[];

while m<2 %halgheye entekhabe 2 valed

ff=[];

for i=1:q

rd=fix(P*rand)+1;

o=[o;a(rd,:)];

ff=[ff;f(rd,1)];

end

sum_ff=sum(ff(1,:));

r=sum_ff*rand;

for i=1:q

if ss<r

ss=ss+ff(i);

end

if ss>r

aa=[aa;o(i,:)];

ss=0;

r=sum_ff*rand;

[m,vv]=size(aa);

end

if m==2

ss=0;

break

end

end

end

a_old=aa;

ri=fix((l-2)*rand)+1;

rr=rand;

if rr<Pc %halgheye entekhabe cross over

for j=ri:l

a_old(1,j)=aa(2,j);

a_old(2,j)=aa(1,j);

end

ii=i+1;

else

ii=l;

end

for j=1:2 %halgheye mutation

for i=ii:l

zz=rand;

if zz<Pm

if a_old(j,i)==1

a_old(j,i)=0;

else

a_old(j,i)=1;

end

end

end

end

a_new=[a_new;a_old];

a_old=[];

aa=[];

m=0;

end %payane GA

a=a_new;

[tss,tse]=size(a_e);

for i=1:tss % halgheye jaygozinie behtarinhaye nasle ghabl ba nasle bad

if i<4

a(i,:)=a_e(i,:);

else

break

end

end

a_e=[];

a_new=[];

ztr=[];

end

E=[];

for i=1:P % halgheye mohasebeye khorojiha

xpd=Xpd(x,k);

for kk=1:300

ztr=[ztr;sum(xpd(kk,:).*cs(i,:))];

end

ztr_col(:,i)=ztr;

ztr=[];

end

syy=0;

for i=1:P % halgheye mohasebeye khataye khorojiha

for j=1:300

syy=syy+(ztr_col(j,i)-ytr(j,1))^2;

end

E=[E;sqrt((1/n)*(syy))];

syy=0;

end

fd=find(E==min(E));

ztr(:,1)=ztr_col(:,fd(1,1));

E=[];

xu{node}=ztr;

c{node}=cs(fd(1,1),:);

ztr=[];

ztr_col=[];

end

for im=1:3

syy=0;

xdh=xu{im};

for j=1:300

syy=syy+(xdh(j,1)-ytr(j,1))^2;

end

E=[E;sqrt((1/n)*(syy))];

if E<.002

break

end

syy=0;

end

for i=1:3

x(:,i)=xu{i};

c_laye(i,:)=c{i};

end

c_col{laye}=c_laye

end

M-FILE مربوط به تست شبکه عصبی – ژنتیک GBSON در متلب :

clc

clear

load(‘C:\Documents and Settings\PC\Desktop\New Folder\Dte’);

load(‘i:\arshad\Genetic\genetic project\Gbson\tornoment\c_colbitavan62tr8001’);

xte=Dte(:,1:3);yte=Dte(:,4);E=[];

zte=[];Ecol=[];

for ij=1:4

css=c_col{1,ij};

zte_col=[];

for i=1:3 %halgheye be dast avardane khoroji

xpd=Xpd(xte,i);

for kk=1:297

zte=[zte;sum(xpd(kk,:).*css(i,:))];

end

zte_col(:,i)=zte;

zte=[];

end

syy=0;

for i=1:3 %halgheye be dast avardane khata

for j=1:297

syy=syy+(zte_col(j,i)-yte(j,1))^2;

end

E=[E;sqrt((1/297)*(syy))];

syy=0;

end

xte=zte_col;

Ecol=[Ecol E];

E=[];

end

zte1=xte(:,3);

figure(1)

plot(yte)

hold on

plot(zte1,’r’)

s=(yte-zte1);

figure(2)

plot(s)

مراجع:

1.A Design of EA-based Self-Organizing Polynomial Neural Networks using

Evolutionary Algorithm for Nonlinear System Modeling

Dong-Won Kim and Gwi-Tae Park

2. Implementation of Artificial Intelligence in the Time Series Prediction Problem, L. EKONOMOU, S.SP. PAPPAS, September 22-24, 2006

3. Time Series PredictionUsingEvolving Polynomial Neural Networks, Amalia Foka, 1999

تهیه این آموزش متلب با زحمت زیادی صورت گرفته لطفا در فضای مجازی نشر ندهید

پروژه درس شناسایی سیستم
عنوان پروژه :

شناسایی توابع انتقال ماشین DC با استفاده از پاسخ پله به کمک الگوریتم ژنتیک

 
انتخاب مدل مناسب برای سیستم
انتخاب مدل مناسب در فرآیند طراحی و شناسایی موضوع بسیار مهم می باشد.
انتخاب یک مدل اشتباه باعث انجام محاسبات اضافی و از دست دادن زمان خواهد شد.
مدل های مختلفی که عموماَ وجود دارد و از آنها جهت انجام تحقیقات استفاده می شود به صورت زیر می باشد که در زیر هر یک از مدل ها را توضیح می دهیم:
الف: مدل جعبه سیاه
ب: مدل جعبه خاکستری
ج: مدل جعبه سفید
الف) مدل جعبه سیاه
در این مدل اجزای داخلی توصیف نمی شوند و مدل مسئله را به صورت عددی و بدون زمینه فیزیکی حل می کند.
این مدل معمولاً به شکل مجموعه ای از پارامتر های انتقال و یا قوانین تجربی که خروجی مدل را به ورودی مرتبط می کند بیان می شود.
به عنوان مثال هنگامی که ترانزیستور به عنوان یک منبع جریان وابسته به جریان مدل می شود این مدل یک مدل جعبه سیاه است.
در این مدل اجزای داخلی ترانزیستور مخفی می باشند.
در چنین مدلی نسبت جریان خروجی به بیس جریان ترانزیستور برابر بهره جریان می باشد.
ب) مدل جعبه خاکستری
در مدل برخی یا تمامی مکانیزم هایی که رفتار اجزای داخلی را توصیف می کنند بیان می شود البته نه به طور کامل.
در مدل جعبه خاکستری، المان های داخلی مدل با قوانین تقریبی بیان می شوند.
مدل جعبه خاکستری ترانزیستور نسبت به حالت قبل پیچیده تر خواهد بود و برخی از عملکرد ها یا عملیات داخلی ترانزیستور را بیان می کند.
به عنوان مثال مدل Ebers Moll ترانزیستور یک مدل جعبه خاکستری می باشد. در این مدل ها نیز برخی از تقریب ها به کار گرفته شده است.
Ebers-Moll_Model_NPN
ib
ic
ie
ج) مدل جعبه سفید
در مدل جعبه سفید بیشترین مقدار جزئیات را برای شبیه سازی باید فراهم داشته باشیم و هیچ تقریبی در آن به کار نرفته است.
مدلی با چنین جزئیاتی فقط هنگامی استفاده می شود که به نتایج شبیه سازی کاملاً دقیقی نیاز باشد.
زیرا این مدل محاسبات زیادی در پی خواهد داشت.
مدل کامل جعبه سفیدی از ترانزیستور وجود ندارد. مدل Ebers Moll را نمی توان به عنوان یک مدل جعبه سفید در نظر گرفت.
برای مثال مدل جعبه سفید بایستی حرکت الکترون ها و نگه داشتن آنها توسط حفره ها در P را نشان دهد.
انتخاب بین این سه مدل بستگی جزئیات مورد نظر دارد.
شناسایی توابع انتقال ماشین DC
با استفاده از پاسخ پله به کمک الگوریتم ژنتیک
شاید به مطالب زیر نیز علاقه مند باشید:

چکیده :
در ابتدا قصد داریم کار انجام شده در مقاله را توضیح داده و سپس به بررسی شبیه سازی انجام شده توسط خودمان بپردازیم.
مقاله مورد نظر مربوط به تخمین پارامتر های شبیه سازی موتور DC با استفاده از الگوریتم ژنتیک در مقایسه با روش تخمین حداقل مربعات می باشد.
این مقاله بر اساس سیستم های تک ورودی تک خروجی استوارمی باشد.
کاری را که ما انجام داده ایم سیستم را به صورت یک سیستم چند متغییره با دو ورودی و دو خروجی در نظر گرفته ایم که توضیحات تکمیلی در ادامه آمده است.
کار انجام شده در مقاله :
دراین مقاله هدف تخمین پارامتر های دینامیکی موتور DC با استفاده از الگوریتم ژنتیک می باشد.
جهت مقایسه با روش تخمینی بر اساس الگوریتم ژنتیک ، استفاده از روش LSE مناسب به نظر می رسد.
با وجود این که تخمین با استفاده از روش LSE بر اساس تابع خطای خطی صورت گرفته است ، روش GA به آسانی می تواند به آسانی پارامتر های ناشناخته را شناسایی کرده البته با استفاده از مینیمم کردن جمع مربعات خطا.
همچنین مدل ما می تواند غیر خطی نیز باشد و در این شناسایی سیستم بون نویز و تحریک گذرا در نظر گرفته شده است.
در نهایت در این مقاله مقایسه ای بین بهینه سازی های انجام شده توسط GA و LSE انجام گرفته است و نشان داده شده است که GA لحاظ وضوح و قدرت در تخمین پارامتر ها به مراتب از سایر روش ها در در مرتبه بالاتری قرار دارد.
هنگامیکه مطالعات حالت های دینامیکی یک سیستم و یا موضوع طراحی انواع کنترل کننده ها برای یک سیتم مطرح باشد؛ توابع انتقال بهترین ابزار برای معرفی سیستم است.
از این جهت مبحث شناسایی توابع انتقال سیستم ها از جمله موضوعاتی است که امروزه مورد توجه فراوان واقع شده است.
ماشین های dc یکی از انواع ماشین های الکتریکی بوده که به لحاظ دارا بودن محدوده عملکرد وسیعی در سرعت و ولتاژ و برخورداری از مشخصات کنترلی مطلوب، کاربرد آن رو به گسترش است.
تاکنون روش های مختلفی جهت تعیین توابع انتقال ماشین dc به منظور مطالعات دینامیکی و کنترلی آن پیشنهاد شده است.
در این مقاله با استفاده از معادلات حالت ماشین dc یک تابع انتقال برای ماشین فرض شده و پارامترهای این تابع با تعیین پاسخ پله ماشین و توسعه روشی بر مبنای الگوریتم ژنتیک بدست آمده است.
این مطالعه مدل خطی نسبتا دقیقی از ماشین dc ارائه می دهد.
 
مقدمه
به منظور انجام یک تحلیل نظری از شناسایی سیستم، لازم است که فرض هایی را در نظر بگیریم.
در بعضی موارد برای توصیف، روابط ریاضی بکار می روند.
در عمل هنگامی که داده های واقعی استفاده می شود سیستم ناشناخته است و حتی می توان آن را ایده آل فرض کرد.
در این مقاله رفتار دینامیکی موتور DC با روش تخمین پارامتر های پیشنهاد شده، مطرح شده است .[1]
شناسایی سیستم عموماً شامل دو مدل می شود،1-مدل های غیر پارامتری و2-مدل های پارامتری.
مدل های غیر پارامتری، مربوط به مدل هایی می شود که با منحنی، تابع و یا جدول توصیف شده اند.
اما در بسیاری از موارد مناسب است که با مدل های پارامتری سروکار داشته باشیم.. [1]
بطور کلی شرایط آزمایشی توصیفی هستند از اینکه چگونه آزمایش شناسایی انجام می شود.
این شامل انتخاب و تولید سیگنال ورودی،بازه نمونه برداری، پیش فیلترینگ اطلاعات ابتدایی و تخمین پارامترها می شود.
قبل از گردش به سمت تخمین پارامتر های موتور دینامیکی موتور DC این نکته باید یادآوری شود که مدل سیستم بایستی ثابت باشد.
در این مقاله ، کاربردهای بهینه سازی الگوریتم ژنتیک را در روش شناسایی پارامتری معرفی می کنیم.
پارامتر های ناشناخته هنگامی که مینیمم سازی تابع خطا به پایان برسد، بدست می آیند.
برای استفاده از الگوریتم ژنتیک در مسئله تخمین پارامتر، ابتدا بایستی فرمول تابع برازندگی را مطابق با مجموع مربعات خطا بدست آورد.
الگوریتم با یک تخمین اولیه از پارامترها شروع می شود.
سپس الگوریتم رشته ای از تخمین پارامتر های جدید را بوجود می آورد.در هر مرحله، الگوریتم از تخمین های کنونی برای تولید تخمین های بعدی استفاده می کند.
2-در باره این روش
روش پیشنهادی بر اساس مراحل زیر می باشد:
الف-فرض می شود G یک سیستم LTI می باشد که مدل مشخص آن تعریف نشده می باشد(ما تنها تعداد قطبها و نوع آن را توانیم حدس بزنیم) بنابراین H(s) (تابع تبدیل تخمینی سیستم) می تواند در حوزه تبدیل لاپلاس به شکل زیر بیان شود:
ب-فرض می شود که سیستم شامل N1 قطب حقیقی و قطب مختلط باشد.
بنابراین بسط کسری شکسته H(s) به شکل زیر بدست می آید:
که در آن پارامتر های ناشناخته هستند.
ج-فرض می شود که سیستم با یک تابع پله به عنوان ورودی سیستم تحریک شود:
شکل شماره 1 .مدل فرض شده
در نتیجه پاسخ پله سیستم می تواند به شکل زیر محاسبه شود:
اگر عکس تبدیل لاپلاس H(s) موجود باشد y(t) را می توان به سادگی محاسبه کرد.
د-بعد از محاسبه y(t) پارامترهای ناشناخته(معادلات 2 و 3و4) مدل زیر قابل اجرا می باشد.
شکل2- مدل تخمینی
0<i<N ،G یک سیستم غیر قابل دسترس می باشد (تنها نقاط داده خروجی در دسترس می باشند) و y(t) تابع تخمین پارامتر های ناشناخته می باشد.
حال برای هر زمان نمونه برداری مطرح می شود.
یک عدد حقیقی و تابعی از پارامترهای ناشناخته در زمان نمونه برداری می باشد.
h(t) ازهر اطلاعاتی در رابطه با محل قطب ها یا حدس حالت دینامیکی مدل بدست می آیدو ما h(t) ویا H(s) مطابق با مدل مشخص را نداریم، بنابراین اگر مدل مشخصی در دسترس بود مسئله بسیار ساده می بود)
ه-در این مرحله هدف مینیمم کردن مربع تابع خطا و بدست آوردن پارامترهای ناشناخته می باشد.
و-به عنوان تابع برازندگی مطرح شده و با استفاده از روش بهینه سازی الگوریتم ژنتیک مینیمم می شود.
شاید به مطالب زیر نیز علاقه مند باشید:

طرح مسئله
هدف ما شبیه سازی هر موتور DC با تخمین حالت دینامیک آن می باشد.
معادلات حالت ماشین dc بصورت زیر می باشند:
که در آن جریان آرمیچر و سرعت زاویه ای روتور می باشد.
پارامتر های موتور DC می باشد که در جدول 1 شرح آن موجود می باشد.
بر اساس مرجع شماره [4] طرز عمل و استفاده ازموتور DC می تواند به صورتزیر مدل شود :
3

شکل 3 مدل دینامیکی مرتبه دوم

که در آن نسبت میرایی و فرکانس طبیعی میرا نشده و K بهره سیستم می باشد. هدف شناسایی این سه پارامتر با استفاده از حداقل مربعات خطا به صوت مدل زیر:
4

شکل 4 بلوک دیاگرام تخمین پارامتر

پارامتر های تست شده موتور را به صورت زیر در نظر بگیرید:
جدول 1
پارامتر های تست شده موتور
5
بر اساس معادلات (2) و (3) و (4) و شکل 3 ما تنها یک بخش مرتبه دوم داریم، از این رو معادله (9) به صورت زیر می باشد:
که H(s) مدلی است که قرار است پارامتر های آن تخمین زده شود.
باتوجه به معادله (9) معادلات 10 و 11 را به صورت زیر داریم :
در زیر مدل ایجار شده در محیط سیمولینک را می توانید مشاهده نمایید :
Capture
در نهایت تابع برازندگی به صورت معادله 12 در نظر گرفته می شود. پاسخ پله تست شده موتور DC به صورت زیر می باشد :

6

شکل5. پاسخ پله موتور تست شده
اکنون سعی می کنیم با استفاده از روش الگوریتم ژنتیک پارامتر های مدل ناشناخته خود را شناسایی نماییم.
که در انتهای این مقاله از تخمین LSE جهت مقایسه با این روش استفاده شده است .
توجه شود که محاسبات انجام شده بر اساس تحریک گذرا می باشد.
برای سادگی کار پارامتر های و K را پارامتر های مجهول و را به عنوان پارامتر معلوم در نظر می گیریم ().
تخمین پارامتر بر اساس الگوریتم ژنتیک
الگوریتم ژنتیک یک الگوریتم بهینه سازی تصادفی می باشد که در ابتدا با یک مکانیزم انتخاب طبیعی شروع شده و با ژنتیک تکامل می یابد.
در پایین الگوریتم تخمین پارامتر بر اساس GA توسعه داده شده که پارامتر های ناشناخته را با مینیمم کردن تابع برازندگی تخمین بزند.
اپراتور GA
مراحل عملیات انجام شده توسط اپراتور GA به صورت زیر می باشد :
تابع برازندگی به صورت معادله 12 در نظر گرفته شده است که باید عملیات بهینه سازی روی آن انجام گیرد.
عموماً در الگوریتم های بهینه سازی استاندارد تابع برازندگی را با نام تابع هدف می شناسند.
سایز جمعیتی که در هر تولید مثل صورت گرفته که البته برای این مقاله کفایت می کند ، 50 می باشد.
بهینه سازی ما همانطور که بیان شد ، شامل دو متغییر می باشد از این رو جمعیت ما می تواند در یک ماتریس قرار بگیرد.
در هر بار تولید مثل و اجرای الگوریتم ژنتیک یک سری محاسبات بر روی جمعیت جاری جهت تولید یک جمعیت جدید صورت می گیرد.
الگوریتم با ایجاد یک جمعیت اولیه تصادفی در بازه [0,2.5] به عنوان رنج اولیه شروع می شود .
در هر مرحله الگوریتم ژنتیک از جمعیت جاری برای تولید فرزندانی که در مرحله بعد قرار است محاسبات رو آنها انجام شود ، استفاده می کند.
در هر مرحله شخص با فیتنس بهتر انتخاب می شود.
بدیهی است که از روش selection استفاده شده است که عموماً روشی قوی و ساده است.
فرزندان زبده و انتخاب شده تعدادی ازافرادی هستند که در تولید مثل جاری ، زنده ماندن آنها تضمین شده است.
تعداد انتخاب ما در هر مرحله حداکثر 5 تا 10 درصد جمعیت اولیه می باشد. ملاک قطع در الگوریتم، رسیدن به جمعیت 300 می باشد.
از میوتیشن گوسین و crossover هیورستیک جهت زاد و ولد برای تولید مثل بعدی استفاده می شود.
همانطور که می دانیم میوتیشن گوسی به دو پارامتر نیازمند است. مقدار میانگین که اغلب معادل صفر است و انحراف معیار در فرایند بهینه سازی می باشد.
Crossover هیورستیک یک فرزندی را بر می گرداند که در راستای خطی قرار دارد که شامل دو والد است که با یک فاصله کوتاه از والد با فیتنس بهتر قرار گرفته است که البته در مسیر مستقیم از والد با فیتنس بد تر قرار دارد.
پارامتر نسبت چگونگی فاصله از والد را می تواند تعیین کند.
معادلات زیر رابطه بین پارامتر نسبت و فرزند در تولید نسل بعدی را نشان می دهد.
Child=parent2+R(parent1-parent2)
کهParent1 و Parent2 والدین هستند و Parent1 والدی با فیتنس بهتر می باشد و R پارامتر نسبت می باشد.
عموماً برای مدل های دینامیکی مرتبه دوم پارامتر نسبت 1.2 در نظر گرفته می شود.
از یک تابع هیبریدی جهت افزایش قدرت الگوریتم ژنتیک استفاده شده است.
تابع هیبریدی یک تابع بهینه سازی می باشد که بعد از توقف الگوریتم ژنتیک اجرا می شود و باعث بهبود مقادیر تابع فیتنس می شود.
تابع هیبریدی از نقطه نهایی الگوریتم ژنتیک به عنوان نقطه اولیه استفاده می کند و این از طریق باعث بهبود مقادیر تابع فیتنس می شود.
ما از تابع fminsearch که یک تابع مینیمم سازی در بهینه سازی است استفاده کرده ایم.
این تابع یک روش جستجوی مستقیم ارائه می دهد که عموماً در محاسبات عددی و تحلیل های گرادیانی مورد استفاده قرار نمی گیرد.
نتایج تخمین بر اساس الگوریتم ژنتیک در جدول 2 گردآوری شده است.
کار انجام شده بر اساس الگوریتم ژنتیک را با روش LSE مقایسه می کنیم.
معادله شماره 9 را در حوزه زمان به صورت زیر می توانیم بنویسیم :
بر اساس روش استفاده شده در مرجع شماره 1 (با در نظر گرفتن ضمیمه) و K بدست خواهد آمد نتایج شبیه سازی بر اساس روش LSE در جدول شماره (3) گرد آوری شده است.
نتایج شبیه سازی
برای تقریب پارامتر ها سه مرحله در نظر گرفته شده است و هر مرحله شامل پارامتر های تخمین زده شده می باشد.
شکل های مدل تخمین زده شده بر اساس تخمین پارامترها و خطای مدل تخمین زده شده و تست موتور بر اساس شکل 4 رسم شده است.
9
جدول 2 نتایج تقریب بر اساس الگوریتم ژنتیک
10
شکل 6- مرحله 1 پاسخ پله مدل تخمینی و خطا
11
شکل 7- مرحله 2 پاسخ پله مدل تخمینی و نیز خطا
12
جدول 3 نتایج تقریب بر اساس LSE
13
شکل 9 مرحله 1 – پاسخ پله مدل تخمینی و نیز خطا
14
شکل 10- مرحله 2 پاسخ پله مدل تخمینی
15
شکل 11- مرحله 3 پاسخ پله مدل تخمینی و نیز خطا
مقایسه ی تخمین بر اساس الگوریتم ژنتیک و تخمین LSE
اختلاف بین تخمین به روش الگوریتم ژنتیک و تخمین به روش حداقل مربعات خطا هنگامی که تعداد داده ها کاهش یابد، مشهود خواهد بود.
نتایج شبیه سازی نشان می دهد که دقت بالا در الگوریتم حداقل مربعات هنگامی حاصل خواهد شد که تعداد نقاط داده ها افزایش یابد و زمان نمونه برداری کاهش یابد.
با تعداد نقاط داده یکسان نتایج حاصل از تخمین بوسیله GA و LSE با تعداد نقاط داده N=20 و N=40 در شکل های 12 و 13 و 14 و 15 نشان داده شده است .
جداول 4و 5 وضوح کار انجام شده از هردو روش را نشان می دهد.
ملاحظه 1- درصد خطای بهره به صورت زیر نشان داده می شود:
16
ملاحظه2- فاکتور شکل دهی به صورت زیر تعریف می شود :
17
توجه :
و بهره اصلی در دسترس نیستند اما ما پارامتر های موتور DC که در جدول 1 آمده است را به کار خواهیم برد.
18
جدول شماره 4 مقایسه میان الگوریتم ژنتیک و روش حداقل خطا برای N=20 , 40
19
جدول شماره 5 مقایسه دقت دو روش برای N=20,40
20
شکل 12 – تخمین بر اساس روش الگوریتم ژنتیک برای N=20 (دقت 93.94%)
21
شکل 13- تخمین بر اساس روش حداقل مربعات برای N=20 (دقت 10.76%)
22
شکل 14- تخمین بر اساس الگوریتم ژنتیک برای N=40 (دقت 98.74%)
23
شکل 15- تخمین بر اساس روش حداقل مربعات برای N=40 (دقت 44.5%)
نتیجه گیری :
در این مقاله حالت دینامیک موتور DC با استفاده از دو روش GA وLSE توصیف شده است.
با توجه به توانایی روش بهینه سازی توسط GA در یافتن نقطه بهینه سراسری و نیاز به دقت بالا در تخمین پارامتر ها ، روش پیشنهادی در تخمین offline پارامتر ها GA خواهد بود.
روش GA با تعداد نقاط کمتر همان دقت روش LSE را دارا خواهد بود .
دقت در تخمین پارامتر ها مخصوصاً پارامتر که در شناسایی حالت دینامیکی بسیار مهم می باشد. با این روش امکان پذیر است.
بر خلاف روش LSE روش تخمین پارامتر ها بوسیله GAرا بر همه سیستم های LTI که پارامتر های غیر خطی اند می توان بکار برد.
ضمیمه:
24
25
هسته اصلی برنامه انجام شده در مقاله

clc

close all

clear all

T=input(‘enter sampel Time :’)

max=.1/T;

disp(‘ maximom Data point is =’)

M=sprintf(‘%f’, max)

N=input(‘Enter Number of data points(your number must be less than M):’)

save T

save N

aw=120;

options=gaoptimset(‘PopulationSize’,30,’MutationFcn’, @mutationgaussian,’CrossoverFcn’, @crossoverscattered,’Generations’,aw,’StallGenLimit’,50,’StallTimeLimit’,50,’HybridFcn’,@fminsearch);

[x,c] = ga(@susp_ga,2,options );

clc

c

K=x(1)

Z=x(2)

sim(‘Dc_motor’,[0 .1]);

plot(t,y);

title(‘step response of tested motor’);

figure;

plot(t,y1);

title(‘step response of estimated motor’);

figure;

plot(t,y);

hold on;

plot(t,y1,’r’)

legend(‘step response of tested motor’,’step response of estimated motor’);

figure;

plot(t,e);

title(‘error’);

زیر برنامه مربوط به بخش شبیه سازی:

function F = susp_ga(x)

load T

load N

K=x(1);

Z=x(2);

simopt = simset(‘solver’,’ode45′,’SrcWorkspace’,’Current’);

% Initialize sim options

sim(‘Dc_motor’,[0 .1],simopt);

F =sum( (y(1:N)-y1(1:N)).^2 );

در ادامه کار انجام شه توسط خودمان برای توسعه مقاله مذکور را بیان می کنیم :
سیستم ما دارای دو ورودی و دو خروجی می باشد.
ورودی ها ولتاژ و گشتاور بوده و خروجی آن سرعت و جریان ورودی می باشد.
بنابراین سیستم ما دارای 4 تابع تبدیل به صورت زیر می باشد.

برای بدست آوردن داده های مورد نیاز در آزمایشگاه به صورت زیر عمل می کنیم :
داده های مورد نیاز برای بدست آودن تابع تبدیل در صورتیکه ورودی ولتاژ باشد و خروجی سرعت .
در حالت بی باری به موتور یک پله ولتاژ اعمال کرده و سرعت را اندازه گیری می کنیم.
در این حالت باید توجه داشت که چون ولتاژ ناگهانی به موتور اعمال شده است دامنه جریان ورودی زیاد می باشد ، بنابراین باید ولتاژ ورودی به اندازه ای باشد که جریان از جریان نامی موتور فراتر نرود.
داده های مورد نیاز برای بدست آودن تابع تبدیل در صورتیکه ورودی ولتاژ باشد و خروجی جریان.
در حالت بی باری به موتور یک ورودی پله ولتاژ اعمال کرده و جریان را اندازه گیری می کنیم.
داده های مورد نیاز برای بدست آودن تابع تبدیل در صورتیکه ورودی گشتاور باشد و خروجی جریان.
ابتدا موتور را به یک ژنراتور DC کوپل می کنیم. نوع ژنراتور DC تحریک مستقل می باشد.
برای اعمال یک پله گشتاور به موتور ، به ژنراتور یک بار مقاومتی وصل می کنیم.
با وصل شدن بار مقاومتی یک گشتاور مقاوم به محور ژنراتور اعمال شده و چون موتور و ژنراتور به یکدیگر کوپل می باشند، گشتاور به موتور نیز اعمال می شود.
در این حالت باید جریان ورودی موتور را اندازه گیری نماییم.
داده های مورد نیاز برای بدست آودن تابع تبدیل در صورتیکه ورودی گشتاور باشد و خروجی سرعت .
مانند حالت قبل عمل کرده و این بار سرعت را اندازه گیری می کنیم.
در زیر نمودار های پاسخ سیستم به ورودی های مختلف را می توانید مشاهده کرده و پاسخ ناشی از تابع تبدیل نیز به روش GA برای مقایسه در روی همان نمودار رسم شده است :
شکل 1: پاسخ پله در صورتیکه ورودی گشتاور باشد و خروجی جریان
شکل 2: پاسخ پله در صورتیکه ورودی گشتاور باشد و خروجی سرعت
شکل 3: پاسخ پله در صورتیکه ورودی ولتاژ باشد و خروجی جریان آرمیچر
شکل 4: پاسخ پله در صورتیکه ورودی ولتاژ باشد و خروجی سرعت روتور
با توجه به شکل های بالا توابع تبدیل پیشنهاد شده به صورت زیر می باشند:
1
3
برای بدست آوردن ضرایب هر کدام از توابع تبدیل بایستی یک منحنی را بر منحنی بدست آمده از نتایج آزمایشگاهی برازش نمود.
با توجه به مزایای روش GA که در بالا بیان شد در برابر LSE در این پروژه از GA برای برازش منحنی استفاده شده است.
برنامه اصلی شامل چهار زیر برنامه و دو فایل شبیه سازی می باشد.
با اجرای برنامه اصلی در هر مرحله زیر برنامه های مربوط به هر تابع تبدیل فراخوانی شده ، نتایج آزمایشگاهی در برنامه بارگزاری شده و شبیه سازی مربوطه انجام می شود.
منحنی حاصل از نتایج شبیه سازی بایستی بر منحنی حاصل از نتایج آزمایشگاهی منطبق باشد.
این کار با تغییر پارامتر های تابع تبدیل توسط الگوریتم ژنتیک و تعریف تابع هدف به صورت مجموع مربعات خطا در هر نقطه شبیه سازی برای نتایج حاصل از شیبه سازی و نتایج آزمایشگاهی انجام خواهد شد.
در پایان یادآوری می شود :
ابزار استفاده شده در آزمایشگاه برای نمونه برداری از ولتاژ و جریان دستگاه Power Analyzer می باشد.
این دستگاه از طریق پورت سریال به کامپیوتر متصل می شود ، نرم افزار مربوط به این دستگاه که در زیر شکل آن را مشاهده می نمایید به همراه دستگاه ارائه می گردد.
22
هسته اصلی برنامه قسمت توسعه داده شده توسط خودمان :

clc

close all

clear all

disp(‘******************************************************************************************’)

disp(‘In this part VOLTAGE is a input and VELOCITY is a output’)

disp(‘ z ‘)

disp(‘H(s)=————- ‘)

disp(‘ p1*s+p2 ‘)

aw=100;

options = gaoptimset(‘display’,[],’PopulationSize’,50,’MutationFcn’, @mutationgaussian,’CrossoverFcn’, @crossoverscattered,’Generations’,aw,’StallGenLimit’,50,’StallTimeLimit’,100,’HybridFcn’,@fminsearch);

[x,c] = ga(@GAVW,3,options );

z=x(1)

p1=x(2)

p2=x(3)

sim(‘Step_res2’,[0 5]);

figure(1)

plot(Res(:,1),Res(:,2));

load VW

hold on

plot(Res(1:500,1),w(1:500),’red’)

disp(‘******************************************************************************************’)

disp(‘In this part TORQUE is a input and CURRENT is a output’)

disp(‘ z ‘)

disp(‘H(s)=————- ‘)

disp(‘ p1*s+p2 ‘)

aw=100;

options = gaoptimset(‘PopulationSize’,50,’MutationFcn’, @mutationgaussian,’CrossoverFcn’, @crossoverscattered,’Generations’,aw,’StallGenLimit’,50,’StallTimeLimit’,100,’HybridFcn’,@fminsearch);

[x,c] = ga(@GATI,3,options );

z=x(1)

p1=x(2)

p2=x(3)

sim(‘Step_res2’,[0 5]);

figure(2)

plot(Res(:,1),Res(:,2));

load TI

hold on

plot(Res(1:500,1),I(1:500),’red’)

disp(‘******************************************************************************************’)

disp(‘In this part VOLTAGE is a input and CURRENT is a output’)

disp(‘ z1*s+z2 ‘)

disp(‘H(s)=————— ‘)

disp(‘ S^2+p1*S+p2 ‘)

aw=100;

options = gaoptimset(‘PopulationSize’,50,’MutationFcn’, @mutationgaussian,’CrossoverFcn’, @crossoverscattered,’Generations’,aw,’StallGenLimit’,50,…

‘StallTimeLimit’,100,’HybridFcn’,@fminsearch);

[x,c] = ga(@GAVI,5,options );

z1=x(1)

z2=x(2)

p1=x(4)

p2=x(5)

sim(‘Step_res3’,[0 5]);

figure(3)

plot(Res3(:,1),Res3(:,2));

load VI

hold on

plot(Res3(1:500,1),I(1:500),’red’)

disp(‘******************************************************************************************’)

disp(‘In this part TORQUE is a input and VELOCITY is a output’)

disp(‘ z1*s+z2 ‘)

disp(‘H(s)=————— ‘)

disp(‘ S^2+p1*S+p2 ‘)

aw=20;

options = gaoptimset(‘PopulationSize’,50,’MutationFcn’, @mutationgaussian,’CrossoverFcn’, @crossoverscattered,’Generations’,aw,’StallGenLimit’,…

50,’StallTimeLimit’,100,’HybridFcn’,@fminsearch,’TolFun’,1e-10);

[x,c] = ga(@GATW,5,options );

z1=x(1)

z2=x(2)

p1=x(4)

p2=x(5)

simopt = simset(‘solver’,’ode23s’,’SrcWorkspace’,’Current’);

sim(‘Step_res3’,[0 5],simopt);

figure(4)

plot(Res3(:,1),Res3(:,2));

load TW

w(0,0)=0;

hold on

plot(Res3(1:500,1),w(1:500),’red’)

زیر برنامه شماره 1: مربوط به تابع تبدیل شماره 1 – ورودی ولتاژ –خروجی سرعت

function F = VW(x)

load VW

z=x(1);

p1=x(2);

p2=x(3);

simopt = simset(‘solver’,’ode23s’,’SrcWorkspace’,’Current’);

sim(‘Step_res2’,[0 5],simopt);

F =sum((Res(1:500,2)-w(1:500)).^2);

زیر برنامه شماره 2 – ورودی ولتاژ و خروجی جریان

function F = VI(x)

load VI

%

% K=x(1);

% Z=x(2);

% wn=x(3);

z1=x(1);

z2=x(2);

% z3=x(3);

p1=x(4);

p2=x(5);

% p3=x(6);

simopt = simset(‘solver’,’ode45′,’SrcWorkspace’,’Current’);

% Initialize sim options

% sim(‘Step_res’,[0 1],simopt);

sim(‘Step_res3’,[0 5],simopt);

F =sum((Res3(1:500,2)-I(1:500)).^2);

زیر برنامه شماره 3 – ورودی گشتاور – خروجی سرعت

function F = TW(x)

load TW

w(1,1)=0;

z1=x(1);

z2=x(2);

p1=x(4);

p2=x(5);

simopt = simset(‘solver’,’ode23s’,’SrcWorkspace’,’Current’);

% Initialize sim options

% sim(‘Step_res’,[0 1],simopt);

sim(‘Step_res3’,[0 5],simopt);

F =sum((Res3(1:500,2)-w(1:500)).^2);

زیر برنامه شماره 4- ورودی گشتاور و خروجی جریان

function F = TI(x)

load TI

z=x(1);

p1=x(2);

p2=x(3);

simopt = simset(‘solver’,’ode45′,’SrcWorkspace’,’Current’);

% Initialize sim options

% sim(‘Step_res’,[0 1],simopt);

sim(‘Step_res2’,[0 5],simopt);

F =sum((Res(1:500,2)-I(1:500)).^2);

خروجی های برنامه در پنجره command

****************************************************************************In this part VOLTAGE is a input and VELOCITY is a output

z

H(s)=————-

p1*s+p2

Optimization terminated: average change in the fitness value less than options.TolFun.

z =

11.4848

p1 =

0.0111

p2 =

0.0153

****************************************************************************

In this part TORQUE is a input and CURRENT is a output

z

H(s)=————-

p1*s+p2

Optimization terminated: average change in the fitness value less than options.TolFun.

z =

0.9221

p1 =

0.0334

p2 =

0.1094

****************************************************************************

In this part VOLTAGE is a input and CURRENT is a output

z1*s+z2

H(s)=—————

S^2+p1*S+p2

Optimization terminated: maximum number of generations exceeded.

z1 =

339.7156

z2 =

14.0418

p1 =

11.5382

p2 =

26.3814

****************************************************************************

In this part TORQUE is a input and VELOCITY is a output

z1*s+z2

H(s)=—————

S^2+p1*S+p2

Optimization terminated: maximum number of generations exceeded.

z1 =

3.6132

z2 =

1.4062

p1 =

-1.0285

p2 =

-0.3210

پاسخ پله جریان آرمیچر به گشتاور ناشی از نتایج آزمایشگاهی و تابع تبدیل بدست آمده از الگوریتم ژنتیک (قرمز نتایج آزمایشگاهی و آبی خروجی الگوریتم ژنتیک)

پاسخ پله سرعت روتور به گشتاور ناشی از نتایج آزمایشگاهی و تابع تبدیل بدست آمده از الگوریتم ژنتیک (قرمز نتایج آزمایشگاهی و آبی خروجی الگوریتم ژنتیک)

پاسخ پله جریان آرمیچر به ولتاژ ورودی از نتایج آزمایشگاهی و تابع تبدیل بدست آمده از الگوریتم ژنتیک (قرمز نتایج آزمایشگاهی و آبی خروجی الگوریتم ژنتیک)

پاسخ پله سرعت روتور به ولتاژ ورودی ناشی از نتایج آزمایشگاهی و تابع تبدیل بدست آمده از الگوریتم ژنتیک (قرمز نتایج آزمایشگاهی و آبی خروجی الگوریتم ژنتیک)
 
 
 
 

پروژه کامپیوتری درس فرایند تصادفی با متلب
با یک آموزش متلب دیگر با برنامه آماده آن در خدمت شما هستیم:

پاسخ الف:
 
از حلقه ی FOR برای بدست آوردن مقادیر 1000 نمونه خروجی استفاده می کنیم.
ابتدا سیگنال ورودی X[n] گوسی با میانگین صفر را میسازیم

for i=1:2

sigma=1-alfa(i)*alfa(i);

x=normrnd(mu,sigma,1000,1);

y(1)=0;

براساس X[n] و با توجه به مقادیر آلفا که 0.3 و0.95 است سیگنال خروجی Y[n] را در متلب برای 1000نمونه تعریف می کنیم:

for n=2:1000

y(n)=alfa(i)*y(n-1)+x(n);

و در نهایت با دستور stem برای هر دو مقدار آلفا، 1000نمونه خروجی را رسم میکنیم.

figure

stem(y)

xlabel(‘n’)

ylabel(‘y’)

title([‘alfa=’,num2str(alfa(i))])

grid on

figure

stem(x)

xlabel(‘n’)

ylabel(‘x’)

title([‘alfa=’,num2str(alfa(i))])

grid on

end


پاسخ ب:
خود همبستگی، همبستگی متقابل یک سیگنال با خودش است. بطور غیر رسمی، خود همبستگی، همسانی بین مشاهدات به عنوان تابعی از زمان جدایی بین آنها میباشد.
همانند قسمت الف با استفاده از حلقه ی for سیگنال ورودی X[n] و براساس آن سیگنال خروجی Y[n] را برای 1000 نمونه خروجی می سازیم

clc

clear all

close all

alfa=[0.3 0.95];

mu=0;

for i=1:2

sigma=1-alfa(i)*alfa(i);

x=normrnd(mu,sigma,1000,1);

y(1)=0;

for n=2:1000

y(n)=alfa(i)*y(n-1)+x(n);

end

سپس با استفاده از دستور Xcorr که برای توابع خودهمبستگی می باشد،توابع خود همبستگی ورودی و خروجی زیر را تعریف میکنیم:

Rx=xcorr(x,x);

Ry=xcorr(y,y);

و با استفاده از دستور stem خروجی ها را برای هر دو مقدار آلفا بدست می آوریم:

figure

stem(Rx)

xlabel(‘n’)

ylabel(‘Rx’)

title([‘alfa=’,num2str(alfa(i))])

grid on

figure

stem(Ry)

xlabel(‘n’)

ylabel(‘Ry’)

title([‘alfa=’,num2str(alfa(i))])

grid on

end

بامشاهده خروجی ها میبینیم که:
خود همبستگی یک سیگنال نویز سفید با پیوستگی زمانی، یک پیک شدید خواهد داشت (بوسیله یک تابع دلتای دیراک نشان داده شده) در و برای همه دیگر مطلقا صفر خواهد بود.

پاسخ ج:
همانند دو قسمت قبل،X[n] و Y[n] تعریف شده وتابع همبستگی هم تعریف می کنیم و خروجی ها رسم می شوند:

clc

clear all

close all

alfa=[0.3 0.95];

mu=0;

for i=1:2

sigma=1-alfa(i)*alfa(i);

x=normrnd(mu,sigma,1000,1);

y(1)=0;

for n=2:1000

y(n)=alfa(i)*y(n-1)+x(n);

end

Rxy=xcorr(x,y);

figure

stem(Rxy)

xlabel(‘n’)

ylabel(‘Rxy’)

title([‘alfa=’,num2str(alfa(i))])

grid on

end


پاسخ د:

دستور pwelch(x) مربوط به تابع چگالی است که استفاده کردم و قسمت اول کد همانند قسمت های قبلی انجام شده:

clc

clear all

close all

alfa=[0.3 0.95];

mu=0;

for i=1:2

sigma=1-alfa(i)*alfa(i);

x=normrnd(mu,sigma,1000,1);

y(1)=0;

for n=2:1000

y(n)=alfa(i)*y(n-1)+x(n);

end

figure

pwelch(x)

ylabel(‘Sx’)

title([‘alfa=’,num2str(alfa(i))])

grid on

end


دستور متلب

syms x

g=1/(x^3-(3/4)*x-0.5);


شکل خودتابع

t1=taylor(g, x,-0.5, ‘Order’, 2);

t1=-4

ezplot(t1,[-1,1]);hold on


شکل بسط تیلور مرتیه دوم در نقطه 0.5-

t2=taylor(g, x,1.1, ‘Order’, 2);

==============================================

t2 =

264500/3 – 80000*x

ezplot(t2,[-1,1]);

نمودار بسط تیلور تابع در نقطه 1.1

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

Theorem 2: Consider a differentiable function . Suppose at a point we have:

(a) then is a STATIONARY point (and of special interest in optimization).

(b) and then the function takes a MINIMA at x = x*

(c) and then the function takes a MAXIMA at x = x*

طبق این قضیه ریشه های مشتق اول تابع یک نقطه stationary می باشد که یا مینیم محلی می باشد یا ماکزیمم محلی

[x1,x2]=meshgrid(-0.5:0.1:0.5,-0.5:0.1:0.5)

z=exp(10) + x1*exp(10) – 5*x2*exp(10);

mesh(x1,x2,z)


دو نقطه طبق شکل نقطه stationary می باشد. (0.5و0.5-) نقطه مینیم تابع می باشد و (0.5-و0.5) نقطه ماکزیمم تابع می باشد.
شکل زیر منحنی درجه دوم تابع اصلی می باشد که دارای یک نقطه ماکزیمم و بی نهایت نقطه می نیمم می باشد
. نقطه (0.05-و0.5) یک نقطه ماکزیمم بوده و یکی از نقاط می نیممم( 0.5و0.5-) می باشد.که هردو نقاط stationary تابع می باشد.

هردو نقاط در دوتابع اصلی و تابع تقریب زده شده یکی می باشد.

%==============================================%

%initialization مقدار دهی اولیه

a=[-1 1]

b=[1 1]

%================================================

%Dsfine Function تعریف خود تابع

syms x1 x2

f=3.5*x^2-6*x1*x2-x2^2; تابع گزینه الف

X=[x1 x2]

%====================================================

%First Directional Derivative مشتق جهت دار درجه اول

g=gradient(f,X)

dd=(a/sqrt(a(1)^2+a(2)^2))*g

s=subs(dd,X,b)

s1=double(s) مقدار مشتق جهت دار درجه اول

%=========================================================

%Secend Directional Derivative مشتق جهت دار درجه دوم

gg=gradient(dd,X)

v=(a/sqrt(a(1)^2+a(2)^2))*gg;

ss=subs(v,X,b)

s2=double(ss) مقدار مشتق جهت دار درجه دوم

%==============================================%

%initialization مقدار دهی اولیه

a=[-1 1]

b=[1 1]

%================================================

%Dsfine Function تعریف خود تابع

syms x1 x2

f=5*x^2-6*x1*x2+5*x2^2+4*x1+4*x2; تابع گزینه الف

X=[x1 x2]

%====================================================

%First Directional Derivative مشتق جهت دار درجه اول

g=gradient(f,X)

dd=(a/sqrt(a(1)^2+a(2)^2))*g

s=subs(dd,X,b)

s1=double(s) مقدار مشتق جهت دار درحه اول

%=========================================================

%Secend Directional Derivative مشتق جهت دار درجه دوم

gg=gradient(dd,X)

v=(a/sqrt(a(1)^2+a(2)^2))*gg;

ss=subs(v,X,b)

s2=double(ss) مقدار مشتق جهت دار درجه دوم

%==============================================%

%initialization مقدار دهی اولیه

a=[-1 1]

b=[1 1]

%================================================

%Dsfine Function تعریف خود تابع

syms x1 x2

f=4.5*x^2-2*x1*x2+3*x2^2+2*x1-1*x2; تابع گزینه الف

X=[x1 x2]

%====================================================

%First Directional Derivative مشتق جهت دار درجه اول

g=gradient(f,X)

dd=(a/sqrt(a(1)^2+a(2)^2))*g

s=subs(dd,X,b)

s1=double(s) مقدار مشتق جهت دار درحه اول

%=========================================================

%Secend Directional Derivative مشتق جهت دار درجه دوم

gg=gradient(dd,X)

v=(a/sqrt(a(1)^2+a(2)^2))*gg;

ss=subs(v,X,b)

s2=double(ss) مقدار مشتق جهت دار درجه دوم

%==============================================%

%initialization مقدار دهی اولیه

a=[-1 1]

b=[1 1]

%================================================

%Dsfine Function تعریف خود تابع

syms x1 x2

f=-0.5*(7*x^2+12*x1*x2+-2*x2^2); تابع گزینه الف

X=[x1 x2]

%====================================================

%First Directional Derivative مشتق جهت دار درجه اول

g=gradient(f,X)

dd=(a/sqrt(a(1)^2+a(2)^2))*g

s=subs(dd,X,b)

s1=double(s) مقدار مشتق جهت دار درحه اول

%=========================================================

%Secend Directional Derivative مشتق جهت دار درجه دوم

gg=gradient(dd,X)

v=(a/sqrt(a(1)^2+a(2)^2))*gg;

ss=subs(v,X,b)

s2=double(ss) مقدار مشتق جهت دار درجه دوم

%=====================================================

syms x

f=x^4-0.5*x^2+1; تعریف تابع

%====================================================

f1=diff(f); مشتق تابع حهت بدست اوردن ریشه ها

pretty(f1)

%======================================================

crit_pts = solve(f1) نقاط اکسترمم تابع

%====================================================

xd=-1:0.1:1;

yd=subs(f,x,xd);

plot(xd,yd);

hold on

plot(double(crit_pts), double(subs(f,crit_pts)),’ro’);

title(‘Maximum and Minimum of f’);

text(-4.8,5.5,’Local minimum’);

text(-2,4,’Local maximum’)

hold off;

grid

xlabel(‘x’);ylabel(‘y’)


نفاط اکسترمم بدست امده بعد اجرای برنامه

(a) then is a STATIONARY point (and of special interest in optimization).

(b) and then the function takes a MINIMA at x = x*

(c) and then the function takes a MAXIMA at x = x*


syms x1 x2

f=(x1+x2)^4-12*x1*x2+x1+x2+1

g=gradient(f,[x1,x2])

S=solve(‘ 4*(x1 + x2)^3 – 12*x2 + 1′,’ 4*(x1 + x2)^3 – 12*x1 + 1′)

S=[S.x1 S.x2];

S=double(S)


این سه نقطه دقیقا همان سه نقطه بالایی هستند که از خروجی برنامه بدست امد. حال برای تشخیص اینکه کدام ماکزیمم و کدام مینیم و یا کدام زینی هست به طریق زیر عمل میکنیم

هسیان تابع به صورت زیر می باشد

syms x1 x2

f=(x1+x2)^4-12*x1*x2+x1+x2+1

g=gradient(f,[x1,x2])

S=solve(‘ 4*(x1 + x2)^3 – 12*x2 + 1′,’ 4*(x1 + x2)^3 – 12*x1 + 1′)

S=[S.x1 S.x2];

S=double(S)

h=hessian(f,[x1,x2])

AP1=double(h,[x1,x2], S(1,:)) بررسی نقطه اول

AP2=double(h,[x1,x2], S(2,:))بررسی نقطه دوم

AP3=double(h,[x1,x2], S(3,:)) بررسی نقطه سوم

برای بررسی نقطه (0.5655و0.5655) باید چهارپارامترA,B,C,D را حساب کنیم نقطه AP1 این ماتریس را نشان میدهد.طبق زیر هر جهارتا مثبت می باشد. دلتا برای این ماتریس برابر است با منفی دترمینان ماترس هسیان تابع که برابر است با 224.3328- که یک عدد منفی می باشد بناربراین نقطه بالایی مینیمم نسبی تابع می باشد.

برای بررسی نقطه (0.6504-و0.6504-) باید چهارپارامترA,B,C,D را حساب کنیم نقطه AP2 این ماتریس را نشان میدهد.طبق زیر هر جهارتا مثبت می باشد. دلتا برای این ماتریس برابر است با منفی دترمینان ماترس هسیان تابع که برابر است با .343.4389- که یک عدد منفی می باشد بناربراین نقطه بالایی مینیمم نسبی تابع می باشد.

برای بررسی نقطه (0.850و0.850) باید چهارپارامترA,B,C,D را حساب کنیم نقطه AP3 این ماتریس را نشان میدهد.طبق زیر پارامتر Aر مثبت می باشد. دلتا برای این ماتریس برابر است با منفی دترمینان ماترس هسیان تابع که برابر است با .135.6828 که یک عدد مثبت می باشد بناربراین نقطه بالایی نقطه زینی تابع می باشد.

پیدا کردن مقادیر سری تیلور در سه نقطه

t1=(taylor(f, [x1,x2],S(1,:), ‘Order’, 2));

t1=subs(t1,[x1,x2],S(1,:));

t1=double(t1)

t2=(taylor(f, [x1,x2],S(2,:), ‘Order’, 2));

t2=subs(t2,[x1,x2],S(2,:));

t2=double(t2)

t3=(taylor(f, [x1,x2],S(3,:), ‘Order’, 2));

t3=subs(t3,[x1,x2],S(3,:));

t3=double(t3)

نمودار بسط تیلور به صورت یک صفحه می باشد که به صورت زیر است

clc

clear

%fx=cx-sum(log(b-ax)) m=100, n=20

P= [ 6 -2

-2 6];

q=[-1

-1];

r=0;

n=size(P,1)

x=[0 ;0]

%—————————Fx

Fx=0.5*x’*P*x+q’*x+r

%—————————Grad_Fx

Grad_Fx=P*x+q

g=0;

for j=1:n

if abs(Grad_Fx(j,1))>g

g=abs(Grad_Fx(j,1));

co=j

end

end

%————————-

jj=1;

fx(jj)=Fx

x1(jj,:)=x;

cc(jj)=jj

ng(jj)=norm(Grad_Fx);

while norm(Grad_Fx)>0.01

t=1

alpha=0.6

beta=.95

e=zeros(n,1);

e(co)=1;

Delta_x=-(Grad_Fx).*e

y=x+t.*Delta_x

%————————-Fx(x+t.dita_x)

Fy=0.5*y’*P*y+q’*y+r

%————————backtracking

while 0.5*y’*P*y+q’*y+r>0.5*x’*P*x+q’*x+r+alpha.*t.*Grad_Fx’*Delta_x

t=beta.*t;

y=x+t.*Delta_x

jj

tt(jj)=t

end

%———————————updating: x

x=x+t.*Delta_x

%———————————updating: f(x) and gradient

Fx=0.5*x’*P*x+q’*x+r

%—————————Grad_Fx

Grad_Fx=P*x+q

g=0;

for j=1:n

if abs(Grad_Fx(j,1))>g

g=abs(Grad_Fx(j,1));

co=j

end

end

%———————————

jj=jj+1;

cc(jj)=jj

fx(jj)=Fx

x1(jj,:)=x;

ng(jj)=norm(Grad_Fx)

end

Grad_Fx

cc

x1

fx

%plot(cc,log10(fx))

plot(x1(:,1),x1(:,2),’r-o’)

[X1,X2]=meshgrid(-0.4:0.01:0.4,-0.4:0.01:0.4);

f=3*X1.^2+3*X2.^2-2*X1*X2-X1-X2;

hold on

contour(X1,X2,f)

xlabel(‘x’);ylabel(‘y’)

grid


clc

clear

a=2;b=2

x=[a; b]’%4.*ones(n,1)

%—————————

syms x1 x2 y1 y2

Fxx=9*x1^4+4*x2^4-90*x1^3-40*x2^3+6*x1^3*x2+8*x1*x2^3-11*x1^2*x2^2+236*x1^2+106*x2^2+30*x1^2*x2+80*x1*x2^2+303*x1*x2-20*x1-20*x2+52;

Grad_Fx=gradient(Fxx,[x1,x2]);

Hs_Fx=hessian(Fxx,[x1,x2]);

%—————————

x=[a;b]

Fx=double(subs(Fxx,[x1,x2],[a,b]))

Grad_Fx=double(subs(Grad_Fx,[x1,x2],[a,b]));

Hs_Fx=double(subs(Hs_Fx,[x1,x2],[a,b]))

%————————-

jj=1;

fx(jj)=Fx

xx1(jj,:)=x;

cc(jj)=jj

ng(jj)=norm(Grad_Fx);

while ng(jj)>0.001

t=1

alpha=0.8

beta=0.1

Delta_x=-inv(Hs_Fx)*Grad_Fx;

y=x+t*Delta_x

c=y(1);d=y(2);

%————————-

Fyy=9*y1^4+4*y2^4-90*y1^3-40*y2^3+6*y1^3*y2+8*y1*y2^3-11*y1^2*y2^2+236*y1^2+106*y2^2+30*y1^2*y2+80*y1*y2^2+303*y1*y2-20*y1-20*y2+52;

Fy=double(subs(Fyy,[y1,y2],[c,d]))

%————————backtracking

while Fy>Fx+alpha.*t.*Grad_Fx’*Delta_x

t=beta.*t;

y=x+t.*Delta_x

c=y(1);d=y(2);

Fy=double(subs(Fyy,[y1,y2],[c,d]))

jj

tt(jj)=t

end

%———————————updating: x

x=x+t.*Delta_x

a=x(1);b=x(2)

%———————————updating: f(x) and gradient

% Fx=9*x1^4+4*x2^4-90*x1^3-40*x2^3+6*x1^3*x2+8*x1*x2^3-11*x1^2*x2^2+236*x1^2+106*x2^2+30*x1^2*x2+80*x1*x2^2+303*x1*x2-20*x1-20*x2+52;

%—————————

Grad_Fx=gradient(Fxx,[x1,x2]);

Hs_Fx=hessian(Fxx,[x1,x2]);

Fx=double(subs(Fxx,[x1,x2],[a,b]));

Grad_Fx=double(subs(Grad_Fx,[x1,x2],[a,b]));

Hs_Fx=double(subs(Hs_Fx,[x1,x2],[a,b]));

%———————————

jj=jj+1;

cc(jj)=jj

fx(jj)=Fx

xx1(jj,:)=x;

ng(jj)=norm(Grad_Fx)

end

Grad_Fx

cc

xx1

fx

hold on

%plot(cc,log10(fx))

hold on

plot(xx1(:,1),xx1(:,2))

grid

xlabel(‘x’);ylabel(‘y’)

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

X0=[2,2]

X=

X0=[10,10]

X=




روش نیوتن

clc

clear

a=10;b=10

x=[a; b]’%4.*ones(n,1)

%—————————

syms x1 x2 y1 y2

Fxx=x1^4+x2^4+4*x1^3*x2+4*x1*x2^3+6*x1^2*x2^2-12*x1*x2+x1+x2+1;

Grad_Fx=gradient(Fxx,[x1,x2]);

Hs_Fx=hessian(Fxx,[x1,x2]);

%—————————

x=[a;b]

Fx=double(subs(Fxx,[x1,x2],[a,b]))

Grad_Fx=double(subs(Grad_Fx,[x1,x2],[a,b]));

Hs_Fx=double(subs(Hs_Fx,[x1,x2],[a,b]))

%————————-

jj=1;

fx(jj)=Fx

xx1(jj,:)=x;

cc(jj)=jj

ng(jj)=norm(Grad_Fx);

while ng(jj)>0.001

t=1

alpha=0.8

beta=0.1

Delta_x=-inv(Hs_Fx)*Grad_Fx;

y=x+t*Delta_x

c=y(1);d=y(2);

%————————-

Fyy=y1^4+y2^4+4*y1^3*y2+4*y1*y2^3+6*y1^2*y2^2-12*y1*y2+y1+y2+1;

Fy=double(subs(Fyy,[y1,y2],[c,d]))

%————————backtracking

while Fy>Fx+alpha.*t.*Grad_Fx’*Delta_x

t=beta.*t;

y=x+t.*Delta_x

c=y(1);d=y(2);

Fy=double(subs(Fyy,[y1,y2],[c,d]))

jj

tt(jj)=t

end

%———————————updating: x

x=x+t.*Delta_x

a=x(1);b=x(2)

%———————————updating: f(x) and gradient

% Fx=9*x1^4+4*x2^4-90*x1^3-40*x2^3+6*x1^3*x2+8*x1*x2^3-11*x1^2*x2^2+236*x1^2+106*x2^2+30*x1^2*x2+80*x1*x2^2+303*x1*x2-20*x1-20*x2+52;

%—————————

Grad_Fx=gradient(Fxx,[x1,x2]);

Hs_Fx=hessian(Fxx,[x1,x2]);

Fx=double(subs(Fxx,[x1,x2],[a,b]));

Grad_Fx=double(subs(Grad_Fx,[x1,x2],[a,b]));

Hs_Fx=double(subs(Hs_Fx,[x1,x2],[a,b]));

%———————————

jj=jj+1;

cc(jj)=jj

fx(jj)=Fx

xx1(jj,:)=x;

ng(jj)=norm(Grad_Fx)

end

Grad_Fx

cc

xx1

fx

hold on

%plot(cc,log10(fx))

hold on

plot(xx1(:,1),xx1(:,2))

grid

xlabel(‘x’);ylabel(‘y’)


روش کاهشی تند steepest descent

clc

clear

%fx=cx-sum(log(b-ax)) m=100, n=20

a=-0.5;b=-0.5

x=[a; b]’%4.*ones(n,1)

n=2;

%—————————

syms x1 x2 y1 y2

Fxx=x1^4+x2^4+4*x1^3*x2+4*x1*x2^3+6*x1^2*x2^2-12*x1*x2+x1+x2+1;

Grad_Fx=gradient(Fxx,[x1,x2]);

Hs_Fx=hessian(Fxx,[x1,x2]);

%—————————

x=[a;b]

Fx=double(subs(Fxx,[x1,x2],[a,b]))

Grad_Fx=double(subs(Grad_Fx,[x1,x2],[a,b]));

Hs_Fx=double(subs(Hs_Fx,[x1,x2],[a,b]))

g=0;

for j=1:2

if abs(Grad_Fx(j,1))>g

g=abs(Grad_Fx(j,1));

co=j

end

end

%————————-

jj=1;

fx(jj)=Fx

xx1(jj,:)=x;

cc(jj)=jj

ng(jj)=norm(Grad_Fx);

while norm(Grad_Fx)>0.01

t=1

alpha=0.5

beta=.95

e=zeros(n,1);

e(co)=1;

Delta_x=-(Grad_Fx).*e

y=x+t.*Delta_x

c=y(1);d=y(2);

%————————-

Fyy=y1^4+y2^4+4*y1^3*y2+4*y1*y2^3+6*y1^2*y2^2-12*y1*y2+y1+y2+1;

Fy=double(subs(Fyy,[y1,y2],[c,d]))

%————————backtracking

while Fy>Fx+alpha.*t.*Grad_Fx’*Delta_x

t=beta.*t;

y=x+t.*Delta_x

c=y(1);d=y(2);

Fy=double(subs(Fyy,[y1,y2],[c,d]))

jj

tt(jj)=t

end

%———————————updating: x

x=x+t.*Delta_x

a=x(1);b=x(2)

%———————————updating: f(x) and gradient

% Fx=9*x1^4+4*x2^4-90*x1^3-40*x2^3+6*x1^3*x2+8*x1*x2^3-11*x1^2*x2^2+236*x1^2+106*x2^2+30*x1^2*x2+80*x1*x2^2+303*x1*x2-20*x1-20*x2+52;

%—————————

Grad_Fx=gradient(Fxx,[x1,x2]);

Hs_Fx=hessian(Fxx,[x1,x2]);

Fx=double(subs(Fxx,[x1,x2],[a,b]));

Grad_Fx=double(subs(Grad_Fx,[x1,x2],[a,b]));

Hs_Fx=double(subs(Hs_Fx,[x1,x2],[a,b]));

g=0;

for j=1:n

if abs(Grad_Fx(j,1))>g

g=abs(Grad_Fx(j,1));

co=j

end

end

%———————————

jj=jj+1;

cc(jj)=jj

fx(jj)=Fx

xx1(jj,:)=x;

ng(jj)=norm(Grad_Fx)

end

Grad_Fx

cc

x1

fx

%plot(cc,log10(fx))

plot(xx1(:,1),xx1(:,2),’r-o’)

[x1,x2]=meshgrid(-2:0.1:-0.4,-2:0.1:-0.4);

f=x1^4+x2^4+4*x1^3*x2+4*x1*x2^3+6*x1^2*x2^2-12*x1*x2+x1+x2+1;

hold on

contour(x1,x2,f)

axis([-0.75 -0.45 -0.7 -0.4])

grid

xlabel(‘x’);ylabel(‘y’)

grid

نقطه شروع برابر گرفتیم با (0.5-و0.5-)

Mathworks Matlab یک نرم افزار قوی جهت دانشجویان و محققین رشته های ریاضی و مهندسی است که اولین نگارش آن در دانشگاه نیومکزیکو و استانفورد در سال ١٩٧٠ در جهت حل مسائل تئوری ماتریسها، جبر خطی و آنالیز عددی بوجود آمد و امروزه صدها هزار کاربر دانشگاهی، آکادمیک، صنعتی و … در زمینه های بسیار متنوع مهندسی نظیر ریاضیات پیشرفته، جبر خطی، مخابرات، مهندسی سیستم و … با MATLAB بعنوان یکی از اولین محیط های محاسباتی و تکنیکی که قادر به حل مسائل آنهاست، آشنا می شوند.
ریاضیات، زبان مشترک بسیاری از علوم مهندسی است. ماتریس ها، معادلات دیفرانسیل، رشته های عددی اطلاعات، ترسیمات و گراف ها از لوازم اصلی بکار گرفته در ریاضیات و نیز در MATLAB هستند.
متلب اکنون یک سیستم مؤثر و زبان برنامه نویسی بسیاری از محاسبات علمی و مهندسی است.

 

قابلیت های نرم‌افزار Mathworks Matlab :

  • مدل‌سازی فیزیكی
  • تحلیل‌های آماری
  • منطق فازی
  • واقعیت مجازی
  • پردازش تصویر
  • طراحی فیلتر
  • تحلیل‌های اقتصادی
  • شبكه‌های عصبی
  • طراحی سیستم‌های مخابراتی
  • و …

 
دانلود نرم افزار متلب 2017a

 دانلود نرم افزار (پارت 1) (حجم 3.9 گیگابایت)

 
 دانلود نرم افزار (پارت 2) (حجم 3.9 گیگابایت)
 
 دانلود نرم افزار (پارت 3) (حجم 1.9 گیگابایت)

 
پسورد: www.sarzamindownload.com

 ( پسورد را تايپ کنيد )

توضیحات نصب نرم افزار:
ابتدا دقت داشته باشید آنتی ویروس شما حتما غیرفعال باشد. حال، فایل های دانلودشده خود را از حالت فشرده خارج کنید. فایل ISO بدست آماده را توسط نرم افزار Daemon Tools اجرا کنید و شروع به نصب کنید. برای نصب مراحل زیر را انجام دهید:
۱) در ابتدای نصب، گزینه ی “Use a File Installation Key” را انتخاب کنید و عبارت زیر را قرار دهید (لطفا از کپی نمودن خودداری کرده و سریال زیر را به صورت دستی در نرم افزار تایپ کنید):
به مسیر پوشه سریال بروید و از فایل متنی این کد را استخراج نمایید
2) محصولاتی که تمایل به نصب آن ها را دارید، انتخاب کنید
۳) پس از اتمام نصب، نرم افزار را اجرا نکنید! تمامی فایل های موجود در پوشه “crack” را در محل نصب نرم افزار جایگزین کنید.
۴) دقت داشته باشید که برای شما Shortcut بر روی دسکتاپ ایجاد نمی شود. برای اجرای نرم افزار، به محل نصب نرم افزار و سپس به فولدر bin مراجعه کنید.
%installdir%\bin\matlab.exe
5) در اولین اجرای نرم افزار، از شما درخواست سریال می شود. گزینه ی “activate without internet” را انتخاب کرده و سپس فایلی که در فولدر crack شما با نام “lic_standalone.dat” می باشد را انتخاب کرده و به نرم افزار به عنوان لایسنس خود معرفی کنید.
 
جهت دانلود نسخه های دیگر نرم افزار متلب لینک های زیر را ببینید:
دانلود نرم افزار متلب MATHWORKS MATLAB 2017B
دانلود نرم افزار متلب MATHWORKS MATLAB 2016B
دانلود نرم افزار متلب MATHWORKS MATLAB 2016A
دانلود نرم افزار متلب MATHWORKS MATLAB R2018A

میلیون ها مهندس و دانشمند در سراسر جهان از MATLAB® برای تجزیه و تحلیل و طراحی سیستم ها و محصولاتی که دنیای ما را تبدیل می کنند استفاده می کنند. MATLAB مبتنی بر ماتریس طبیعی ترین روش برای بیان محاسبات ریاضی است. گرافیک داخلی تجسم  آن را آسان و به دست آوردن بینش از داده ها را شامل می شود. محیط دسکتاپ متلب آزمایشات را به اکتشاف و کشف دعوت می کند. این ابزار و قابلیت های MATLAB دقیقا تست شده و طراحی شده اند تا با هم کار کنند.
MATLAB به شما کمک می کند که ایده های خود را فراتر از دسکتاپ قرار دهید. شما می توانید تجزیه و تحلیل خود را بر روی مجموعه داده های بزرگتر اجرا کنید و به خوشه ها و ابرها تقلیل پیدا کنید. کد MATLAB را می توان با زبان های دیگر ادغام کرد، که شما را قادر می سازد الگوریتم ها و برنامه های کاربردی را در وب، شرکت ها و سیستم های تولید قرار دهید.
انجام پروژه متلب توسط سایت متلبی با بالاترین کیفیت و کوتاه ترین زمان
 
شروع کنید
اصول اولیه کار با متلب
مبانی زبان
نحو، اپراتورها، انواع داده ها، نمایه سازی آرایه و دستکاری
ریاضیات
جبر خطی، تمایز و انتگرال، تبدیل فوریه و سایر ریاضیات
گرافیک
شکلهای دو و سه بعدی، تصاویر، انیمیشن، تجسم
ورود داده ها و تجزیه و تحلیل
ورود و صدور، پیش پردازش، اکتشاف بصری
برنامه نویسی اسکریپت ها و توابع
فایل برنامه، جریان کنترل، ویرایش، اشکال زدایی
ساختمان برنامه
توسعه برنامه با استفاده از برنامه طراح، GUIDE یا یک گردش کار برنامه نویسی
توسعه نرم افزار پیشرفته
مدلسازی حلقه کنترل ولتاژ ژنراتور سنکرون
برنامه نویسی شی گرا؛ عملکرد کد تست واحد رابط های خارجی به Java®، C / C ++، .NET و سایر زبان ها
محیط دسکتاپ
اولویت ها و تنظیمات، تفاوت پلت فرم
سخت افزار پشتیبانی شده
پشتیبانی از سخت افزار های شخص ثالث، مانند وب کم، Arduino®، و سخت افزار Raspberry Pi ™

منبع:
mathworks[.]com