SlideShare a Scribd company logo
1 of 42
Download to read offline
عنوان پروژه: كنترل بهينه وضعيت فضاپيماي صلب توسط 
چرخ عكس العملي در زواياي بزرگ 
استاد: پروفسور پورتاکدوست 
دانشجو: شکيب شريفيان ٨۶٢٠٣٩۶۴ 
پاييز ٨٧
فهرست 
بخش 1 
-1 تعريف پروژه 1 -1 
5 DP در LQR -2 روش -1 
6 H -3-1 سياست محاسبه 
7 H= در 1 ρ با تغيير پارامتر R -4 محاسبه -1 
بخش 2 
16 N بر حسب مقدار Steady state gain factor رسم نمودارهاي 
بخش 3 
23 ρ رسم تغييرات بخش كنترلي تابع هزينه در ازاي تغيير ضريب 
پيوست 
25 كد برنامه 1 
27 كد برنامه 2 
29 كد برنامه 3 
31 كد برنامه 4 
33 كد برنامه 5 
35 كد برنامه 6 
كد برنامه 7 و زير برنامه ها 36
-1-1 تعريف پروژه: 
در اين پروژه سيستم ما يك فضاپيماست كه با توجه به معادلات 1 سعي مي كنيم تا بـا اسـتفاده از 
چرخ هاي عكس العملي(شكل 1) و توليد نرخ مومنتوم زاويه اي در هر لحظه هـم متغييرهـاي حالـت 
سيستم را در يك مسير خواسته شده به پيش ببريم و هم بـر روي هزينـه تبـ ديل ايـن متغييرهـاي 
حالت كه طبق معادله 2 داده شده نظارت داشته باشيم(هدف كنترل بهينه در اين پروژه). 
& 
J I J J h h u 
( ) ( ) 
− Ω = − Ω Ω − Ω + Ω − 
1 1 1 2 3 2 3 3 2 2 3 1 
& 
J I J J h h u 
( ) ( ) 
− Ω = − Ω Ω − Ω + Ω − 
2 2 2 3 1 3 1 1 3 3 1 2 
& 
J I J J h h u 
( ) ( ) 
− Ω = − Ω Ω − Ω + Ω − 
3 3 3 1 2 1 2 2 1 1 2 3 
& & 
h u I for i 
2 
1 = + ρ ∫ + + 
f [ ( ) ( ) 2 ( )] 
&& & & & && 
t f 
T + T = I + 4 ( I − I ) + ( I − I − I ) 
+ h − h − h − h − 
I 
&& & 
I I I 
− − + 
&& & && & && & 
T T I I I h I I 
3 ( ) ( 2 ) ( 2 ) 
+ = + − + + − − + − − + 
&& & & & && 
T T I I I I I I h h h h I 
١ 
١- چرخ عکس العملی - شکل ١ 
(١) 
(٢) 
خطي شده معادلات ( 1) به صورت زير است: 
(٣) 
φ ω φ ω ψ ω ψ φω θ 
dx cx x y z y z x wz wz wy wy xy 
ψ ω ψ ω θ 
xz xz yz 
θ ω θ φ ω ψ ω φ ψ ω φ ω ψ 
dy cy y x z wy xy yz 
+ = + + − + − + − + − − 
ψ ω φ ω ψ ω φ ψω θ 
dz cz z z x y y x wz wx wy wy yz 
2 
0 
&& && 
I I I 
φ φ ω φ 
xz xz xz 
0 0 0 0 
2 
0 0 
2 
0 0 
2 
0 0 
2 
0 
0 
2 
0 
0 0 0 0 0 
2 
0 
2 
( ) ( ) 
2 
− − − 
1,2,3 
= − Ω = 
i i i i 
J t u t u t u t dt 
3 
0 
2 
2
⎧ 
⎪ ⎪ ⎪ ⎪ ⎪ ⎪ 
⎨ 
x = 
x 
J x J J x J J J x u x 
0 4 ( ) ( ) 
ω ω ω 
= + − + − − + − 
x = 
x 
J x J J x u 
0 3 ω 
( ) 
= + − + 
x = 
x 
J x J J J x J J x u x 
0 ( ) ( ) 
= + + − + − + + 
x & 
= 
u 
x & 
u 
٢ 
براي شروع بايد معادلات را در فضاي حالت بنويسيم، كه در اين مورد متغيرهاي حالت و كنترل را 
بفرم زير تعريف مي كنيم: 
(۴) 
φ 
⎫ 
⎪ ⎪ ⎪ ⎪ ⎪ ⎪ 
& 
φ 
θ 
& 
θ 
ψ 
⎬ 
⎪ ⎪ ⎪ ⎪ ⎪ ⎪ 
⎭ 
⎧ 
⎪ ⎪ ⎪ ⎪ ⎪ ⎪ 
⎨ 
⎪ ⎪ ⎪ ⎪ ⎪ ⎪ 
⎩ 
= 
⎫ 
⎪ ⎪ ⎪ ⎪ ⎪ ⎪ 
⎬ 
⎪ ⎪ ⎪ ⎪ ⎪ ⎪ 
⎭ 
⎪ ⎪ ⎪ ⎪ ⎪ ⎪ 
⎩ 
h 
1 
2 
3 
x 
1 
2 
3 
4 
5 
6 
7 
8 
9 
h 
h 
x 
x 
x 
x 
x 
x 
x 
x 
ψ 
& 
; 
⎫ 
⎪⎭ 
⎪⎬ 
⎧ 
= 
⎪⎩ 
⎪⎨ 
⎫ 
⎪⎭ 
⎪⎬ 
u 
⎧ 
⎪⎩ 
⎪⎨ 
& 
h 
1 
& 
2 
3 
3 
2 
3 
h 
h 
u 
u 
& 
1 2 
1 2 0 
3 4 
2 
2 4 0 
5 6 
7 1 
= 
8 2 
9 3 
2 3 1 0 2 3 1 6 1 0 9 
2 1 5 3 0 7 
2 
1 3 3 2 
2 
3 6 0 3 1 2 2 0 
x & 
= 
u 
& 
& 
& 
& 
& 
& 
ω ω ω 
براي اين منظور بايد تعدادي از پارامترها را بعنوان متغييرهاي حالت در نظـر بگيـريم كـه در اينجـا 
بهتر است از هم ان متغييرهاي حالتي كـه در پـروژه محـدوديت دارنـد ، اسـتفاده كنـيم و مـاتريس 
كنترلي هم طبق خواسته پروژه براساس روابط زير مي باشند: 
(۵) 
[ ] 
⎤ 
⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ 
⎦ 
⎡ 
⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ 
⎣ 
0 0 0 
1/ 0 0 
0 0 0 
0 1/ 0 
0 0 0 
0 0 − 
1/ 
− 
− 
= 
1 0 0 
0 1 0 
0 0 1 
3 
2 
1 
J 
J 
J 
B
A J B J J 
⎡ 
− − 
A = ω 
J − 
J 
B = ω 
J − J − 
J 
C = ω 
J − 
J 
D J J J 
٣ 
متغييرهاي حالت نيز طبق روابط زير مي باشند: 
(۶) 
[ ] 
0 1 0 0 0 0 0 0 0 
/ 0 0 0 0 ω / 0 0 ω 
/ 
1 0 1 0 1 
0 0 0 1 0 0 0 0 0 
C J 
0 0 / 0 0 0 0 0 0 
2 
− 
0 0 0 0 0 1 0 0 0 
0 / 0 0 / 0 / 0 0 
0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 
0 0 0 0 0 0 0 0 0 
4 ( ) 
( ) 
0 2 3 1 
3 ( ) 
( ) 
ω 
= + − 
0 3 1 2 
( ) 
2 1 
2 
0 
1 3 
2 
0 
2 3 
2 
0 
3 3 0 3 
E J J 
D J E J J 
A 
= − 
⎤ 
⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ 
⎦ 
⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ 
⎣ 
− − − 
= 
ω 
ω 
همانگونه ك ه مشاهده مي شود معادلا ت سيستم م ا غير خطي مي باشند، پس دو كار مـي تـوان انجـام 
داد: 
بصورت غيرخطي Bellman's recursive -1 حل معادلات با روش 
LQR -2 خطي كردن معادلات و استفاده از روش 
با توجه به تعداد زياد متغييرهاي حالت و كنترلي، حجم بالاي محاسباتي (كـد برنامـه نوشـته شـده ، 
ولي زمان اجراي بر نامه بالا مي باشد) به سختي امكان پياده سازي با اين روش وجـود دارد، بنـابراين 
به حل معادلات مربوطه مي پـردازيم، بـراي ايـن منظـور LQR با خطي سازي معادلات و استفاده از 
ابتدا بايد معادلات 3كـه بـه فـرم فـضاي حالـت در آمـده انـدرا از فـرم پيوسـته بـه گسـسته تبـديل 
( كنيم(معادلات 7
x k + = x k + 
dt x k 
x k + = x k − dt + ω J − J x k + ω J − J − J x k + u k − 
ω 
x k J 
x k + = x k + 
dt x k 
x k + = x k − dt ω 
J − J x k + 
u k J 
x k + = x k + 
dt x k 
x k + = x k − dt J + J − J x k + J − J x k + u k + 
x k J 
x k + = x k + 
dt u k 
x k x k dt u k 
f + + Δ + = Σ− 
2 
1 J t k t u k u k u k 
A J B J J 
⎡ 
− − 
A = ω 
J − 
J 
B = ω 
J − J − 
J 
C = ω 
J − 
J 
D J J J 
٤ 
(٧) 
( 1) ( ) ( ( )) 
2 
1 1 2 
( 1) ( ) ( 4 ( ) ( ) ( ) ( ) ( ) ( )) / 
2 2 0 
( 1) ( ) ( ( )) 
2 
3 3 4 
2 3 1 0 2 3 1 6 1 0 9 1 
( 1) ( ) ((3 ( ) ( ) ( )) / ) 
4 4 0 
( 1) ( ) ( ( )) 
5 5 6 
1 3 3 2 2 
( 1) ( ) (( ( ) ( ) ( ) ( ) ( ) ( )) / ) 
( 1) ( ) ( ( )) 
7 7 1 
( + 1) = ( ) + 
( ( )) 
8 8 2 
( 1) ( ) ( ( )) 
9 9 3 
2 1 5 3 0 7 3 
2 
6 6 0 3 1 2 2 0 
x k + = x k + 
dt u k 
ω ω ω 
( ) ( ( ) ( ) 2 ( ) 
ρ (٨) 
3 
2 
2 
1 
0 
N 
k 
= 
با مرتب كردن متغييرهاي حالت و كنترلي نهايتـا مـاتريس هـاي حالـت و كنتـرل مـا بفـرم زيـر در 
مي آيند: 
(٩) 
[ ] 
1 1 0 0 0 0 0 0 0 
/ 1 0 0 0 ω / 0 0 ω 
/ 
1 0 1 0 1 
0 0 1 1 0 0 0 0 0 
C J 
0 0 / 1 0 0 0 0 0 
2 
− 
0 0 0 0 1 1 0 0 0 
0 / 0 0 / 1 / 0 0 
0 0 0 0 0 0 1 0 0 
0 0 0 0 0 0 0 1 0 
0 0 0 0 0 0 0 0 1 
4 ( ) 
( ) 
0 2 3 1 
3 ( ) 
( ) 
ω 
= + − 
0 3 1 2 
( ) 
2 1 
2 
0 
1 3 
2 
0 
2 3 
2 
0 
3 3 0 3 
E J J 
D J E J J 
A 
= − 
⎤ 
⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ 
⎦ 
⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ 
⎣ 
− − − 
= 
ω 
ω
T T 
F N − K = − R + B P K − B B P K − 
A 
P K = A + BF N − K P K − A + BF N − K F N − K RF N − K + 
Q 
u N K F N K x N K 
( ( ) ( ) 1 
2 
J xT t Hx t x t Qx t u t Ru t dt 
٥ 
:DP در LQR -2-1 روش 
از آخرين مرحله به مرحله اول شروع به حركت كرده و مقادير بهينه كنترلي DP در كليه روش هاي 
با توجه به هزينه محاسبه مي شوند. 
براي حالت خطي است كه به سرعت به جـواب مـي رسـ د و DP نيز يكي از روش هاي LQR قاعده 
بجاي يك تاريخچه كلي از همه حالتها و كنترل هاي P(K) و F(N-K) شما با داشتن يك ماتريس 
موجود در هر لحظه امكان بدست آوردن هزينه و كنترل مينيمم را داريد. 
و P(K) و F(N-K) در صورتي كه معادله حالت ما در حالت گسسته بـه فـرم زيـر باشـد، مقـادير 
و تابع هزينه از دسته روابط 10 بدست مي آيند. min(U) 
(١٠) 
x(k +1) = Ax(k) + Bu(k) 
( ) [ ( 1) ] ( 1) 
( ) [ ( )] ( 1)[ ( )] ( ) ( ) 
( − ) = ( − ) ( − 
) 
( ) ( ) ( ) 
( ) 1 
2 
* 
, 
1 
T 
J J N K x N K P K x N K 
N K N 
T T 
= − = − − 
∗ 
− 
− 
از روي تابع هزينه گسسته شده 11 داريم. R و Q ،H با توجه به مقادير ماتريس 
(١١) 
t f 
= + ∫ + 
t 
T T 
f f 
0 
( ( ) ( ) ( ( ) ( )) 
2 
1 
با دقت روي تابع هزينه متوجه مي شويم كه: 
-1 بيشتر هزينه صرف كم كردن فرامين كنترلي است 
هزينه و مقادير كنترلي تحت تاثير قرار مي گيرند. H -2 با تعاريف متفاوت از 
بيشترين تلاش بـراي رسـيدن بـه دقـت بـالا در مقـدار نهـايي ،H -3 در صورت بالا بردن اثر 
متغييرهاي حالت در حالت نهايي است و در مقابل توجه به هزينه اين عمل كمتر خواهد بود. 
بيـشترين تـلاش بـراي رسـيدن بـه كمتـرين هزينـه در مقـدار ،R -4 در صورت بالا بردن اثر 
متغييرهاي حالت در حالت نهايي است و در مقابل به دقت كمتر توجه خواهد شد. 
در نتيجه مقدار نسبي اين ضرايب ماتريسي است كه نشان دهنده توجه مـا بـراي به ينـه كـردن 
هزينه كل نسبت به آن پارامتر مي باشد.
٦ 
:H -3-1 سياست محاسبه 
به گونـه اي كـه هـر دو H راه حل ما براي ايجاد يك تعادل، استفاده از يك حلقه براي محاسبه 
عامل محدوديت در تلاش فرا مين كنترلي و دقت متغييرهاي حالت در نظر گرفته شـوند، يعنـي 
هاي گوناگون تابع هزينه محاسبه شده و تـا زمـاني كـه تمـام شـرايط و محـدوديت هـاي -H با 
كوچـك و H فرامين كنترلي بر آورده نشوند، حلقه متوقف نخواهد شد؛ براي اين كـار يكبـار از 
بـا مقـادير H نزديك صفر شروع به حركت به مقادير بالا كرده و بلافاصله بعـد از يـافتن اولـين 
بدست آيد (كـد برنامـه 1). مقـدار H كوچك به سمت صفر حركت مي كنيم تا تقريب دقيقي از 
1)، كـه مقـادير كنترلـي و وضـعيتي مـا در - شكل 2 )H= بدست آمده برابر است با 0.15944 
1 ديــده مــي شــوند(كــد برنامــه 3)، در ايــن وضــعيت گرچــه تمــامي - 1 تــا 5 - نمودارهــاي 1 
محدوديت هاي كنترلي و متغييرهاي حالت بر آورده مي شوند ولي متوجه مي شـويم كـه در ايـن 
به حالت نهايي خواسته شده نمي رسيم، پـس يـا بايـد محـدوديت هـا را ناديـده t = 45s زمان 
بازي كرد و يا مدت زم ان كنترلـي در هزينـه را بـالا بـرد، كـه طبـق R و H گرفت و با مقادير 
محاسبه انجام داده شده توسط كـد برنامـه ( 2) ايـن اتفـاق بـراي خطـاي كمتـر از 1 درجـه در 
خواهد افتاد. t = 315s 
1 توليد خواهد شد كه با ت وجه به - 1 تا 15 - نمودارهاي 11 H در صورت صفر قرار دادن مقدار 
در صورت تكـرار خـواهيم ديـ د كـه ايـن پديـده قابـل ،Q = دسته روابط ( 10 )، و با توجه به 0 
پيش بيني بود، يعني وقتي تنها هزينه مهم ما هزينه كنترلي باشد ، طبيعـي اسـت كـه كمتـرين 
(h=0, هزينه كنترلي انجام ندادن هيچ واكنشي خواهد بود.(كد برنامه 3 
1 خواهد بـود ، و ايـن افـزايش بـه - 1 تا 10 - رفتار ما طبق نمودار هاي 6 H با زياد كردن مقدار 
معناي بالا بردن اهميت مقدار نهايي متغييرهاي حالت در مقابـل هزينـه كنترلـي مـي باشـد، و 
همانگونه كه در نمودارها هم مي بينيد، با اين شرط محدوديت هاي كنترلي ما شكـسته خواهنـد 
(h=100, شد.(كد برنامه 3 
H ١ اجرای کد برنامه ١ برای محاسبه - شکل ٢
٧ 
:H= در 1 ρ با تغيير پارامتر R -4-1 محاسبه 
3)، و حالتي كه بتواند - براي اين منظور از كد برنامه 4 در پيوست استفاده شده است(شكل 1 
بدست مي آيد. ρ = . محدوديت هاي مساله را ارضا كند در 0069323 
R ١ اجرای کد برنامه ۴ برای محاسبه - شکل ٣
٨ 
H=.15499 ١- نمودار ١
٩ 
H=.15499 ١- نمودار ٢ 
H=.15499 ١- نمودار ٣
١٠ 
H=.15499 ١- نمودار ۴ 
H=.15499 ١- نمودار ۵
١١ 
H=100 ١- نمودار ٧ 
H=100 ١- نمودار ٧
١٢ 
H=100 ١- نمودار ٨ 
H=100 ١- نمودار ٩
١٣ 
H=100 ١- نمودار ١٠ 
H=0 ١- نمودار ١١
١٤ 
H=0 ١- نمودار ١٢ 
H=0 ١- نمودار ١٣
١٥ 
H=0 ١- نمودار ١۴ 
H=0 ١- نمودار ١۵
١٦ 
:N بر حسب مقدار Steady state gain factor -2 رسم نمودارهاي 
استفاده شـده،و از آنجـايي N براي اين منظور از كد برنامه 5 و مقادير 20،50،200،500 براي 
بدست آمد (طبق مطالب گفته شده )، بنابراين نمي توان انتظـار داشـت H ≠ كه در اين پروژه 0 
به يك مقدار ثابت ميل كند، كـه در نمودارهـاي Steady state gain N كه با افزايش مقدار 
2 مي توان اين موضوع را مشاهده كرد، در ضمن برخي از متغييرهاي حالت با توجـه - 2-1 تا 12 
و دسته روابط ( 10 )، تاثيري در صـدور فرمـان كنترلـي Steady state gain به صفر بودن 
ندارند! 
به ازای کنترل ١ ،N= در 20 steady state gain ١- مقادير - نمودار ٢
١٧ 
به ازای کنترل ٢ ،N= در 20 steady state gain ٢- مقادير - نمودار ٢ 
به ازای کنترل ٣ ،N= در 20 steady state gain ٣- مقادير - نمودار ٢
١٨ 
به ازای کنترل ١ ،N= در 50 steady state gain ۴- مقادير - نمودار ٢ 
به ازای کنترل ٢ ،N= در 50 steady state gain ۵- مقادير - نمودار ٢
١٩ 
به ازای کنترل ٣ ،N= در 50 steady state gain ۶- مقادير - نمودار ٢ 
به ازای کنترل ١ ،N= در 200 steady state gain ٧- مقادير - نمودار ٢
٢٠ 
به ازای کنترل ٢ ،N= در 200 steady state gain ٨- مقادير - نمودار ٢ 
به ازای کنترل ٣ ،N= در 200 steady state gain ٩- مقادير - نمودار ٢
٢١ 
به ازای کنترل ١ ،N= در 500 steady state gain ١٠ - مقادير - نمودار ٢ 
به ازای کنترل ٢ ،N= در 500 steady state gain ١١ - مقادير - نمودار ٢
٢٢ 
به ازای کنترل ٣ ،N= در 500 steady state gain ١٢ - مقادير - نمودار ٢
:ρ -3 رسم تغييرات بخش كنترلي تابع هزينه در ازاي تغيير ضريب 
براي اين بخش از كد برنامه 6 استفاده شده است،همانگونه كه مشاهد ش د مـي شـود در مقـادير 
بسيار زياد بوده و به شدت بخش كنترلي تابع هزينه را كاهش مـي دهـد، ρ پايين تاثير افزايش 
0، كمتر شده و به / بيشتر از 1 ρ 3 ديده مي شود، اين اثر با افزايش - اما همانگونه كه در نمودار 2 
مقدار ثابت حدود 7 ميل مي كند. 
٢٣ 
٠/ ٠ تا ٠٠٩ / در بازه ٠٠٠١ ρ ١- تغييرات بخش کنترلی تابع ھزينه در ازای تغيير ضريب - نمودار ٣ 
٠ تا ٢ / در بازه ٠٠٠١ ρ ١- تغييرات بخش کنترلی تابع ھزينه در ازای تغيير ضريب - نمودار ٣
٢٤ 
-4 نتيجه گيري و پيشنهاد: 
و خطي سازي، تمامي خواسته هاي مساله يكجا مرتفع نمي گـردد و بايـد از LQR -1 با روش 
نظاير روش هاي بكار رفته در اين پروژه استفاده كرد. 
-2 در روش غير خطي نيز بدليل حجم بالاي مح اسبات بايد بسياري از موارد نظير ميان يـابي و 
تقسيم بندي بازه ها تضعيف شوند تا بتوان از برنامه اجرا گرفت، كه اين خود از اطم ينان به حـل 
مي كاهد.(كد برنامه 7 و زير برنامه ها) 
-3 در كد نويسي مي توان با توجه به اثر متغيير حالتي كه باعث عبـور از محـدوده تعيـين شـده 
را بعنوان متغيير در نظر گرفت و در اين حالت احتمالا H كنترلر ما مي شود، دراي ههاي ماتريس 
هم در مدت 45 ثانيه به متغييرهاي LQR اي پيدا كرد كه در آن حالت با – H بتوان ماتريس 
دلخواه دست يافت. 
-4 در حل غيرخطي بدليل نياز به يك كنترلر با رفتار آرام و با اين ديد كه در وارد شدن شـتابها 
به جسم محدوديت داريم، در هر حالت تنها متغييرهاي حالت نزديك به متغيير حالـت مرحلـه 
بعد را در نظر گرفت و با اين كار از حجم محاسبات تا حدي كاست.
٢٥ 
پيوست: كد برنامه ها 
: كد برنامه 1 
clc 
clear 
close all 
tf=45; 
xd=[0; 
0; 
0; 
0; 
0; 
0; 
0; 
0; 
0];%desired states for final 
h=1; 
J=[1308 2210 2250]; 
I=[.08 .08 .08]; 
a1=6378.137+800;%a=Re+h 
omeg0=sqrt(398600/(a1^3));%n=sqrt(mu/a^3) 
N=45; 
dt=tf/N; 
ro=.001; 
R=2*ro*eye(3)*dt; 
Q=zeros(9); 
a=(4*omeg0^2*(J(2)-J(3))); 
b=(omeg0*(J(2)-J(3)-J(1))); 
c=(3*omeg0^2*(J(1)-J(3))); 
d=omeg0*(J(3)+J(1)-J(2)); 
e=omeg0^2*(J(2)-J(1)); 
A=[1 dt*1 0 0 0 0 0 0 0; 
-(a/J(1))*dt 1 0 0 0 –dt*(b/J(1)) 0 0 dt*omeg0/J(1); 
0 0 1 1*dt 0 0 0 0 0; 
0 0 –dt*(c/J(2)) 1 0 0 0 0 0; 
0 0 0 0 1 1*dt 0 0 0; 
0 –(d/J(3))*dt 0 0 –(e/J(3))*dt 1 –(omeg0/J(3))*dt 0 0; 
0 0 0 0 0 0 1 0 0; 
0 0 0 0 0 0 0 1 0; 
0 0 0 0 0 0 0 0 1;]; 
B=dt*[0 0 0; 
-(1/J(1)) 0 0; 
0 0 0; 
0 -(1/J(2)) 0; 
0 0 0; 
0 0 -(1/J(3)); 
1 0 0; 
0 1 0; 
0 0 1]; 
do_it=1; 
aa=0; 
while do_it<2 
aa=aa+1; 
P(:,:,1)=h*eye(9);%2/tf*eye(9);%H=0.26 
for k=1:N%n=45 @ dt=1sec 
P_use(:,:,N+1-k)=P(:,:,k); 
F(:,:,k+1)=-(inv(R+(B'*P(:,:,k)*B)))*(B'*P(:,:,k)*A); 
P(:,:,k+1)=((A+B*F(:,:,k+1))'*P(:,:,k)*(A+B*F(:,:,k+1)))+((F(:,:,k+1) 
)'*R*F(:,:,k+1))+Q;
٢٦ 
F_use(:,:,N+2-k)=F(:,:,k+1); 
end 
%calculate min cost and u_star 
x(:,1)=[60*pi/180; 0; 30*pi/180; 0; -45*pi/180; 0; 0; 0; 
0];%initial state 
for k=1:N 
min_u(:,k)=F_use(:,:,k+1)*x(:,k); 
min_j(k)=.5*(x(:,k)'*P_use(:,:,k)*x(:,k)); 
x(:,k+1)=state_eq(x(:,k),min_u(:,k),dt); 
end 
h=-.001*h+log(.2*h+1.2);%abs(.01*h-log(.1*h+1.1)); 
% h=h-.01*h; 
max_u1=max(min_u(1,☺); 
max_u2=max(min_u(2,☺); 
max_u3=max(min_u(3,☺); 
min_u1=min(min_u(1,☺); 
min_u2=min(min_u(2,☺); 
min_u3=min(min_u(3,☺); 
m1=[max_u1;min_u1]; 
m2=[max_u2;min_u2]; 
m3=[max_u3;min_u3]; 
figure(1) 
subplot(2,1,1) 
bar_plot=[m1 m2 m3]; 
text_loc=max(max(bar_plot)); 
bar(bar_plot) 
title('max & min of control inputs vs controller numbers') 
xlabel('max control number(1 2 3)---min control number(1 2 3)') 
ylabel('controller reaction') 
text(1,1.05*text_loc,['bf ( H= ' num2str(h) ')']) 
subplot(2,1,2) 
bar([xd(:,1)-x(:,k+1)]) 
title('state errors vs state numbers') 
xlabel('state numbers') 
ylabel('states error') 
if (abs(max_u1<=1.05)) && (abs(max_u2<=1.05)) && (abs(max_u3<=1.05)) 
&& (abs(min_u1>=-1.05)) && (abs(min_u1>=-1.05)) && (abs(min_u1>=- 
1.05)) 
do_it=4; 
h 
end 
end%while 
tx=0:dt:tf; 
tu=0:dt:tf-dt; 
.( پايان كد برنامه( 1
٢٧ 
: كد برنامه 2 
clc 
clear 
close all 
tf=45; 
simu=0; 
h=0.15944; 
J=[1308 2210 2250]; 
I=[.08 .08 .08]; 
a1=6378.137+800;%a=Re+h 
omeg0=sqrt(398600/(a1^3));%n=sqrt(mu/a^3) 
N=45; 
dt=tf/N; 
ro=.001; 
R=2*ro*eye(3)*dt; 
Q=zeros(9); 
a=(4*omeg0^2*(J(2)-J(3))); 
b=(omeg0*(J(2)-J(3)-J(1))); 
c=(3*omeg0^2*(J(1)-J(3))); 
d=omeg0*(J(3)+J(1)-J(2)); 
e=omeg0^2*(J(2)-J(1)); 
A=[1 dt*1 0 0 0 0 0 0 0; 
-(a/J(1))*dt 1 0 0 0 -dt*(b/J(1)) 0 0 dt*omeg0/J(1); 
0 0 1 1*dt 0 0 0 0 0; 
0 0 -dt*(c/J(2)) 1 0 0 0 0 0; 
0 0 0 0 1 1*dt 0 0 0; 
0 -(d/J(3))*dt 0 0 -(e/J(3))*dt 1 -(omeg0/J(3))*dt 0 0; 
0 0 0 0 0 0 1 0 0; 
0 0 0 0 0 0 0 1 0; 
0 0 0 0 0 0 0 0 1;]; 
B=dt*[0 0 0; 
-(1/J(1)) 0 0; 
0 0 0; 
0 -(1/J(2)) 0; 
0 0 0; 
0 0 -(1/J(3)); 
1 0 0; 
0 1 0; 
0 0 1]; 
do_it=1; 
aa=0; 
while do_it<2 
dt=tf/N; 
R=2*ro*eye(3)*dt; 
A=[1 dt*1 0 0 0 0 0 0 0; 
-(a/J(1))*dt 1 0 0 0 -dt*(b/J(1)) 0 0 dt*omeg0/J(1); 
0 0 1 1*dt 0 0 0 0 0; 
0 0 -dt*(c/J(2)) 1 0 0 0 0 0; 
0 0 0 0 1 1*dt 0 0 0; 
0 -(d/J(3))*dt 0 0 -(e/J(3))*dt 1 -(omeg0/J(3))*dt 0 0; 
0 0 0 0 0 0 1 0 0; 
0 0 0 0 0 0 0 1 0; 
0 0 0 0 0 0 0 0 1;]; 
B=dt*[0 0 0; 
-(1/J(1)) 0 0; 
0 0 0; 
0 -(1/J(2)) 0; 
0 0 0; 
0 0 -(1/J(3)); 
1 0 0;
٢٨ 
0 1 0; 
0 0 1]; 
aa=aa+1; 
P(:,:,1)=h*eye(9);%H=0.26 
for k=1:N%n=45 @ dt=1sec 
P_use(:,:,N+1-k)=P(:,:,k); 
F(:,:,k+1)=-(inv(R+(B'*P(:,:,k)*B)))*(B'*P(:,:,k)*A); 
P(:,:,k+1)=((A+B*F(:,:,k+1))'*P(:,:,k)*(A+B*F(:,:,k+1)))+((F(:,:,k+1) 
)'*R*F(:,:,k+1))+Q; 
F_use(:,:,N+2-k)=F(:,:,k+1); 
end 
%calculate min cost and u_star 
x(:,1)=[60*pi/180; 0; 30*pi/180; 0; -45*pi/180; 0; 0; 0; 
0];%initial state 
for k=1:N 
min_u(:,k)=F_use(:,:,k+1)*x(:,k); 
min_j(k)=.5*(x(:,k)'*P_use(:,:,k)*x(:,k)); 
x(:,k+1)=state_eq(x(:,k),min_u(:,k),dt); 
end 
tf=tf+.5 
xd=[0; 
0; 
0; 
0; 
0; 
0; 
0; 
0; 
0]; 
if (abs((xd(1,1)-(x(1,k+1)))*180/pi)<=1) && (abs((xd(2,1)- 
(x(2,k+1)))*180/pi)<=1) && (abs((xd(3,1)-(x(3,k+1)))*180/pi)<=1) && 
(abs((xd(4,1)-(x(4,k+1)))*180/pi)<=1) && (abs((xd(5,1)- 
(x(5,k+1)))*180/pi)<=1) && (abs((xd(6,1)-(x(6,k+1)))*180/pi)<=1) && 
(abs((xd(7,1)-(x(7,k+1))))<=1) && (abs((xd(8,1)-(x(8,k+1))))<=1) && 
(abs(xd(9,1)-(x(9,k+1)))<=1)%abs(max_u1<=1.05)) && 
(abs(max_u2<=1.05)) && (abs(max_u3<=1.05)) && (abs(min_u1>=-1.05)) && 
(abs(min_u1>=-1.05)) && (abs(min_u1>=-1.05)) 
do_it=4; 
tf 
end 
end%while 
. پايان كد برنامه 2
٢٩ 
: كد برنامه 3 
clc 
clear 
close all 
tf=4500; 
h=.15944;%0;%59;%.001;%100;%.1622;%100;%.2178;%.1622;%10777;%.1622;%i 
nitial H h1=.0499 h2=.1037 err=9.5e-4 .2178 
J=[1308 2210 2250]; 
I=[.08 .08 .08]; 
a1=6378.137+800;%a=Re+h 
omeg0=sqrt(398600/(a1^3));%n=sqrt(mu/a^3) 
N=45; 
dt=tf/N; 
ro=.001; 
R=2*ro*eye(3)*dt; 
Q=zeros(9); 
a=(4*omeg0^2*(J(2)-J(3))); 
b=(omeg0*(J(2)-J(3)-J(1))); 
c=(3*omeg0^2*(J(1)-J(3))); 
d=omeg0*(J(3)+J(1)-J(2)); 
e=omeg0^2*(J(2)-J(1)); 
A=[1 dt*1 0 0 0 0 0 0 0; 
-(a/J(1))*dt 1 0 0 0 -dt*(b/J(1)) 0 0 dt*omeg0/J(1); 
0 0 1 1*dt 0 0 0 0 0; 
0 0 -dt*(c/J(2)) 1 0 0 0 0 0; 
0 0 0 0 1 1*dt 0 0 0; 
0 -(d/J(3))*dt 0 0 -(e/J(3))*dt 1 -(omeg0/J(3))*dt 0 0; 
0 0 0 0 0 0 1 0 0; 
0 0 0 0 0 0 0 1 0; 
0 0 0 0 0 0 0 0 1;]; 
B=dt*[0 0 0; 
-(1/J(1)) 0 0; 
0 0 0; 
0 -(1/J(2)) 0; 
0 0 0; 
0 0 -(1/J(3)); 
1 0 0; 
0 1 0; 
0 0 1]; 
P(:,:,1)=h*eye(9);%2/tf*eye(9);%H=0.26 
for k=1:N%n=45 because dt=1sec 
P_use(:,:,N+1-k)=P(:,:,k); 
F(:,:,k+1)=-(inv(R+(B'*P(:,:,k)*B)))*(B'*P(:,:,k)*A); 
P(:,:,k+1)=((A+B*F(:,:,k+1))'*P(:,:,k)*(A+B*F(:,:,k+1)))+((F(:,:,k+1) 
)'*R*F(:,:,k+1))+Q; 
F_use(:,:,N+2-k)=F(:,:,k+1); 
end 
%calculate min cost and u_star 
x(:,1)=[pi/3; 0; pi/6; 0; -pi/4; 0; 0; 0; 0];%initial state 
for k=1:N 
min_u(:,k)=F_use(:,:,k+1)*x(:,k); 
min_j(k)=.5*(x(:,k)'*P_use(:,:,k)*x(:,k)); 
x(:,k+1)=state_eq(x(:,k),min_u(:,k),dt); 
end 
tx=0:dt:tf; 
tu=0:dt:tf-dt; 
subplot(3,1,1) 
plot(tu,min_u(1,:)) 
title('u1')
title('control1 vs time') 
xlabel('time(sec)') 
ylabel('{h_1}^{bf .} ') 
subplot(3,1,2) 
plot(tu,min_u(2,:)) 
title('u2') 
title('control2 vs time') 
xlabel('time(sec)') 
ylabel('{h_2}^{bf .} ') 
subplot(3,1,3) 
plot(tu,min_u(3,:)) 
title('u3') 
title('control3 vs time') 
xlabel('time(sec)') 
ylabel('{h_3}^{bf .} ') 
figure(2) 
subplot(2,1,1) 
plot(tx,x(1,:)*180/pi) 
title('state1 vs time') 
xlabel('time(sec)') 
ylabel('Phi (deg.)') 
subplot(2,1,2) 
plot(tx,x(2,:)*180/pi) 
title('state2 vs time') 
xlabel('time(sec)') 
ylabel('phi^{bf .} (deg./sec)') 
figure(3) 
subplot(2,1,1) 
plot(tx,x(3,:)*180/pi) 
title('state3 vs time') 
xlabel('time(sec)') 
ylabel('theta (deg.)') 
subplot(2,1,2) 
plot(tx,x(4,:)*180/pi) 
title('state4 vs time') 
xlabel('time(sec)') 
ylabel('theta^{bf .} (deg./sec)') 
figure(4) 
subplot(2,1,1) 
plot(tx,x(5,:)*180/pi) 
title('state5 vs time') 
xlabel('time(sec)') 
ylabel('Psi (deg.)') 
subplot(2,1,2) 
plot(tx,x(6,:)*180/pi) 
title('state6 vs time') 
xlabel('time(sec)') 
ylabel('Psi^{bf .} (deg./sec)') 
figure(5) 
subplot(3,1,1) 
plot(tx,x(7,:)) 
title('state7 vs time') 
xlabel('time(sec)') 
ylabel('h_1') 
٣٠
subplot(3,1,2) 
plot(tx,x(8,:)) 
title('state8 vs time') 
xlabel('time(sec)') 
ylabel('h_2') 
subplot(3,1,3) 
plot(tx,x(9,:)) 
title('state9 vs time') 
xlabel('time(sec)') 
ylabel('h_3') 
٣١ 
. پايان كد برنامه 3 
: كد برنامه 4 
clc 
clear 
close all 
tf=45; 
xd=[0; 
0; 
0; 
0; 
0; 
0; 
0; 
0; 
0];%desired states for final 
h=0;%.15944;%.1622;%10777;%.1622;%initial H 
J=[1308 2210 2250]; 
I=[.08 .08 .08]; 
a1=6378.137+800;%a=Re+h 
omeg0=sqrt(398600/(a1^3));%n=sqrt(mu/a^3) 
N=45; 
dt=tf/N; 
ro=.001; 
R=2*ro*eye(3)*dt; 
Q=zeros(9); 
a=(4*omeg0^2*(J(2)-J(3))); 
b=(omeg0*(J(2)-J(3)-J(1))); 
c=(3*omeg0^2*(J(1)-J(3))); 
d=omeg0*(J(3)+J(1)-J(2)); 
e=omeg0^2*(J(2)-J(1)); 
A=[1 dt*1 0 0 0 0 0 0 0; 
-(a/J(1))*dt 1 0 0 0 -dt*(b/J(1)) 0 0 dt*omeg0/J(1); 
0 0 1 1*dt 0 0 0 0 0; 
0 0 -dt*(c/J(2)) 1 0 0 0 0 0; 
0 0 0 0 1 1*dt 0 0 0; 
0 -(d/J(3))*dt 0 0 -(e/J(3))*dt 1 -(omeg0/J(3))*dt 0 0; 
0 0 0 0 0 0 1 0 0; 
0 0 0 0 0 0 0 1 0; 
0 0 0 0 0 0 0 0 1;]; 
B=dt*[0 0 0; 
-(1/J(1)) 0 0; 
0 0 0; 
0 -(1/J(2)) 0; 
0 0 0; 
0 0 -(1/J(3)); 
1 0 0;
٣٢ 
0 1 0; 
0 0 1]; 
do_it=1; 
aa=0; 
while do_it<2 
aa=aa+1; 
R=2*ro*eye(3)*dt; 
P(:,:,1)=h*eye(9);%2/tf*eye(9);%H=0.26 
for k=1:N%n=45 because dt=1sec 
P_use(:,:,N+1-k)=P(:,:,k); 
F(:,:,k+1)=-(inv(R+(B'*P(:,:,k)*B)))*(B'*P(:,:,k)*A); 
P(:,:,k+1)=((A+B*F(:,:,k+1))'*P(:,:,k)*(A+B*F(:,:,k+1)))+((F(:,:,k+1) 
)'*R*F(:,:,k+1))+Q; 
F_use(:,:,N+2-k)=F(:,:,k+1); 
end 
%calculate min cost and u_star 
x(:,1)=[60*pi/180; 0; 30*pi/180; 0; -45*pi/180; 0; 0; 0; 
0];%initial state 
for k=1:N 
min_u(:,k)=F_use(:,:,k+1)*x(:,k); 
min_j(k)=.5*(x(:,k)'*P_use(:,:,k)*x(:,k)); 
x(:,k+1)=state_eq(x(:,k),min_u(:,k),dt); 
end 
ro=ro+.01*ro; 
max_u1=max(min_u(1,:)); 
max_u2=max(min_u(2,:)); 
max_u3=max(min_u(3,:)); 
min_u1=min(min_u(1,:)); 
min_u2=min(min_u(2,:)); 
min_u3=min(min_u(3,:)); 
m1=[max_u1;min_u1]; 
m2=[max_u2;min_u2]; 
m3=[max_u3;min_u3]; 
figure(1) 
subplot(2,1,1) 
bar_plot=[m1 m2 m3]; 
text_loc=max(max(bar_plot)); 
bar(bar_plot) 
title('max & min of control inputs vs controller numbers') 
xlabel('max control number(1 2 3)---min control number(1 2 3)') 
ylabel('controller reaction') 
text(1,1.05*text_loc,['bf ( H= ' num2str(h) ')']) 
subplot(2,1,2) 
bar([xd(:,1)-x(:,k+1)]) 
title('state errors vs state numbers') 
xlabel('state numbers') 
ylabel('states error') 
if (abs(max_u1<=1.05)) && (abs(max_u2<=1.05)) && (abs(max_u3<=1.05)) 
&& (abs(min_u1>=-1.05)) && (abs(min_u1>=-1.05)) && (abs(min_u1>=- 
1.05)) 
do_it=4; 
disp(['H= ' num2str(h)]) 
disp(['ro= ' num2str(ro)]) 
end 
end%while 
tx=0:dt:tf; 
tu=0:dt:tf-dt;
٣٣ 
: كد برنامه 5 
clc 
clear 
close all 
tf=45; 
h=0;%.15944;%0;%59;%.001;%100;%.1622;%100;%.2178;%.1622;%10777;%.1622 
;%initial H h1=.0499 h2=.1037 err=9.5e-4 .2178 
nom=0; 
J=[1308 2210 2250]; 
I=[.08 .08 .08]; 
fig_no=0; 
a1=6378.137+800;%a=Re+h 
fig_no=0; 
%for N loop 
inith=5; 
stp=25; 
endesh=105; 
%end for N loop 
omeg0=sqrt(398600/(a1^3));%n=sqrt(mu/a^3) 
N_mat=[20 50 200 500]; 
for ii=1:4 
N=N_mat(ii); 
nom=nom+1; 
dt=tf/N; 
ro=.001; 
R=2*ro*eye(3)*dt; 
Q=zeros(9); 
a=(4*omeg0^2*(J(2)-J(3))); 
b=(omeg0*(J(2)-J(3)-J(1))); 
c=(3*omeg0^2*(J(1)-J(3))); 
d=omeg0*(J(3)+J(1)-J(2)); 
e=omeg0^2*(J(2)-J(1)); 
A=[1 dt*1 0 0 0 0 0 0 0; 
-(a/J(1))*dt 1 0 0 0 -dt*(b/J(1)) 0 0 dt*omeg0/J(1); 
0 0 1 1*dt 0 0 0 0 0; 
0 0 -dt*(c/J(2)) 1 0 0 0 0 0; 
0 0 0 0 1 1*dt 0 0 0; 
0 -(d/J(3))*dt 0 0 -(e/J(3))*dt 1 -(omeg0/J(3))*dt 0 0; 
0 0 0 0 0 0 1 0 0; 
0 0 0 0 0 0 0 1 0; 
0 0 0 0 0 0 0 0 1;]; 
B=dt*[0 0 0; 
-(1/J(1)) 0 0; 
0 0 0; 
0 -(1/J(2)) 0; 
0 0 0; 
0 0 -(1/J(3)); 
1 0 0; 
0 1 0; 
0 0 1]; 
P(:,:,1)=h*eye(9);%2/tf*eye(9);%H=0.26 
for k=1:N%n=45 because dt=1sec 
P_use(:,:,N+1-k)=P(:,:,k); 
F(:,:,k+1)=-(inv(R+(B'*P(:,:,k)*B)))*(B'*P(:,:,k)*A); 
P(:,:,k+1)=((A+B*F(:,:,k+1))'*P(:,:,k)*(A+B*F(:,:,k+1)))+((F(:,:,k+1) 
)'*R*F(:,:,k+1))+Q;
٣٤ 
F_use(:,:,N+2-k)=F(:,:,k+1); 
end 
%calculate min cost and u_star 
x(:,1)=[pi/3; 0; pi/6; 0; -pi/4; 0; 0; 0; 0];%initial state 
for k=1:N 
min_u(:,k)=F_use(:,:,k+1)*x(:,k); 
min_j(k)=.5*(x(:,k)'*P_use(:,:,k)*x(:,k)); 
x(:,k+1)=state_eq(x(:,k),min_u(:,k),dt); 
end 
tx=0:dt:tf; 
tu=0:dt:tf-dt; 
for satr=1:3 
fig_no=fig_no+1; 
figure(fig_no) 
for sot=1:9 
subplot(3,3,sot) 
F_plot(1:N)=F_use(satr,sot,2:end); 
plot([1:N],F_plot) 
title(['F' num2str(satr) num2str(sot) ', control= ' num2str(satr) ', 
state= ' num2str(sot)]) 
end%sot 
end%satr 
end%for N 
. پايان كد برنامه 5
٣٥ 
: كد برنامه 6 
clc 
clear 
close all 
tf=45; 
h=.15944;%0;%59;%.001;%100;%.1622;%100;%.2178;%.1622;%10777;%.1622;%i 
nitial H h1=.0499 h2=.1037 err=9.5e-4 .2178 
J=[1308 2210 2250]; 
I=[.08 .08 .08]; 
a1=6378.137+800;%a=Re+h 
omeg0=sqrt(398600/(a1^3));%n=sqrt(mu/a^3) 
N=45; 
dt=tf/N; 
first_ro=0.0001; 
end_ro=.1; 
ro_step=.001; 
ro=[first_ro:ro_step:end_ro]; 
ro_iteration=(end_ro-first_ro)/ro_step+1; 
for ro_iter=1:ro_iteration 
R=2*ro(ro_iter)*eye(3)*dt; 
Q=zeros(9); 
a=(4*omeg0^2*(J(2)-J(3))); 
b=(omeg0*(J(2)-J(3)-J(1))); 
c=(3*omeg0^2*(J(1)-J(3))); 
d=omeg0*(J(3)+J(1)-J(2)); 
e=omeg0^2*(J(2)-J(1)); 
A=[1 dt*1 0 0 0 0 0 0 0; 
-(a/J(1))*dt 1 0 0 0 -dt*(b/J(1)) 0 0 dt*omeg0/J(1); 
0 0 1 1*dt 0 0 0 0 0; 
0 0 -dt*(c/J(2)) 1 0 0 0 0 0; 
0 0 0 0 1 1*dt 0 0 0; 
0 -(d/J(3))*dt 0 0 -(e/J(3))*dt 1 -(omeg0/J(3))*dt 0 0; 
0 0 0 0 0 0 1 0 0; 
0 0 0 0 0 0 0 1 0; 
0 0 0 0 0 0 0 0 1;]; 
B=dt*[0 0 0; 
-(1/J(1)) 0 0; 
0 0 0; 
0 -(1/J(2)) 0; 
0 0 0; 
0 0 -(1/J(3)); 
1 0 0; 
0 1 0; 
0 0 1]; 
P(:,:,1)=h*eye(9);%P(0)=H 
for k=1:N%N=45 when dt=1sec 
P_use(:,:,N+1-k)=P(:,:,k); 
F(:,:,k+1)=-(inv(R+(B'*P(:,:,k)*B)))*(B'*P(:,:,k)*A); 
P(:,:,k+1)=((A+B*F(:,:,k+1))'*P(:,:,k)*(A+B*F(:,:,k+1)))+((F(:,:,k+1) 
)'*R*F(:,:,k+1))+Q; 
F_use(:,:,N+2-k)=F(:,:,k+1); 
end 
%calculate min cost and u_star 
x(:,1)=[pi/3; 0; pi/6; 0; -pi/4; 0; 0; 0; 0];%initial state 
for k=1:N 
min_u(:,k)=F_use(:,:,k+1)*x(:,k); 
min_j(k)=.5*(x(:,k)'*P_use(:,:,k)*x(:,k)); 
x(:,k+1)=state_eq(x(:,k),min_u(:,k),dt); 
end
tx=0:dt:tf; 
tu=0:dt:tf-dt; 
%calculate cost function 
cost_value(ro_iter)=sum(min_j); 
figure(1) 
plot(ro(ro_iter),cost_value(ro_iter)) 
hold on 
drawnow 
end%ro_iteration 
٣٦ 
. پايان كد برنامه 6 
كد برنامه 7 و زير برنامه ها: 
%+++++++++++ main program DP ++++++++++++ 
clc 
clear 
tf=45;%sec 
x_prepare(1:3)=[0 0 0];%final omega 
x_prepare(4:6)=[-7 -7 -7];%final h 
x_prepare(7:10)=[1 0 0 0];%final quaternion 
dt=5;%delta t =5s ==>45/5=9step 
u=[-1.05:.2625:1.05];%controller signal 
x=[-.05:.025:0.05];%interval for omega; state signal 
xx=[-7:3.5:7];%interval for h 
xxx=[-1, -.7233,-.532,-.4397,-.0223,0, .0223,.4397, .532, .7233,1]; 
user_wanna=3;%kind of states 
kind_control=3;%kind of control 
%+flag 1 : produce all kind of states and controlers that user want 
to have! 
for do_it=1:user_wanna%3 states 
generalized_x1(do_it,:)=x; 
end 
for do_it=1:user_wanna%3 states 
generalized_x2(do_it,:)=xx; 
end 
for do_it=1:user_wanna+1%4 states 
generalized_x3(do_it,:)=xxx; 
end 
% for generalized_x4=1:user_wanna 
% generalized_x4(do_it,:)=x; 
% end 
for do_it=1:kind_control 
generalized_u(do_it,:)=u; 
end 
[i_s1,i_f]=first_end(generalized_x1(1,:),x_prepare(1)); 
[i_s2,i_f2]=first_end(generalized_x1(2,:),x_prepare(2)); 
[i_s3,i_f3]=first_end(generalized_x1(3,:),x_prepare(3)); 
[i_s4,i_f4]=first_end(generalized_x2(1,:),x_prepare(4)); 
[i_s5,i_f5]=first_end(generalized_x2(2,:),x_prepare(5)); 
[i_s6,i_f6]=first_end(generalized_x2(3,:),x_prepare(6)); 
[i_s7,i_f7]=first_end(generalized_x3(1,:),x_prepare(7)); 
[i_s8,i_f8]=first_end(generalized_x3(2,:),x_prepare(8)); 
[i_s9,i_f9]=first_end(generalized_x3(3,:),x_prepare(9)); 
[i_s10,i_f10]=first_end(generalized_x3(4,:),x_prepare(10)); 
%-flag 1
N=tf/dt;%final_stage 
[nothing,j_f]=size(u); 
j_f2=j_f; 
j_f3=j_f2; 
% [nothing,i_f]=size(x); 
% i_f2=i_f; 
% i_f3=i_f2; 
% [nothing,i_f4]=size(xx); 
% i_f5=i_f4; 
% i_f6=i_f5; 
% [nothing,i_f7]=size(xxx); 
% i_f8=i_f7; 
% i_f9=i_f8; 
% i_f10=i_f9; 
j_star(N+1,1:i_f)=0; 
j_stak(1,1:j_f)=0; 
for k=N:-1:1%stage counter 
٣٧ 
k 
for i10=i_s10:i_f10 
for i9=i_s9:i_f9 
for i8=i_s8:i_f8 
for i7=i_s7:i_f7 
for i6=i_s6:i_f6 
for i5=i_s5:i_f5 
for i4=i_s4:i_f4 
for i3=i_s3:i_f3 
for i2=i_s2:i_f2 
% for i1=1:i_f1 
for i=i_s1:i_f%state counter generalized_x1 
for j=1:j_f 
for j2=1:j_f2 
for j3=1:j_f3%controller counter 
x_next=state_eq(generalized_u(1,j),generalized_u(2,j2),generalized_u( 
3,j3),generalized_x1,generalized_x2,generalized_x3,i,i2,i3,i4,i5,i6,i 
7,i8,i9,i10,dt); 
%new 
[nothing,col2]=find(x==x_next); 
[i_s1,i_f]=first_end(x,x_next(1)); 
[i_s2,i_f2]=first_end(x,x_next(2)); 
[i_s3,i_f3]=first_end(x,x_next(3)); 
[i_s4,i_f4]=first_end(xx,x_next(4)); 
[i_s5,i_f5]=first_end(xx,x_next(5)); 
[i_s6,i_f6]=first_end(xx,x_next(6)); 
[i_s7,i_f7]=first_end(xxx,x_next(7)); 
[i_s8,i_f8]=first_end(xxx,x_next(8)); 
[i_s9,i_f9]=first_end(xxx,x_next(9)); 
[i_s10,i_f10]=first_end(xxx,x_next(10)); 
%new
٣٨ 
if ((1/10)*(abs(x_next-x_prepare)))<=.05%new check column 
10=number of states 
% [nothing,colmn]=find(x_next==x_prepare);%redo with 
interpolate 
% if (~isempty(colmn) && colmn==10) 
if k==N 
stage='last'; 
else 
stage='nono'; 
end 
if k==N%final stage only 
j_c(k,i,j)=cost_function(u(j),u(j2),u(j3),stage,tf,dt); 
% 
j_c(k,i,j)=cost_function(u(j),u(j2),u(j3),generalized_x,generalized_x 
2,generalized_x3,generalized_x4,stage,x_next,i,i2,i3,i4,i5,i6,i7,i8,i 
9,i10); 
else%final and this stage 
j_c(k,i,j)=cost_function(u(j),u(j2),u(j3),stage,tf,dt)+min(j_stak(1,: 
));%j_stak(1,find_next_j(x_next,x)); 
% 
j_c(k,i,j)=cost_function(u(j),u(j2),u(j3),generalized_x(:,i),stage,x_ 
next)+j_stak(1,find_next_j(x_next,x)); 
end 
else%else check colmn 
j_c(k,i,j)=1e6;%for diffrence between 0 and not 
acceptable amounts 
end%if check colmn 
end%j3 
end%j2 
end%j 
end%i 
% end%i1 
end%i2 
end%i3 
end%i4 
end%i5 
end%i6 
end%i7 
end%i8 
end%i9 
end%i10 
for i=1:i_f 
[j_star(k,i),u_star_index(i)]=min(j_c(k,i,:)); 
%++A1 best use: find(j_c(k,i,:)==min(j_c(k,i,:))) 
end 
j_stak=j_star(k,:); 
u_star(k,:)=u(u_star_index); 
u_stak=u_star(k,:); 
end%k
function [i_start,i_end]=first_end(x_length,current_x) 
[nothing,col]=find(current_x==x_length); 
[nothing,a]=size(x_length); 
i_start=col-1; 
i_end=col+1; 
if i_start<1 
٣٩ 
i_start=1; 
end 
if i_end>a 
i_end=a; 
end 
end 
function min_j_index=find_next_j(x_next,x) 
% min_j_index=find_next_j(x_next,x) 
%scheme of variable min_j: min_j(stage index,input index) 
[nothing,min_j_index]=find(x==x_next); 
end 
function [c] = cost_function(u1,u2,u3,stage,tf,dt) 
% [c] = cost_fcn(u,x,stage,x_last) 
ro=.001; 
if stage=='last' 
c=tf;%(k) last stage cost function 
else 
c=ro*dt*(u1^2)+(u2^2)+(u3^2);%(1 until k-1) cost function in 
stages) 
end%if 
end 
function [c] = 
cost_fcn(u1,u2,u3,gen_x1,gen_x2,gen_x3,gen_x4,stage,x_last,i1,i2,i3,i 
4,i5,i6,i7,i8,i9,i10) 
% [c] = cost_fcn(u,x,stage,x_last) 
if stage=='last' 
c=(x_last^2)+(2*u^2);%(k) last stage cost function 
else 
c=2*u^2;%(1 until k-1) cost function in stages 
end%if 
end 
پايان كد برنامه 7 و زير برنامه ها.

More Related Content

Similar to 86203954

جزوه کنترل مدرن دکتر روح اله برزمینی بخش دوم
جزوه کنترل مدرن دکتر روح اله برزمینی بخش دومجزوه کنترل مدرن دکتر روح اله برزمینی بخش دوم
جزوه کنترل مدرن دکتر روح اله برزمینی بخش دومPourya Parsa
 
#1_AAA_control_system(2).pdf
#1_AAA_control_system(2).pdf#1_AAA_control_system(2).pdf
#1_AAA_control_system(2).pdfSanazGerameifar
 
آزمایشگاه ژئوفیزیک
آزمایشگاه ژئوفیزیکآزمایشگاه ژئوفیزیک
آزمایشگاه ژئوفیزیکKoorosh Parvaz
 
Approximate String Matching
Approximate String MatchingApproximate String Matching
Approximate String Matchingnazi asadpour
 
Fuzzy weather farsi
Fuzzy weather farsiFuzzy weather farsi
Fuzzy weather farsinazar642004
 
teleoperationنگار پژوه :: تله اپراتور برای آموزش جراحی رباتیک
teleoperationنگار پژوه :: تله اپراتور  برای آموزش جراحی رباتیکteleoperationنگار پژوه :: تله اپراتور  برای آموزش جراحی رباتیک
teleoperationنگار پژوه :: تله اپراتور برای آموزش جراحی رباتیکMojtaba Hasanlu
 
ساخت ال ای دی رقصان
ساخت ال ای دی رقصانساخت ال ای دی رقصان
ساخت ال ای دی رقصانmohammadhosseinkaka
 
نگار پژوه:: مکان یابی بیهنه المان های پیزوالکتریک برای میرا نمودن ارتعاشات سازه
نگار پژوه:: مکان یابی بیهنه المان های پیزوالکتریک برای میرا نمودن ارتعاشات سازه نگار پژوه:: مکان یابی بیهنه المان های پیزوالکتریک برای میرا نمودن ارتعاشات سازه
نگار پژوه:: مکان یابی بیهنه المان های پیزوالکتریک برای میرا نمودن ارتعاشات سازه Mojtaba Hasanlu
 
آموزش طراحی کنترل پیش بین مبتنی بر مدل یا MPC در متلب
آموزش طراحی کنترل پیش بین مبتنی بر مدل یا MPC در متلبآموزش طراحی کنترل پیش بین مبتنی بر مدل یا MPC در متلب
آموزش طراحی کنترل پیش بین مبتنی بر مدل یا MPC در متلبfaradars
 
جزوه کنترل مدرن بخش اول دکتر روح اله برزمینی
جزوه کنترل مدرن بخش اول دکتر روح اله برزمینیجزوه کنترل مدرن بخش اول دکتر روح اله برزمینی
جزوه کنترل مدرن بخش اول دکتر روح اله برزمینیPourya Parsa
 

Similar to 86203954 (19)

جزوه کنترل مدرن دکتر روح اله برزمینی بخش دوم
جزوه کنترل مدرن دکتر روح اله برزمینی بخش دومجزوه کنترل مدرن دکتر روح اله برزمینی بخش دوم
جزوه کنترل مدرن دکتر روح اله برزمینی بخش دوم
 
ترسیم کمپل دیاگرام روتور
ترسیم کمپل دیاگرام روتورترسیم کمپل دیاگرام روتور
ترسیم کمپل دیاگرام روتور
 
Vibration
VibrationVibration
Vibration
 
Flowchart
FlowchartFlowchart
Flowchart
 
#1_AAA_control_system(2).pdf
#1_AAA_control_system(2).pdf#1_AAA_control_system(2).pdf
#1_AAA_control_system(2).pdf
 
آزمایشگاه ژئوفیزیک
آزمایشگاه ژئوفیزیکآزمایشگاه ژئوفیزیک
آزمایشگاه ژئوفیزیک
 
Approximate String Matching
Approximate String MatchingApproximate String Matching
Approximate String Matching
 
Fuzzy weather farsi
Fuzzy weather farsiFuzzy weather farsi
Fuzzy weather farsi
 
teleoperationنگار پژوه :: تله اپراتور برای آموزش جراحی رباتیک
teleoperationنگار پژوه :: تله اپراتور  برای آموزش جراحی رباتیکteleoperationنگار پژوه :: تله اپراتور  برای آموزش جراحی رباتیک
teleoperationنگار پژوه :: تله اپراتور برای آموزش جراحی رباتیک
 
Rzaei presentation
Rzaei presentationRzaei presentation
Rzaei presentation
 
winter
winterwinter
winter
 
winter
winterwinter
winter
 
report
reportreport
report
 
9
99
9
 
Identification and adaptive position and speed control of permanent magnet dc...
Identification and adaptive position and speed control of permanent magnet dc...Identification and adaptive position and speed control of permanent magnet dc...
Identification and adaptive position and speed control of permanent magnet dc...
 
ساخت ال ای دی رقصان
ساخت ال ای دی رقصانساخت ال ای دی رقصان
ساخت ال ای دی رقصان
 
نگار پژوه:: مکان یابی بیهنه المان های پیزوالکتریک برای میرا نمودن ارتعاشات سازه
نگار پژوه:: مکان یابی بیهنه المان های پیزوالکتریک برای میرا نمودن ارتعاشات سازه نگار پژوه:: مکان یابی بیهنه المان های پیزوالکتریک برای میرا نمودن ارتعاشات سازه
نگار پژوه:: مکان یابی بیهنه المان های پیزوالکتریک برای میرا نمودن ارتعاشات سازه
 
آموزش طراحی کنترل پیش بین مبتنی بر مدل یا MPC در متلب
آموزش طراحی کنترل پیش بین مبتنی بر مدل یا MPC در متلبآموزش طراحی کنترل پیش بین مبتنی بر مدل یا MPC در متلب
آموزش طراحی کنترل پیش بین مبتنی بر مدل یا MPC در متلب
 
جزوه کنترل مدرن بخش اول دکتر روح اله برزمینی
جزوه کنترل مدرن بخش اول دکتر روح اله برزمینیجزوه کنترل مدرن بخش اول دکتر روح اله برزمینی
جزوه کنترل مدرن بخش اول دکتر روح اله برزمینی
 

More from Shakib Sharifian (8)

Report #6
Report #6Report #6
Report #6
 
report #5
report #5report #5
report #5
 
report #4
report #4report #4
report #4
 
report #3
report #3report #3
report #3
 
report #2
report #2report #2
report #2
 
report #1
report #1report #1
report #1
 
report
reportreport
report
 
Paper18
Paper18Paper18
Paper18
 

86203954

  • 1. عنوان پروژه: كنترل بهينه وضعيت فضاپيماي صلب توسط چرخ عكس العملي در زواياي بزرگ استاد: پروفسور پورتاکدوست دانشجو: شکيب شريفيان ٨۶٢٠٣٩۶۴ پاييز ٨٧
  • 2.
  • 3. فهرست بخش 1 -1 تعريف پروژه 1 -1 5 DP در LQR -2 روش -1 6 H -3-1 سياست محاسبه 7 H= در 1 ρ با تغيير پارامتر R -4 محاسبه -1 بخش 2 16 N بر حسب مقدار Steady state gain factor رسم نمودارهاي بخش 3 23 ρ رسم تغييرات بخش كنترلي تابع هزينه در ازاي تغيير ضريب پيوست 25 كد برنامه 1 27 كد برنامه 2 29 كد برنامه 3 31 كد برنامه 4 33 كد برنامه 5 35 كد برنامه 6 كد برنامه 7 و زير برنامه ها 36
  • 4. -1-1 تعريف پروژه: در اين پروژه سيستم ما يك فضاپيماست كه با توجه به معادلات 1 سعي مي كنيم تا بـا اسـتفاده از چرخ هاي عكس العملي(شكل 1) و توليد نرخ مومنتوم زاويه اي در هر لحظه هـم متغييرهـاي حالـت سيستم را در يك مسير خواسته شده به پيش ببريم و هم بـر روي هزينـه تبـ ديل ايـن متغييرهـاي حالت كه طبق معادله 2 داده شده نظارت داشته باشيم(هدف كنترل بهينه در اين پروژه). & J I J J h h u ( ) ( ) − Ω = − Ω Ω − Ω + Ω − 1 1 1 2 3 2 3 3 2 2 3 1 & J I J J h h u ( ) ( ) − Ω = − Ω Ω − Ω + Ω − 2 2 2 3 1 3 1 1 3 3 1 2 & J I J J h h u ( ) ( ) − Ω = − Ω Ω − Ω + Ω − 3 3 3 1 2 1 2 2 1 1 2 3 & & h u I for i 2 1 = + ρ ∫ + + f [ ( ) ( ) 2 ( )] && & & & && t f T + T = I + 4 ( I − I ) + ( I − I − I ) + h − h − h − h − I && & I I I − − + && & && & && & T T I I I h I I 3 ( ) ( 2 ) ( 2 ) + = + − + + − − + − − + && & & & && T T I I I I I I h h h h I ١ ١- چرخ عکس العملی - شکل ١ (١) (٢) خطي شده معادلات ( 1) به صورت زير است: (٣) φ ω φ ω ψ ω ψ φω θ dx cx x y z y z x wz wz wy wy xy ψ ω ψ ω θ xz xz yz θ ω θ φ ω ψ ω φ ψ ω φ ω ψ dy cy y x z wy xy yz + = + + − + − + − + − − ψ ω φ ω ψ ω φ ψω θ dz cz z z x y y x wz wx wy wy yz 2 0 && && I I I φ φ ω φ xz xz xz 0 0 0 0 2 0 0 2 0 0 2 0 0 2 0 0 2 0 0 0 0 0 0 2 0 2 ( ) ( ) 2 − − − 1,2,3 = − Ω = i i i i J t u t u t u t dt 3 0 2 2
  • 5. ⎧ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎨ x = x J x J J x J J J x u x 0 4 ( ) ( ) ω ω ω = + − + − − + − x = x J x J J x u 0 3 ω ( ) = + − + x = x J x J J J x J J x u x 0 ( ) ( ) = + + − + − + + x & = u x & u ٢ براي شروع بايد معادلات را در فضاي حالت بنويسيم، كه در اين مورد متغيرهاي حالت و كنترل را بفرم زير تعريف مي كنيم: (۴) φ ⎫ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ & φ θ & θ ψ ⎬ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎭ ⎧ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎨ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎩ = ⎫ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎬ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎭ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪ ⎩ h 1 2 3 x 1 2 3 4 5 6 7 8 9 h h x x x x x x x x ψ & ; ⎫ ⎪⎭ ⎪⎬ ⎧ = ⎪⎩ ⎪⎨ ⎫ ⎪⎭ ⎪⎬ u ⎧ ⎪⎩ ⎪⎨ & h 1 & 2 3 3 2 3 h h u u & 1 2 1 2 0 3 4 2 2 4 0 5 6 7 1 = 8 2 9 3 2 3 1 0 2 3 1 6 1 0 9 2 1 5 3 0 7 2 1 3 3 2 2 3 6 0 3 1 2 2 0 x & = u & & & & & & ω ω ω براي اين منظور بايد تعدادي از پارامترها را بعنوان متغييرهاي حالت در نظـر بگيـريم كـه در اينجـا بهتر است از هم ان متغييرهاي حالتي كـه در پـروژه محـدوديت دارنـد ، اسـتفاده كنـيم و مـاتريس كنترلي هم طبق خواسته پروژه براساس روابط زير مي باشند: (۵) [ ] ⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎡ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ 0 0 0 1/ 0 0 0 0 0 0 1/ 0 0 0 0 0 0 − 1/ − − = 1 0 0 0 1 0 0 0 1 3 2 1 J J J B
  • 6. A J B J J ⎡ − − A = ω J − J B = ω J − J − J C = ω J − J D J J J ٣ متغييرهاي حالت نيز طبق روابط زير مي باشند: (۶) [ ] 0 1 0 0 0 0 0 0 0 / 0 0 0 0 ω / 0 0 ω / 1 0 1 0 1 0 0 0 1 0 0 0 0 0 C J 0 0 / 0 0 0 0 0 0 2 − 0 0 0 0 0 1 0 0 0 0 / 0 0 / 0 / 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 4 ( ) ( ) 0 2 3 1 3 ( ) ( ) ω = + − 0 3 1 2 ( ) 2 1 2 0 1 3 2 0 2 3 2 0 3 3 0 3 E J J D J E J J A = − ⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ − − − = ω ω همانگونه ك ه مشاهده مي شود معادلا ت سيستم م ا غير خطي مي باشند، پس دو كار مـي تـوان انجـام داد: بصورت غيرخطي Bellman's recursive -1 حل معادلات با روش LQR -2 خطي كردن معادلات و استفاده از روش با توجه به تعداد زياد متغييرهاي حالت و كنترلي، حجم بالاي محاسباتي (كـد برنامـه نوشـته شـده ، ولي زمان اجراي بر نامه بالا مي باشد) به سختي امكان پياده سازي با اين روش وجـود دارد، بنـابراين به حل معادلات مربوطه مي پـردازيم، بـراي ايـن منظـور LQR با خطي سازي معادلات و استفاده از ابتدا بايد معادلات 3كـه بـه فـرم فـضاي حالـت در آمـده انـدرا از فـرم پيوسـته بـه گسـسته تبـديل ( كنيم(معادلات 7
  • 7. x k + = x k + dt x k x k + = x k − dt + ω J − J x k + ω J − J − J x k + u k − ω x k J x k + = x k + dt x k x k + = x k − dt ω J − J x k + u k J x k + = x k + dt x k x k + = x k − dt J + J − J x k + J − J x k + u k + x k J x k + = x k + dt u k x k x k dt u k f + + Δ + = Σ− 2 1 J t k t u k u k u k A J B J J ⎡ − − A = ω J − J B = ω J − J − J C = ω J − J D J J J ٤ (٧) ( 1) ( ) ( ( )) 2 1 1 2 ( 1) ( ) ( 4 ( ) ( ) ( ) ( ) ( ) ( )) / 2 2 0 ( 1) ( ) ( ( )) 2 3 3 4 2 3 1 0 2 3 1 6 1 0 9 1 ( 1) ( ) ((3 ( ) ( ) ( )) / ) 4 4 0 ( 1) ( ) ( ( )) 5 5 6 1 3 3 2 2 ( 1) ( ) (( ( ) ( ) ( ) ( ) ( ) ( )) / ) ( 1) ( ) ( ( )) 7 7 1 ( + 1) = ( ) + ( ( )) 8 8 2 ( 1) ( ) ( ( )) 9 9 3 2 1 5 3 0 7 3 2 6 6 0 3 1 2 2 0 x k + = x k + dt u k ω ω ω ( ) ( ( ) ( ) 2 ( ) ρ (٨) 3 2 2 1 0 N k = با مرتب كردن متغييرهاي حالت و كنترلي نهايتـا مـاتريس هـاي حالـت و كنتـرل مـا بفـرم زيـر در مي آيند: (٩) [ ] 1 1 0 0 0 0 0 0 0 / 1 0 0 0 ω / 0 0 ω / 1 0 1 0 1 0 0 1 1 0 0 0 0 0 C J 0 0 / 1 0 0 0 0 0 2 − 0 0 0 0 1 1 0 0 0 0 / 0 0 / 1 / 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 1 4 ( ) ( ) 0 2 3 1 3 ( ) ( ) ω = + − 0 3 1 2 ( ) 2 1 2 0 1 3 2 0 2 3 2 0 3 3 0 3 E J J D J E J J A = − ⎤ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎥ ⎦ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎢ ⎣ − − − = ω ω
  • 8. T T F N − K = − R + B P K − B B P K − A P K = A + BF N − K P K − A + BF N − K F N − K RF N − K + Q u N K F N K x N K ( ( ) ( ) 1 2 J xT t Hx t x t Qx t u t Ru t dt ٥ :DP در LQR -2-1 روش از آخرين مرحله به مرحله اول شروع به حركت كرده و مقادير بهينه كنترلي DP در كليه روش هاي با توجه به هزينه محاسبه مي شوند. براي حالت خطي است كه به سرعت به جـواب مـي رسـ د و DP نيز يكي از روش هاي LQR قاعده بجاي يك تاريخچه كلي از همه حالتها و كنترل هاي P(K) و F(N-K) شما با داشتن يك ماتريس موجود در هر لحظه امكان بدست آوردن هزينه و كنترل مينيمم را داريد. و P(K) و F(N-K) در صورتي كه معادله حالت ما در حالت گسسته بـه فـرم زيـر باشـد، مقـادير و تابع هزينه از دسته روابط 10 بدست مي آيند. min(U) (١٠) x(k +1) = Ax(k) + Bu(k) ( ) [ ( 1) ] ( 1) ( ) [ ( )] ( 1)[ ( )] ( ) ( ) ( − ) = ( − ) ( − ) ( ) ( ) ( ) ( ) 1 2 * , 1 T J J N K x N K P K x N K N K N T T = − = − − ∗ − − از روي تابع هزينه گسسته شده 11 داريم. R و Q ،H با توجه به مقادير ماتريس (١١) t f = + ∫ + t T T f f 0 ( ( ) ( ) ( ( ) ( )) 2 1 با دقت روي تابع هزينه متوجه مي شويم كه: -1 بيشتر هزينه صرف كم كردن فرامين كنترلي است هزينه و مقادير كنترلي تحت تاثير قرار مي گيرند. H -2 با تعاريف متفاوت از بيشترين تلاش بـراي رسـيدن بـه دقـت بـالا در مقـدار نهـايي ،H -3 در صورت بالا بردن اثر متغييرهاي حالت در حالت نهايي است و در مقابل توجه به هزينه اين عمل كمتر خواهد بود. بيـشترين تـلاش بـراي رسـيدن بـه كمتـرين هزينـه در مقـدار ،R -4 در صورت بالا بردن اثر متغييرهاي حالت در حالت نهايي است و در مقابل به دقت كمتر توجه خواهد شد. در نتيجه مقدار نسبي اين ضرايب ماتريسي است كه نشان دهنده توجه مـا بـراي به ينـه كـردن هزينه كل نسبت به آن پارامتر مي باشد.
  • 9. ٦ :H -3-1 سياست محاسبه به گونـه اي كـه هـر دو H راه حل ما براي ايجاد يك تعادل، استفاده از يك حلقه براي محاسبه عامل محدوديت در تلاش فرا مين كنترلي و دقت متغييرهاي حالت در نظر گرفته شـوند، يعنـي هاي گوناگون تابع هزينه محاسبه شده و تـا زمـاني كـه تمـام شـرايط و محـدوديت هـاي -H با كوچـك و H فرامين كنترلي بر آورده نشوند، حلقه متوقف نخواهد شد؛ براي اين كـار يكبـار از بـا مقـادير H نزديك صفر شروع به حركت به مقادير بالا كرده و بلافاصله بعـد از يـافتن اولـين بدست آيد (كـد برنامـه 1). مقـدار H كوچك به سمت صفر حركت مي كنيم تا تقريب دقيقي از 1)، كـه مقـادير كنترلـي و وضـعيتي مـا در - شكل 2 )H= بدست آمده برابر است با 0.15944 1 ديــده مــي شــوند(كــد برنامــه 3)، در ايــن وضــعيت گرچــه تمــامي - 1 تــا 5 - نمودارهــاي 1 محدوديت هاي كنترلي و متغييرهاي حالت بر آورده مي شوند ولي متوجه مي شـويم كـه در ايـن به حالت نهايي خواسته شده نمي رسيم، پـس يـا بايـد محـدوديت هـا را ناديـده t = 45s زمان بازي كرد و يا مدت زم ان كنترلـي در هزينـه را بـالا بـرد، كـه طبـق R و H گرفت و با مقادير محاسبه انجام داده شده توسط كـد برنامـه ( 2) ايـن اتفـاق بـراي خطـاي كمتـر از 1 درجـه در خواهد افتاد. t = 315s 1 توليد خواهد شد كه با ت وجه به - 1 تا 15 - نمودارهاي 11 H در صورت صفر قرار دادن مقدار در صورت تكـرار خـواهيم ديـ د كـه ايـن پديـده قابـل ،Q = دسته روابط ( 10 )، و با توجه به 0 پيش بيني بود، يعني وقتي تنها هزينه مهم ما هزينه كنترلي باشد ، طبيعـي اسـت كـه كمتـرين (h=0, هزينه كنترلي انجام ندادن هيچ واكنشي خواهد بود.(كد برنامه 3 1 خواهد بـود ، و ايـن افـزايش بـه - 1 تا 10 - رفتار ما طبق نمودار هاي 6 H با زياد كردن مقدار معناي بالا بردن اهميت مقدار نهايي متغييرهاي حالت در مقابـل هزينـه كنترلـي مـي باشـد، و همانگونه كه در نمودارها هم مي بينيد، با اين شرط محدوديت هاي كنترلي ما شكـسته خواهنـد (h=100, شد.(كد برنامه 3 H ١ اجرای کد برنامه ١ برای محاسبه - شکل ٢
  • 10. ٧ :H= در 1 ρ با تغيير پارامتر R -4-1 محاسبه 3)، و حالتي كه بتواند - براي اين منظور از كد برنامه 4 در پيوست استفاده شده است(شكل 1 بدست مي آيد. ρ = . محدوديت هاي مساله را ارضا كند در 0069323 R ١ اجرای کد برنامه ۴ برای محاسبه - شکل ٣
  • 11. ٨ H=.15499 ١- نمودار ١
  • 12. ٩ H=.15499 ١- نمودار ٢ H=.15499 ١- نمودار ٣
  • 13. ١٠ H=.15499 ١- نمودار ۴ H=.15499 ١- نمودار ۵
  • 14. ١١ H=100 ١- نمودار ٧ H=100 ١- نمودار ٧
  • 15. ١٢ H=100 ١- نمودار ٨ H=100 ١- نمودار ٩
  • 16. ١٣ H=100 ١- نمودار ١٠ H=0 ١- نمودار ١١
  • 17. ١٤ H=0 ١- نمودار ١٢ H=0 ١- نمودار ١٣
  • 18. ١٥ H=0 ١- نمودار ١۴ H=0 ١- نمودار ١۵
  • 19. ١٦ :N بر حسب مقدار Steady state gain factor -2 رسم نمودارهاي استفاده شـده،و از آنجـايي N براي اين منظور از كد برنامه 5 و مقادير 20،50،200،500 براي بدست آمد (طبق مطالب گفته شده )، بنابراين نمي توان انتظـار داشـت H ≠ كه در اين پروژه 0 به يك مقدار ثابت ميل كند، كـه در نمودارهـاي Steady state gain N كه با افزايش مقدار 2 مي توان اين موضوع را مشاهده كرد، در ضمن برخي از متغييرهاي حالت با توجـه - 2-1 تا 12 و دسته روابط ( 10 )، تاثيري در صـدور فرمـان كنترلـي Steady state gain به صفر بودن ندارند! به ازای کنترل ١ ،N= در 20 steady state gain ١- مقادير - نمودار ٢
  • 20. ١٧ به ازای کنترل ٢ ،N= در 20 steady state gain ٢- مقادير - نمودار ٢ به ازای کنترل ٣ ،N= در 20 steady state gain ٣- مقادير - نمودار ٢
  • 21. ١٨ به ازای کنترل ١ ،N= در 50 steady state gain ۴- مقادير - نمودار ٢ به ازای کنترل ٢ ،N= در 50 steady state gain ۵- مقادير - نمودار ٢
  • 22. ١٩ به ازای کنترل ٣ ،N= در 50 steady state gain ۶- مقادير - نمودار ٢ به ازای کنترل ١ ،N= در 200 steady state gain ٧- مقادير - نمودار ٢
  • 23. ٢٠ به ازای کنترل ٢ ،N= در 200 steady state gain ٨- مقادير - نمودار ٢ به ازای کنترل ٣ ،N= در 200 steady state gain ٩- مقادير - نمودار ٢
  • 24. ٢١ به ازای کنترل ١ ،N= در 500 steady state gain ١٠ - مقادير - نمودار ٢ به ازای کنترل ٢ ،N= در 500 steady state gain ١١ - مقادير - نمودار ٢
  • 25. ٢٢ به ازای کنترل ٣ ،N= در 500 steady state gain ١٢ - مقادير - نمودار ٢
  • 26. :ρ -3 رسم تغييرات بخش كنترلي تابع هزينه در ازاي تغيير ضريب براي اين بخش از كد برنامه 6 استفاده شده است،همانگونه كه مشاهد ش د مـي شـود در مقـادير بسيار زياد بوده و به شدت بخش كنترلي تابع هزينه را كاهش مـي دهـد، ρ پايين تاثير افزايش 0، كمتر شده و به / بيشتر از 1 ρ 3 ديده مي شود، اين اثر با افزايش - اما همانگونه كه در نمودار 2 مقدار ثابت حدود 7 ميل مي كند. ٢٣ ٠/ ٠ تا ٠٠٩ / در بازه ٠٠٠١ ρ ١- تغييرات بخش کنترلی تابع ھزينه در ازای تغيير ضريب - نمودار ٣ ٠ تا ٢ / در بازه ٠٠٠١ ρ ١- تغييرات بخش کنترلی تابع ھزينه در ازای تغيير ضريب - نمودار ٣
  • 27. ٢٤ -4 نتيجه گيري و پيشنهاد: و خطي سازي، تمامي خواسته هاي مساله يكجا مرتفع نمي گـردد و بايـد از LQR -1 با روش نظاير روش هاي بكار رفته در اين پروژه استفاده كرد. -2 در روش غير خطي نيز بدليل حجم بالاي مح اسبات بايد بسياري از موارد نظير ميان يـابي و تقسيم بندي بازه ها تضعيف شوند تا بتوان از برنامه اجرا گرفت، كه اين خود از اطم ينان به حـل مي كاهد.(كد برنامه 7 و زير برنامه ها) -3 در كد نويسي مي توان با توجه به اثر متغيير حالتي كه باعث عبـور از محـدوده تعيـين شـده را بعنوان متغيير در نظر گرفت و در اين حالت احتمالا H كنترلر ما مي شود، دراي ههاي ماتريس هم در مدت 45 ثانيه به متغييرهاي LQR اي پيدا كرد كه در آن حالت با – H بتوان ماتريس دلخواه دست يافت. -4 در حل غيرخطي بدليل نياز به يك كنترلر با رفتار آرام و با اين ديد كه در وارد شدن شـتابها به جسم محدوديت داريم، در هر حالت تنها متغييرهاي حالت نزديك به متغيير حالـت مرحلـه بعد را در نظر گرفت و با اين كار از حجم محاسبات تا حدي كاست.
  • 28. ٢٥ پيوست: كد برنامه ها : كد برنامه 1 clc clear close all tf=45; xd=[0; 0; 0; 0; 0; 0; 0; 0; 0];%desired states for final h=1; J=[1308 2210 2250]; I=[.08 .08 .08]; a1=6378.137+800;%a=Re+h omeg0=sqrt(398600/(a1^3));%n=sqrt(mu/a^3) N=45; dt=tf/N; ro=.001; R=2*ro*eye(3)*dt; Q=zeros(9); a=(4*omeg0^2*(J(2)-J(3))); b=(omeg0*(J(2)-J(3)-J(1))); c=(3*omeg0^2*(J(1)-J(3))); d=omeg0*(J(3)+J(1)-J(2)); e=omeg0^2*(J(2)-J(1)); A=[1 dt*1 0 0 0 0 0 0 0; -(a/J(1))*dt 1 0 0 0 –dt*(b/J(1)) 0 0 dt*omeg0/J(1); 0 0 1 1*dt 0 0 0 0 0; 0 0 –dt*(c/J(2)) 1 0 0 0 0 0; 0 0 0 0 1 1*dt 0 0 0; 0 –(d/J(3))*dt 0 0 –(e/J(3))*dt 1 –(omeg0/J(3))*dt 0 0; 0 0 0 0 0 0 1 0 0; 0 0 0 0 0 0 0 1 0; 0 0 0 0 0 0 0 0 1;]; B=dt*[0 0 0; -(1/J(1)) 0 0; 0 0 0; 0 -(1/J(2)) 0; 0 0 0; 0 0 -(1/J(3)); 1 0 0; 0 1 0; 0 0 1]; do_it=1; aa=0; while do_it<2 aa=aa+1; P(:,:,1)=h*eye(9);%2/tf*eye(9);%H=0.26 for k=1:N%n=45 @ dt=1sec P_use(:,:,N+1-k)=P(:,:,k); F(:,:,k+1)=-(inv(R+(B'*P(:,:,k)*B)))*(B'*P(:,:,k)*A); P(:,:,k+1)=((A+B*F(:,:,k+1))'*P(:,:,k)*(A+B*F(:,:,k+1)))+((F(:,:,k+1) )'*R*F(:,:,k+1))+Q;
  • 29. ٢٦ F_use(:,:,N+2-k)=F(:,:,k+1); end %calculate min cost and u_star x(:,1)=[60*pi/180; 0; 30*pi/180; 0; -45*pi/180; 0; 0; 0; 0];%initial state for k=1:N min_u(:,k)=F_use(:,:,k+1)*x(:,k); min_j(k)=.5*(x(:,k)'*P_use(:,:,k)*x(:,k)); x(:,k+1)=state_eq(x(:,k),min_u(:,k),dt); end h=-.001*h+log(.2*h+1.2);%abs(.01*h-log(.1*h+1.1)); % h=h-.01*h; max_u1=max(min_u(1,☺); max_u2=max(min_u(2,☺); max_u3=max(min_u(3,☺); min_u1=min(min_u(1,☺); min_u2=min(min_u(2,☺); min_u3=min(min_u(3,☺); m1=[max_u1;min_u1]; m2=[max_u2;min_u2]; m3=[max_u3;min_u3]; figure(1) subplot(2,1,1) bar_plot=[m1 m2 m3]; text_loc=max(max(bar_plot)); bar(bar_plot) title('max & min of control inputs vs controller numbers') xlabel('max control number(1 2 3)---min control number(1 2 3)') ylabel('controller reaction') text(1,1.05*text_loc,['bf ( H= ' num2str(h) ')']) subplot(2,1,2) bar([xd(:,1)-x(:,k+1)]) title('state errors vs state numbers') xlabel('state numbers') ylabel('states error') if (abs(max_u1<=1.05)) && (abs(max_u2<=1.05)) && (abs(max_u3<=1.05)) && (abs(min_u1>=-1.05)) && (abs(min_u1>=-1.05)) && (abs(min_u1>=- 1.05)) do_it=4; h end end%while tx=0:dt:tf; tu=0:dt:tf-dt; .( پايان كد برنامه( 1
  • 30. ٢٧ : كد برنامه 2 clc clear close all tf=45; simu=0; h=0.15944; J=[1308 2210 2250]; I=[.08 .08 .08]; a1=6378.137+800;%a=Re+h omeg0=sqrt(398600/(a1^3));%n=sqrt(mu/a^3) N=45; dt=tf/N; ro=.001; R=2*ro*eye(3)*dt; Q=zeros(9); a=(4*omeg0^2*(J(2)-J(3))); b=(omeg0*(J(2)-J(3)-J(1))); c=(3*omeg0^2*(J(1)-J(3))); d=omeg0*(J(3)+J(1)-J(2)); e=omeg0^2*(J(2)-J(1)); A=[1 dt*1 0 0 0 0 0 0 0; -(a/J(1))*dt 1 0 0 0 -dt*(b/J(1)) 0 0 dt*omeg0/J(1); 0 0 1 1*dt 0 0 0 0 0; 0 0 -dt*(c/J(2)) 1 0 0 0 0 0; 0 0 0 0 1 1*dt 0 0 0; 0 -(d/J(3))*dt 0 0 -(e/J(3))*dt 1 -(omeg0/J(3))*dt 0 0; 0 0 0 0 0 0 1 0 0; 0 0 0 0 0 0 0 1 0; 0 0 0 0 0 0 0 0 1;]; B=dt*[0 0 0; -(1/J(1)) 0 0; 0 0 0; 0 -(1/J(2)) 0; 0 0 0; 0 0 -(1/J(3)); 1 0 0; 0 1 0; 0 0 1]; do_it=1; aa=0; while do_it<2 dt=tf/N; R=2*ro*eye(3)*dt; A=[1 dt*1 0 0 0 0 0 0 0; -(a/J(1))*dt 1 0 0 0 -dt*(b/J(1)) 0 0 dt*omeg0/J(1); 0 0 1 1*dt 0 0 0 0 0; 0 0 -dt*(c/J(2)) 1 0 0 0 0 0; 0 0 0 0 1 1*dt 0 0 0; 0 -(d/J(3))*dt 0 0 -(e/J(3))*dt 1 -(omeg0/J(3))*dt 0 0; 0 0 0 0 0 0 1 0 0; 0 0 0 0 0 0 0 1 0; 0 0 0 0 0 0 0 0 1;]; B=dt*[0 0 0; -(1/J(1)) 0 0; 0 0 0; 0 -(1/J(2)) 0; 0 0 0; 0 0 -(1/J(3)); 1 0 0;
  • 31. ٢٨ 0 1 0; 0 0 1]; aa=aa+1; P(:,:,1)=h*eye(9);%H=0.26 for k=1:N%n=45 @ dt=1sec P_use(:,:,N+1-k)=P(:,:,k); F(:,:,k+1)=-(inv(R+(B'*P(:,:,k)*B)))*(B'*P(:,:,k)*A); P(:,:,k+1)=((A+B*F(:,:,k+1))'*P(:,:,k)*(A+B*F(:,:,k+1)))+((F(:,:,k+1) )'*R*F(:,:,k+1))+Q; F_use(:,:,N+2-k)=F(:,:,k+1); end %calculate min cost and u_star x(:,1)=[60*pi/180; 0; 30*pi/180; 0; -45*pi/180; 0; 0; 0; 0];%initial state for k=1:N min_u(:,k)=F_use(:,:,k+1)*x(:,k); min_j(k)=.5*(x(:,k)'*P_use(:,:,k)*x(:,k)); x(:,k+1)=state_eq(x(:,k),min_u(:,k),dt); end tf=tf+.5 xd=[0; 0; 0; 0; 0; 0; 0; 0; 0]; if (abs((xd(1,1)-(x(1,k+1)))*180/pi)<=1) && (abs((xd(2,1)- (x(2,k+1)))*180/pi)<=1) && (abs((xd(3,1)-(x(3,k+1)))*180/pi)<=1) && (abs((xd(4,1)-(x(4,k+1)))*180/pi)<=1) && (abs((xd(5,1)- (x(5,k+1)))*180/pi)<=1) && (abs((xd(6,1)-(x(6,k+1)))*180/pi)<=1) && (abs((xd(7,1)-(x(7,k+1))))<=1) && (abs((xd(8,1)-(x(8,k+1))))<=1) && (abs(xd(9,1)-(x(9,k+1)))<=1)%abs(max_u1<=1.05)) && (abs(max_u2<=1.05)) && (abs(max_u3<=1.05)) && (abs(min_u1>=-1.05)) && (abs(min_u1>=-1.05)) && (abs(min_u1>=-1.05)) do_it=4; tf end end%while . پايان كد برنامه 2
  • 32. ٢٩ : كد برنامه 3 clc clear close all tf=4500; h=.15944;%0;%59;%.001;%100;%.1622;%100;%.2178;%.1622;%10777;%.1622;%i nitial H h1=.0499 h2=.1037 err=9.5e-4 .2178 J=[1308 2210 2250]; I=[.08 .08 .08]; a1=6378.137+800;%a=Re+h omeg0=sqrt(398600/(a1^3));%n=sqrt(mu/a^3) N=45; dt=tf/N; ro=.001; R=2*ro*eye(3)*dt; Q=zeros(9); a=(4*omeg0^2*(J(2)-J(3))); b=(omeg0*(J(2)-J(3)-J(1))); c=(3*omeg0^2*(J(1)-J(3))); d=omeg0*(J(3)+J(1)-J(2)); e=omeg0^2*(J(2)-J(1)); A=[1 dt*1 0 0 0 0 0 0 0; -(a/J(1))*dt 1 0 0 0 -dt*(b/J(1)) 0 0 dt*omeg0/J(1); 0 0 1 1*dt 0 0 0 0 0; 0 0 -dt*(c/J(2)) 1 0 0 0 0 0; 0 0 0 0 1 1*dt 0 0 0; 0 -(d/J(3))*dt 0 0 -(e/J(3))*dt 1 -(omeg0/J(3))*dt 0 0; 0 0 0 0 0 0 1 0 0; 0 0 0 0 0 0 0 1 0; 0 0 0 0 0 0 0 0 1;]; B=dt*[0 0 0; -(1/J(1)) 0 0; 0 0 0; 0 -(1/J(2)) 0; 0 0 0; 0 0 -(1/J(3)); 1 0 0; 0 1 0; 0 0 1]; P(:,:,1)=h*eye(9);%2/tf*eye(9);%H=0.26 for k=1:N%n=45 because dt=1sec P_use(:,:,N+1-k)=P(:,:,k); F(:,:,k+1)=-(inv(R+(B'*P(:,:,k)*B)))*(B'*P(:,:,k)*A); P(:,:,k+1)=((A+B*F(:,:,k+1))'*P(:,:,k)*(A+B*F(:,:,k+1)))+((F(:,:,k+1) )'*R*F(:,:,k+1))+Q; F_use(:,:,N+2-k)=F(:,:,k+1); end %calculate min cost and u_star x(:,1)=[pi/3; 0; pi/6; 0; -pi/4; 0; 0; 0; 0];%initial state for k=1:N min_u(:,k)=F_use(:,:,k+1)*x(:,k); min_j(k)=.5*(x(:,k)'*P_use(:,:,k)*x(:,k)); x(:,k+1)=state_eq(x(:,k),min_u(:,k),dt); end tx=0:dt:tf; tu=0:dt:tf-dt; subplot(3,1,1) plot(tu,min_u(1,:)) title('u1')
  • 33. title('control1 vs time') xlabel('time(sec)') ylabel('{h_1}^{bf .} ') subplot(3,1,2) plot(tu,min_u(2,:)) title('u2') title('control2 vs time') xlabel('time(sec)') ylabel('{h_2}^{bf .} ') subplot(3,1,3) plot(tu,min_u(3,:)) title('u3') title('control3 vs time') xlabel('time(sec)') ylabel('{h_3}^{bf .} ') figure(2) subplot(2,1,1) plot(tx,x(1,:)*180/pi) title('state1 vs time') xlabel('time(sec)') ylabel('Phi (deg.)') subplot(2,1,2) plot(tx,x(2,:)*180/pi) title('state2 vs time') xlabel('time(sec)') ylabel('phi^{bf .} (deg./sec)') figure(3) subplot(2,1,1) plot(tx,x(3,:)*180/pi) title('state3 vs time') xlabel('time(sec)') ylabel('theta (deg.)') subplot(2,1,2) plot(tx,x(4,:)*180/pi) title('state4 vs time') xlabel('time(sec)') ylabel('theta^{bf .} (deg./sec)') figure(4) subplot(2,1,1) plot(tx,x(5,:)*180/pi) title('state5 vs time') xlabel('time(sec)') ylabel('Psi (deg.)') subplot(2,1,2) plot(tx,x(6,:)*180/pi) title('state6 vs time') xlabel('time(sec)') ylabel('Psi^{bf .} (deg./sec)') figure(5) subplot(3,1,1) plot(tx,x(7,:)) title('state7 vs time') xlabel('time(sec)') ylabel('h_1') ٣٠
  • 34. subplot(3,1,2) plot(tx,x(8,:)) title('state8 vs time') xlabel('time(sec)') ylabel('h_2') subplot(3,1,3) plot(tx,x(9,:)) title('state9 vs time') xlabel('time(sec)') ylabel('h_3') ٣١ . پايان كد برنامه 3 : كد برنامه 4 clc clear close all tf=45; xd=[0; 0; 0; 0; 0; 0; 0; 0; 0];%desired states for final h=0;%.15944;%.1622;%10777;%.1622;%initial H J=[1308 2210 2250]; I=[.08 .08 .08]; a1=6378.137+800;%a=Re+h omeg0=sqrt(398600/(a1^3));%n=sqrt(mu/a^3) N=45; dt=tf/N; ro=.001; R=2*ro*eye(3)*dt; Q=zeros(9); a=(4*omeg0^2*(J(2)-J(3))); b=(omeg0*(J(2)-J(3)-J(1))); c=(3*omeg0^2*(J(1)-J(3))); d=omeg0*(J(3)+J(1)-J(2)); e=omeg0^2*(J(2)-J(1)); A=[1 dt*1 0 0 0 0 0 0 0; -(a/J(1))*dt 1 0 0 0 -dt*(b/J(1)) 0 0 dt*omeg0/J(1); 0 0 1 1*dt 0 0 0 0 0; 0 0 -dt*(c/J(2)) 1 0 0 0 0 0; 0 0 0 0 1 1*dt 0 0 0; 0 -(d/J(3))*dt 0 0 -(e/J(3))*dt 1 -(omeg0/J(3))*dt 0 0; 0 0 0 0 0 0 1 0 0; 0 0 0 0 0 0 0 1 0; 0 0 0 0 0 0 0 0 1;]; B=dt*[0 0 0; -(1/J(1)) 0 0; 0 0 0; 0 -(1/J(2)) 0; 0 0 0; 0 0 -(1/J(3)); 1 0 0;
  • 35. ٣٢ 0 1 0; 0 0 1]; do_it=1; aa=0; while do_it<2 aa=aa+1; R=2*ro*eye(3)*dt; P(:,:,1)=h*eye(9);%2/tf*eye(9);%H=0.26 for k=1:N%n=45 because dt=1sec P_use(:,:,N+1-k)=P(:,:,k); F(:,:,k+1)=-(inv(R+(B'*P(:,:,k)*B)))*(B'*P(:,:,k)*A); P(:,:,k+1)=((A+B*F(:,:,k+1))'*P(:,:,k)*(A+B*F(:,:,k+1)))+((F(:,:,k+1) )'*R*F(:,:,k+1))+Q; F_use(:,:,N+2-k)=F(:,:,k+1); end %calculate min cost and u_star x(:,1)=[60*pi/180; 0; 30*pi/180; 0; -45*pi/180; 0; 0; 0; 0];%initial state for k=1:N min_u(:,k)=F_use(:,:,k+1)*x(:,k); min_j(k)=.5*(x(:,k)'*P_use(:,:,k)*x(:,k)); x(:,k+1)=state_eq(x(:,k),min_u(:,k),dt); end ro=ro+.01*ro; max_u1=max(min_u(1,:)); max_u2=max(min_u(2,:)); max_u3=max(min_u(3,:)); min_u1=min(min_u(1,:)); min_u2=min(min_u(2,:)); min_u3=min(min_u(3,:)); m1=[max_u1;min_u1]; m2=[max_u2;min_u2]; m3=[max_u3;min_u3]; figure(1) subplot(2,1,1) bar_plot=[m1 m2 m3]; text_loc=max(max(bar_plot)); bar(bar_plot) title('max & min of control inputs vs controller numbers') xlabel('max control number(1 2 3)---min control number(1 2 3)') ylabel('controller reaction') text(1,1.05*text_loc,['bf ( H= ' num2str(h) ')']) subplot(2,1,2) bar([xd(:,1)-x(:,k+1)]) title('state errors vs state numbers') xlabel('state numbers') ylabel('states error') if (abs(max_u1<=1.05)) && (abs(max_u2<=1.05)) && (abs(max_u3<=1.05)) && (abs(min_u1>=-1.05)) && (abs(min_u1>=-1.05)) && (abs(min_u1>=- 1.05)) do_it=4; disp(['H= ' num2str(h)]) disp(['ro= ' num2str(ro)]) end end%while tx=0:dt:tf; tu=0:dt:tf-dt;
  • 36. ٣٣ : كد برنامه 5 clc clear close all tf=45; h=0;%.15944;%0;%59;%.001;%100;%.1622;%100;%.2178;%.1622;%10777;%.1622 ;%initial H h1=.0499 h2=.1037 err=9.5e-4 .2178 nom=0; J=[1308 2210 2250]; I=[.08 .08 .08]; fig_no=0; a1=6378.137+800;%a=Re+h fig_no=0; %for N loop inith=5; stp=25; endesh=105; %end for N loop omeg0=sqrt(398600/(a1^3));%n=sqrt(mu/a^3) N_mat=[20 50 200 500]; for ii=1:4 N=N_mat(ii); nom=nom+1; dt=tf/N; ro=.001; R=2*ro*eye(3)*dt; Q=zeros(9); a=(4*omeg0^2*(J(2)-J(3))); b=(omeg0*(J(2)-J(3)-J(1))); c=(3*omeg0^2*(J(1)-J(3))); d=omeg0*(J(3)+J(1)-J(2)); e=omeg0^2*(J(2)-J(1)); A=[1 dt*1 0 0 0 0 0 0 0; -(a/J(1))*dt 1 0 0 0 -dt*(b/J(1)) 0 0 dt*omeg0/J(1); 0 0 1 1*dt 0 0 0 0 0; 0 0 -dt*(c/J(2)) 1 0 0 0 0 0; 0 0 0 0 1 1*dt 0 0 0; 0 -(d/J(3))*dt 0 0 -(e/J(3))*dt 1 -(omeg0/J(3))*dt 0 0; 0 0 0 0 0 0 1 0 0; 0 0 0 0 0 0 0 1 0; 0 0 0 0 0 0 0 0 1;]; B=dt*[0 0 0; -(1/J(1)) 0 0; 0 0 0; 0 -(1/J(2)) 0; 0 0 0; 0 0 -(1/J(3)); 1 0 0; 0 1 0; 0 0 1]; P(:,:,1)=h*eye(9);%2/tf*eye(9);%H=0.26 for k=1:N%n=45 because dt=1sec P_use(:,:,N+1-k)=P(:,:,k); F(:,:,k+1)=-(inv(R+(B'*P(:,:,k)*B)))*(B'*P(:,:,k)*A); P(:,:,k+1)=((A+B*F(:,:,k+1))'*P(:,:,k)*(A+B*F(:,:,k+1)))+((F(:,:,k+1) )'*R*F(:,:,k+1))+Q;
  • 37. ٣٤ F_use(:,:,N+2-k)=F(:,:,k+1); end %calculate min cost and u_star x(:,1)=[pi/3; 0; pi/6; 0; -pi/4; 0; 0; 0; 0];%initial state for k=1:N min_u(:,k)=F_use(:,:,k+1)*x(:,k); min_j(k)=.5*(x(:,k)'*P_use(:,:,k)*x(:,k)); x(:,k+1)=state_eq(x(:,k),min_u(:,k),dt); end tx=0:dt:tf; tu=0:dt:tf-dt; for satr=1:3 fig_no=fig_no+1; figure(fig_no) for sot=1:9 subplot(3,3,sot) F_plot(1:N)=F_use(satr,sot,2:end); plot([1:N],F_plot) title(['F' num2str(satr) num2str(sot) ', control= ' num2str(satr) ', state= ' num2str(sot)]) end%sot end%satr end%for N . پايان كد برنامه 5
  • 38. ٣٥ : كد برنامه 6 clc clear close all tf=45; h=.15944;%0;%59;%.001;%100;%.1622;%100;%.2178;%.1622;%10777;%.1622;%i nitial H h1=.0499 h2=.1037 err=9.5e-4 .2178 J=[1308 2210 2250]; I=[.08 .08 .08]; a1=6378.137+800;%a=Re+h omeg0=sqrt(398600/(a1^3));%n=sqrt(mu/a^3) N=45; dt=tf/N; first_ro=0.0001; end_ro=.1; ro_step=.001; ro=[first_ro:ro_step:end_ro]; ro_iteration=(end_ro-first_ro)/ro_step+1; for ro_iter=1:ro_iteration R=2*ro(ro_iter)*eye(3)*dt; Q=zeros(9); a=(4*omeg0^2*(J(2)-J(3))); b=(omeg0*(J(2)-J(3)-J(1))); c=(3*omeg0^2*(J(1)-J(3))); d=omeg0*(J(3)+J(1)-J(2)); e=omeg0^2*(J(2)-J(1)); A=[1 dt*1 0 0 0 0 0 0 0; -(a/J(1))*dt 1 0 0 0 -dt*(b/J(1)) 0 0 dt*omeg0/J(1); 0 0 1 1*dt 0 0 0 0 0; 0 0 -dt*(c/J(2)) 1 0 0 0 0 0; 0 0 0 0 1 1*dt 0 0 0; 0 -(d/J(3))*dt 0 0 -(e/J(3))*dt 1 -(omeg0/J(3))*dt 0 0; 0 0 0 0 0 0 1 0 0; 0 0 0 0 0 0 0 1 0; 0 0 0 0 0 0 0 0 1;]; B=dt*[0 0 0; -(1/J(1)) 0 0; 0 0 0; 0 -(1/J(2)) 0; 0 0 0; 0 0 -(1/J(3)); 1 0 0; 0 1 0; 0 0 1]; P(:,:,1)=h*eye(9);%P(0)=H for k=1:N%N=45 when dt=1sec P_use(:,:,N+1-k)=P(:,:,k); F(:,:,k+1)=-(inv(R+(B'*P(:,:,k)*B)))*(B'*P(:,:,k)*A); P(:,:,k+1)=((A+B*F(:,:,k+1))'*P(:,:,k)*(A+B*F(:,:,k+1)))+((F(:,:,k+1) )'*R*F(:,:,k+1))+Q; F_use(:,:,N+2-k)=F(:,:,k+1); end %calculate min cost and u_star x(:,1)=[pi/3; 0; pi/6; 0; -pi/4; 0; 0; 0; 0];%initial state for k=1:N min_u(:,k)=F_use(:,:,k+1)*x(:,k); min_j(k)=.5*(x(:,k)'*P_use(:,:,k)*x(:,k)); x(:,k+1)=state_eq(x(:,k),min_u(:,k),dt); end
  • 39. tx=0:dt:tf; tu=0:dt:tf-dt; %calculate cost function cost_value(ro_iter)=sum(min_j); figure(1) plot(ro(ro_iter),cost_value(ro_iter)) hold on drawnow end%ro_iteration ٣٦ . پايان كد برنامه 6 كد برنامه 7 و زير برنامه ها: %+++++++++++ main program DP ++++++++++++ clc clear tf=45;%sec x_prepare(1:3)=[0 0 0];%final omega x_prepare(4:6)=[-7 -7 -7];%final h x_prepare(7:10)=[1 0 0 0];%final quaternion dt=5;%delta t =5s ==>45/5=9step u=[-1.05:.2625:1.05];%controller signal x=[-.05:.025:0.05];%interval for omega; state signal xx=[-7:3.5:7];%interval for h xxx=[-1, -.7233,-.532,-.4397,-.0223,0, .0223,.4397, .532, .7233,1]; user_wanna=3;%kind of states kind_control=3;%kind of control %+flag 1 : produce all kind of states and controlers that user want to have! for do_it=1:user_wanna%3 states generalized_x1(do_it,:)=x; end for do_it=1:user_wanna%3 states generalized_x2(do_it,:)=xx; end for do_it=1:user_wanna+1%4 states generalized_x3(do_it,:)=xxx; end % for generalized_x4=1:user_wanna % generalized_x4(do_it,:)=x; % end for do_it=1:kind_control generalized_u(do_it,:)=u; end [i_s1,i_f]=first_end(generalized_x1(1,:),x_prepare(1)); [i_s2,i_f2]=first_end(generalized_x1(2,:),x_prepare(2)); [i_s3,i_f3]=first_end(generalized_x1(3,:),x_prepare(3)); [i_s4,i_f4]=first_end(generalized_x2(1,:),x_prepare(4)); [i_s5,i_f5]=first_end(generalized_x2(2,:),x_prepare(5)); [i_s6,i_f6]=first_end(generalized_x2(3,:),x_prepare(6)); [i_s7,i_f7]=first_end(generalized_x3(1,:),x_prepare(7)); [i_s8,i_f8]=first_end(generalized_x3(2,:),x_prepare(8)); [i_s9,i_f9]=first_end(generalized_x3(3,:),x_prepare(9)); [i_s10,i_f10]=first_end(generalized_x3(4,:),x_prepare(10)); %-flag 1
  • 40. N=tf/dt;%final_stage [nothing,j_f]=size(u); j_f2=j_f; j_f3=j_f2; % [nothing,i_f]=size(x); % i_f2=i_f; % i_f3=i_f2; % [nothing,i_f4]=size(xx); % i_f5=i_f4; % i_f6=i_f5; % [nothing,i_f7]=size(xxx); % i_f8=i_f7; % i_f9=i_f8; % i_f10=i_f9; j_star(N+1,1:i_f)=0; j_stak(1,1:j_f)=0; for k=N:-1:1%stage counter ٣٧ k for i10=i_s10:i_f10 for i9=i_s9:i_f9 for i8=i_s8:i_f8 for i7=i_s7:i_f7 for i6=i_s6:i_f6 for i5=i_s5:i_f5 for i4=i_s4:i_f4 for i3=i_s3:i_f3 for i2=i_s2:i_f2 % for i1=1:i_f1 for i=i_s1:i_f%state counter generalized_x1 for j=1:j_f for j2=1:j_f2 for j3=1:j_f3%controller counter x_next=state_eq(generalized_u(1,j),generalized_u(2,j2),generalized_u( 3,j3),generalized_x1,generalized_x2,generalized_x3,i,i2,i3,i4,i5,i6,i 7,i8,i9,i10,dt); %new [nothing,col2]=find(x==x_next); [i_s1,i_f]=first_end(x,x_next(1)); [i_s2,i_f2]=first_end(x,x_next(2)); [i_s3,i_f3]=first_end(x,x_next(3)); [i_s4,i_f4]=first_end(xx,x_next(4)); [i_s5,i_f5]=first_end(xx,x_next(5)); [i_s6,i_f6]=first_end(xx,x_next(6)); [i_s7,i_f7]=first_end(xxx,x_next(7)); [i_s8,i_f8]=first_end(xxx,x_next(8)); [i_s9,i_f9]=first_end(xxx,x_next(9)); [i_s10,i_f10]=first_end(xxx,x_next(10)); %new
  • 41. ٣٨ if ((1/10)*(abs(x_next-x_prepare)))<=.05%new check column 10=number of states % [nothing,colmn]=find(x_next==x_prepare);%redo with interpolate % if (~isempty(colmn) && colmn==10) if k==N stage='last'; else stage='nono'; end if k==N%final stage only j_c(k,i,j)=cost_function(u(j),u(j2),u(j3),stage,tf,dt); % j_c(k,i,j)=cost_function(u(j),u(j2),u(j3),generalized_x,generalized_x 2,generalized_x3,generalized_x4,stage,x_next,i,i2,i3,i4,i5,i6,i7,i8,i 9,i10); else%final and this stage j_c(k,i,j)=cost_function(u(j),u(j2),u(j3),stage,tf,dt)+min(j_stak(1,: ));%j_stak(1,find_next_j(x_next,x)); % j_c(k,i,j)=cost_function(u(j),u(j2),u(j3),generalized_x(:,i),stage,x_ next)+j_stak(1,find_next_j(x_next,x)); end else%else check colmn j_c(k,i,j)=1e6;%for diffrence between 0 and not acceptable amounts end%if check colmn end%j3 end%j2 end%j end%i % end%i1 end%i2 end%i3 end%i4 end%i5 end%i6 end%i7 end%i8 end%i9 end%i10 for i=1:i_f [j_star(k,i),u_star_index(i)]=min(j_c(k,i,:)); %++A1 best use: find(j_c(k,i,:)==min(j_c(k,i,:))) end j_stak=j_star(k,:); u_star(k,:)=u(u_star_index); u_stak=u_star(k,:); end%k
  • 42. function [i_start,i_end]=first_end(x_length,current_x) [nothing,col]=find(current_x==x_length); [nothing,a]=size(x_length); i_start=col-1; i_end=col+1; if i_start<1 ٣٩ i_start=1; end if i_end>a i_end=a; end end function min_j_index=find_next_j(x_next,x) % min_j_index=find_next_j(x_next,x) %scheme of variable min_j: min_j(stage index,input index) [nothing,min_j_index]=find(x==x_next); end function [c] = cost_function(u1,u2,u3,stage,tf,dt) % [c] = cost_fcn(u,x,stage,x_last) ro=.001; if stage=='last' c=tf;%(k) last stage cost function else c=ro*dt*(u1^2)+(u2^2)+(u3^2);%(1 until k-1) cost function in stages) end%if end function [c] = cost_fcn(u1,u2,u3,gen_x1,gen_x2,gen_x3,gen_x4,stage,x_last,i1,i2,i3,i 4,i5,i6,i7,i8,i9,i10) % [c] = cost_fcn(u,x,stage,x_last) if stage=='last' c=(x_last^2)+(2*u^2);%(k) last stage cost function else c=2*u^2;%(1 until k-1) cost function in stages end%if end پايان كد برنامه 7 و زير برنامه ها.