root/applications/dual/IterativeLocal/pmsm_ildp3.m @ 858

Revision 846, 19.9 kB (checked in by vahalam, 14 years ago)
Line 
1function pmsm_ildp3
2%verze ildp algoritmu s uvazovanim P (v logaritmu) pro PMSM motor
3%rozsirena verze o diag P v pi aproximaci u
4tic
5
6    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
7    %pocatecni konstanty
8   
9    Iterace = 4; %iterace
10    K = 20; %casy
11    N = 50; %vzorky
12
13    %konstanty motoru
14    %Rs = 0.28;
15    %Ls = 0.003465;
16    %PSIpm = 0.1989;
17    %kp = 1.5;
18    %p = 4.0;
19    %J = 0.04;
20    DELTAt = 0.000125;
21
22    %upravene konstanty
23    Ca = 0.9898;
24    Cb = 0.0072;
25    Cc = 0.0361;
26    Cd = 1.0;
27    Ce = 0.0149;
28
29    %omezeni rizeni
30    cC1 = 100;
31%     cLb = -50;
32%     cUb = 50;
33
34    %matice
35    %kovariancni matice Q a R
36    mQ = diag([0.0013 0.0013 5.0e-6 1.0e-10]);
37    mR = diag([0.0006 0.0006]);
38   
39    mSigma = mR*mR';
40
41    %matice pro vypocet
42    %matice A zavisla na parametrech
43    mA = zeros(4);
44    mA(1,1) = Ca;
45    mA(2,2) = Ca;
46    mA(3,3) = Cd;
47    mA(4,4) = 1;
48    mA(4,3) = DELTAt;
49
50    %macite C konstantni
51    mC = [ 1 0 0 0; 0 1 0 0];   
52
53    %pozadovana hodnota otacek
54    omega_t_stripe = 1.0015;
55   
56    %pocatecni hodnoty
57    X0 = [0; 0; 1; pi/2];
58    Y0 = [0; 0];
59    P0 = diag([0.01 0.01 0.01 0.01]);
60   
61    h_bel = 0;
62    h_beldx = [0; 0; 0; 0; 0; 0; 0; 0];
63           
64    %velikost okoli pro lokalni metodu
65    rho = 0.1;
66   
67%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
68    %globalni promenne
69
70    Kpi_alfa = ones(9, K); %konstanty aproximace slozky rizeni u_alfa
71        Kpi_alfa(1, :) = (Cd - Cb*Ce)*ones(1, K);
72        Kpi_alfa(2, :) = Ca*Ce*ones(1, K);
73        Kpi_alfa(3, :) = Ca*Ce*ones(1, K);
74        Kpi_alfa(4, :) = Cc*Ce*ones(1, K);
75
76    Kpi_beta = ones(9, K); %konstanty aproximace slozky rizeni u_beta
77        Kpi_beta(1, :) = (Cd - Cb*Ce)*ones(1, K);
78        Kpi_beta(2, :) = Ca*Ce*ones(1, K);
79        Kpi_beta(3, :) = Ca*Ce*ones(1, K);
80        Kpi_beta(4, :) = Cc*Ce*ones(1, K);
81       
82    Wv = zeros(35, K); %konstanty aproximace Bellmanovy fce
83   
84    Xkn = zeros(4, K, N); % X = [i_alfa, i_beta, omega, theta]
85    Ykn = zeros(2, K, N); % Y = [i_alfa, i_beta]
86    Pkn = zeros(4, 4, K, N); % P = N vzorku posloupnosti K matic 4x4
87   
88    mKy = zeros(4, 2); % K = pomocna matice pro vypocet
89    mRy = zeros(2, 2); % R = pomocna matice pro vypocet
90   
91    Xstripe = zeros(4, K);
92    Ystripe = zeros(4, K);
93    Pstripe = zeros(4, 4, K);
94 
95    Epsilon = zeros(20, N); %globalni promena pro vypocet Bellmanovy fce z odchylek (X - Xprum)
96
97    gka = 0; %globalni promenna pro prenos casu k
98    gnu = 0; %globalni promenna pro prenos vzorku n
99   
100    Uopt2 = zeros(2, N);
101    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
102    %hlavni iteracni smycka
103    for i = 1:Iterace,
104
105        disp('Iterace: ');
106        i
107       %generovani stavu
108       for n = 1:N,
109            Xkn(:, 1, n) = X0;
110            Ykn(:, 1, n) = Y0 + mR * [randn(); randn()];
111            Pkn(:, :, 1, n) = P0;
112           
113            for k = 1:K-1,
114               Uk = uPi(k, Xkn(:, k, n), Pkn(:, :, k, n));
115
116               mRy = mC * Pkn(:, :, k, n) * mC' + mR;
117               mKy = Pkn(:, :, k, n) * mC' / mRy;
118               Xkn(:, k+1, n) = fceG(Xkn(:, k, n), Uk) - mKy * (Ykn(:, k, n) - fceH(Xkn(:, k, n)));
119               Ykn(:, k+1, n) = Xkn(1:2, k+1, n) + mR * [randn(); randn()]; %X kopie do Y + sum               
120               mA(1, 3) = Cb * sin(Xkn(4, k, n));
121               mA(1, 4) = Cb * Xkn(3, k, n) * cos(Xkn(4, k, n));
122               mA(2, 3) = - Cb * cos(Xkn(4, k, n));
123               mA(2, 4) = Cb * Xkn(3, k, n) * sin(Xkn(4, k, n));
124               mA(3, 1) = - Ce * sin(Xkn(4, k, n));
125               mA(3, 2) = Ce * cos(Xkn(4, k, n));
126               mA(3, 4) = - Ce * (Xkn(2, k, n) * sin(Xkn(4, k, n)) + Xkn(1, k, n) * cos(Xkn(4, k, n)));
127               Pkn(:, :, k+1, n) = mA * (Pkn(:, :, k, n) - Pkn(:, :, k, n) * mC' * inv(mRy) * mC * Pkn(:, :, k, n)) * mA + mQ;
128            end           
129       end
130       Xstripe = mean(Xkn, 3);
131       Ystripe = mean(Ykn, 3);
132       Pstripe = mean(Pkn, 4);
133                 
134       for k = K-1:-1:1,
135            gka = k;
136           
137%             1]
138            for n = 1:N,
139                %krive okoli
140               Ykn(1, k, n) = Ykn(1, k, n) - Xkn(1, k, n);
141               Ykn(2, k, n) = Ykn(2, k, n) - Xkn(2, k, n);
142
143               Xkn(1, k, n) = Xstripe(1, k) + rho*randn();
144               Xkn(2, k, n) = Xstripe(2, k) + rho*randn(); 
145               Xkn(3, k, n) = Xstripe(3, k) + rho*randn();
146               Xkn(4, k, n) = Xstripe(4, k) + rho*randn(); 
147
148               Ykn(1, k, n) = Ykn(1, k, n) + Xkn(1, k, n);
149               Ykn(2, k, n) = Ykn(2, k, n) + Xkn(2, k, n);
150
151               Pkn(:, :, k, n) = Pstripe(:, :, k) .* exp(rho*randn(4));                 
152            end 
153           
154%             2]
155            for n = 1:N,
156               gnu = n;
157                [Uopt2(:, n), Hmin(n)] = fmincon(@Hamilt, uPi(k, Xkn(:, k, n),Pkn(:, :, k, n)), [], [], [], [], [], [], @Cond2, optimset('GradConstr','on','Display','notify','Algorithm','active-set'));               
158            end
159           
160%             3]
161            for n = 1:N,
162               Vn(n) = DELTAt*Hmin(n) + Vtilde(k+1, Xkn(:, k, n), Pkn(:, :, k, n));
163            end
164           
165%             4]
166            Epsilon = zeros(8, N);
167            for n = 1:N,
168                Epsilon(1:4, n) = Xkn(1:4, k, n) - Xstripe(1:4, k);
169                Epsilon(5:8, n) = diag(Pkn(:, :, k, n) ./ Pstripe(:, :, k));
170            end
171            mFi = matrixFi(Epsilon);
172            FiFiTInvFi = (mFi*mFi')\mFi;
173            Wv(:,k) = FiFiTInvFi * Vn';
174           
175            for n = 1:N,
176               tialfa(n) = Xkn(1, k, n);
177               tibeta(n) = Xkn(2, k, n);
178               tomega(n) = Xkn(3, k, n);
179               ttheta(n) = Xkn(4, k, n);               
180               tp3(n) = Pkn(3, 3, k, n);
181               tp4(n) = Pkn(4, 4, k, n);
182            end
183
184            mPsi = [tomega',...1
185                    -tialfa'.*sin(ttheta)',...2
186                    tibeta'.*cos(ttheta)',...3
187                    -Uopt2(1,:)'.*sin(ttheta)',...4                   
188                    log(tp3)',...5
189                    -tialfa'.*log(tp4)',...6                   
190                    tibeta'.*log(tp4)',...7                   
191                    -Uopt2(1,:)'.*log(tp4)',...8
192                    -Uopt2(1,:)'];%9
193            PsiPsiTInvPsi = (mPsi'*mPsi)\mPsi';             
194            Kpi_alfa(:, k) = PsiPsiTInvPsi * (omega_t_stripe * ones(N, 1));           
195
196            mPsi = [tomega',...1
197                    -tialfa'.*sin(ttheta)',...2
198                    tibeta'.*cos(ttheta)',...3
199                    Uopt2(2,:)'.*cos(ttheta)',...4                   
200                    -log(tp3)',...5
201                    tialfa'.*log(tp4)',...6                   
202                    -tibeta'.*log(tp4)',...7                   
203                    Uopt2(2,:)'.*log(tp4)',...8
204                    Uopt2(2,:)'];%9
205            PsiPsiTInvPsi = (mPsi'*mPsi)\mPsi';             
206            Kpi_beta(:, k) = PsiPsiTInvPsi * (omega_t_stripe * ones(N, 1));
207       end       
208    end
209   
210    %%%%%%%%%%%
211    toc
212%     keyboard
213    Kpi_alfa
214    Kpi_beta
215    %vykresleni grafu
216                clf
217                subplot(3,4,3);                       
218                plot(1:K,omega_t_stripe*ones(1,K));
219               
220                Ukn = zeros(2, K, N);
221                for n = 1:N,
222                    Xkn(:, 1, n) = X0;
223                    Ykn(:, 1, n) = Y0 + mR * [randn(); randn()];
224                    Pkn(:, :, 1, n) = P0;                   
225                    for k = 1:K-1,
226                       Ukn(:, k, n) = uPi(k, Xkn(:, k, n), Pkn(:, :, k, n));
227                       mRy = mC * Pkn(:, :, k, n) * mC' + mR;
228                       mKy = Pkn(:, :, k, n) * mC' / mRy;
229                       Xkn(:, k+1, n) = fceG(Xkn(:, k, n), Ukn(:, k, n)) - mKy * (Ykn(:, k, n) - fceH(Xkn(:, k, n)));
230                       Ykn(:, k+1, n) = Xkn(1:2, k+1, n) + mR * [randn(); randn()]; %X kopie do Y + sum               
231                       mA(1, 3) = Cb * sin(Xkn(4, k, n));
232                       mA(1, 4) = Cb * Xkn(3, k, n) * cos(Xkn(4, k, n));
233                       mA(2, 3) = - Cb * cos(Xkn(4, k, n));
234                       mA(2, 4) = Cb * Xkn(3, k, n) * sin(Xkn(4, k, n));
235                       mA(3, 1) = - Ce * sin(Xkn(4, k, n));
236                       mA(3, 2) = Ce * cos(Xkn(4, k, n));
237                       mA(3, 4) = - Ce * (Xkn(2, k, n) * sin(Xkn(4, k, n)) + Xkn(1, k, n) * cos(Xkn(4, k, n)));
238                       Pkn(:, :, k+1, n) = mA * (Pkn(:, :, k, n) - Pkn(:, :, k, n) * mC' * inv(mRy) * mC * Pkn(:, :, k, n)) * mA + mQ; 
239                    end
240                   
241                        hold all
242                        subplot(3,4,1);
243                        title('X:i_{\alpha}')
244                        plot(1:K,Xkn(1,:,n))
245                       
246                        hold all
247                        subplot(3,4,2);
248                        title('X:i_{\beta}')
249                        plot(1:K,Xkn(2,:,n))
250                       
251                        hold all
252                        subplot(3,4,3);
253                        title('X:\omega')
254                        plot(1:K,Xkn(3,:,n))
255                       
256                        hold all
257                        subplot(3,4,4);
258                        title('X:\theta')
259                        plot(1:K,Xkn(4,:,n))
260                       
261                        hold all
262                        subplot(3,4,5);
263                        title('Y:i_{\alpha}')
264                        plot(1:K,Ykn(1,:,n))
265                       
266                        hold all
267                        subplot(3,4,6);
268                        title('Y:i_{\beta}')
269                        plot(1:K,Ykn(2,:,n))
270                       
271                        hold all
272                        subplot(3,4,7);
273                        title('u_{\alpha}')
274                        plot(1:K,Ukn(1,:,n))
275                       
276                        hold all
277                        subplot(3,4,8);
278                        title('u_{\beta}')
279                        plot(1:K,Ukn(2,:,n))
280                       
281                        hold all
282                        subplot(3,4,9);
283                        title('P(1, 1)')
284                        plot(1:K,squeeze(Pkn(1, 1, :, n)))
285                       
286                        hold all
287                        subplot(3,4,10);
288                        title('P(2, 2)')
289                        plot(1:K,squeeze(Pkn(2, 2, :, n)))
290                       
291                        hold all
292                        subplot(3,4,11);
293                        title('P(3, 3)')
294                        plot(1:K,squeeze(Pkn(3, 3, :, n)))
295                       
296                        hold all
297                        subplot(3,4,12);
298                        title('P(4, 4)')
299                        plot(1:K,squeeze(Pkn(4, 4, :, n)))
300                end
301               
302    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
303    %pomocne funkce
304   
305    function [val_uPi] = uPi(k_uPi, x_uPi, p_uPi)
306        val_uPi = zeros(2, 1);
307        val_uPi(1) = (-omega_t_stripe + Kpi_alfa(1, k_uPi)*x_uPi(3)+Kpi_alfa(5, k_uPi)*log(p_uPi(3,3)) - Kpi_alfa(2, k_uPi)*x_uPi(1)*sin(x_uPi(4))-Kpi_alfa(6, k_uPi)*x_uPi(1)*log(p_uPi(4,4)) + Kpi_alfa(3, k_uPi)*x_uPi(2)*cos(x_uPi(4))+Kpi_alfa(7, k_uPi)*x_uPi(2)*log(p_uPi(4,4)) + Kpi_alfa(5)) / (Kpi_alfa(4)*sin(x_uPi(4))+Kpi_alfa(8)*log(p_uPi(4,4))+Kpi_alfa(9));
308        val_uPi(2) = ( omega_t_stripe - Kpi_beta(1, k_uPi)*x_uPi(3)-Kpi_beta(5, k_uPi)*log(p_uPi(3,3)) + Kpi_beta(2, k_uPi)*x_uPi(1)*sin(x_uPi(4))+Kpi_beta(6, k_uPi)*x_uPi(1)*log(p_uPi(4,4)) - Kpi_beta(3, k_uPi)*x_uPi(2)*cos(x_uPi(4))-Kpi_beta(7, k_uPi)*x_uPi(2)*log(p_uPi(4,4)) - Kpi_beta(5)) / (Kpi_beta(4)*cos(x_uPi(4))+Kpi_beta(8)*log(p_uPi(4,4))+Kpi_beta(9));
309       
310        if ( (val_uPi(1)^2 + val_uPi(2)^2) > cC1^2 )%nesplnena podminka - presune pod stejnym uhlem na hranici
311            tmpfi = atan2(val_uPi(2), val_uPi(1));
312            val_uPi(1) = cC1*cos(tmpfi);
313            val_uPi(2) = cC1*sin(tmpfi);
314        end       
315    end
316 
317    function [val_ham] = Hamilt(u_ham)             
318               mRy = mC * Pkn(:, :, gka, gnu) * mC' + mR;
319               mKy = Pkn(:, :, gka, gnu) * mC' / mRy;
320               tXkn = fceG(Xkn(:, gka, gnu), u_ham) - mKy * (Ykn(:, gka, gnu) - fceH(Xkn(:, gka, gnu)));
321               mA(1, 3) = Cb * sin(Xkn(4, gka, gnu));
322               mA(1, 4) = Cb * Xkn(3, gka, gnu) * cos(Xkn(4, gka, gnu));
323               mA(2, 3) = - Cb * cos(Xkn(4, gka, gnu));
324               mA(2, 4) = Cb * Xkn(3, gka, gnu) * sin(Xkn(4, gka, gnu));
325               mA(3, 1) = - Ce * sin(Xkn(4, gka, gnu));
326               mA(3, 2) = Ce * cos(Xkn(4, gka, gnu));
327               mA(3, 4) = - Ce * (Xkn(2, gka, gnu) * sin(Xkn(4, gka, gnu)) + Xkn(1, gka, gnu) * cos(Xkn(4, gka, gnu)));
328               tPkn = mA * (Pkn(:, :, gka, gnu) - Pkn(:, :, gka, gnu) * mC' * inv(mRy) * mC * Pkn(:, :, gka, gnu)) * mA + mQ;                 
329               tf = zeros(8,1);
330               tf(1:4) = tXkn;
331               tf(5:8) = diag(tPkn);
332               
333               loss = (tXkn(3) - omega_t_stripe)^2;
334               
335               val_ham = loss + tf' * Vtilde_dx(gka+1, Xkn(:, gka, gnu), Pkn(:, :, gka, gnu)) + 1/2 * trace(mSigma * ( Wv(10, gka+1)*[2 0; 0 0] + Wv(18, gka+1)*[0 0; 0 2] ));
336                                         
337    end
338
339    function [val_Vt] = Vtilde(k_Vt, x_Vt, p_Vt)
340        if(k_Vt == K)
341            val_Vt = h_bel;
342        else
343            Epsl = zeros(8, 1);           
344            Epsl(1:4) = x_Vt(1:4) - Xstripe(1:4, k_Vt);
345            Epsl(5:8) = diag(p_Vt ./ Pstripe(:, :, k));               
346           
347            val_Vt = vectFi(Epsl)' * Wv(:,k_Vt);
348        end
349    end
350
351    function [val_Vt] = Vtilde_dx(k_Vt, x_Vt, p_Vt)
352        if(k_Vt == K)
353            val_Vt = h_beldx;
354        else
355             Epsl = zeros(8, 1);           
356             Epsl(1:4) = x_Vt(1:4) - Xstripe(1:4, k_Vt);
357             Epsl(5:8) = diag(p_Vt ./ Pstripe(:, :, k));               
358               
359            val_Vt = difFi(Epsl)' * Wv(:,k_Vt);
360        end
361    end
362
363    function [val_Fi] = vectFi(x_Fi)
364        val_Fi = [ ...
365                   1; ...                       %1
366                   x_Fi(1); ...                 %Xi pro 1-4
367                   x_Fi(2); ...
368                   x_Fi(3); ...
369                   x_Fi(4); ...
370                   log(x_Fi(5)); ...            %ln Xi pro 5-8 tj diagonala matice Pt 4x4
371                   log(x_Fi(6)); ...
372                   log(x_Fi(7)); ...
373                   log(x_Fi(8)); ...
374                   x_Fi(1)^2; ...               %kvadraticke cleny jen v Xi 1-4 a kombinovane
375                   x_Fi(1)*x_Fi(2); ...
376                   x_Fi(1)*x_Fi(3); ...
377                   x_Fi(1)*x_Fi(4); ...
378                   x_Fi(1)*log(x_Fi(5)); ...
379                   x_Fi(1)*log(x_Fi(6)); ...
380                   x_Fi(1)*log(x_Fi(7)); ...
381                   x_Fi(1)*log(x_Fi(8)); ...
382                   x_Fi(2)^2; ...
383                   x_Fi(2)*x_Fi(3); ...
384                   x_Fi(2)*x_Fi(4); ...
385                   x_Fi(2)*log(x_Fi(5)); ...
386                   x_Fi(2)*log(x_Fi(6)); ...
387                   x_Fi(2)*log(x_Fi(7)); ...
388                   x_Fi(2)*log(x_Fi(8)); ...
389                   x_Fi(3)^2; ...
390                   x_Fi(3)*x_Fi(4); ...
391                   x_Fi(3)*log(x_Fi(5)); ...
392                   x_Fi(3)*log(x_Fi(6)); ...
393                   x_Fi(3)*log(x_Fi(7)); ...
394                   x_Fi(3)*log(x_Fi(8)); ...
395                   x_Fi(4)^2; ...
396                   x_Fi(4)*log(x_Fi(5)); ...
397                   x_Fi(4)*log(x_Fi(6)); ...
398                   x_Fi(4)*log(x_Fi(7)); ...
399                   x_Fi(4)*log(x_Fi(8)); ...
400                 ];
401    end
402
403    function [val_Fi] = matrixFi(x_Fi)
404        val_Fi = [ ...
405                   ones(1, N); ...                      %1
406           x_Fi(1, :); ...                      %Xi pro 1-4
407           x_Fi(2, :); ...
408                   x_Fi(3, :); ...
409           x_Fi(4, :); ...
410           log(x_Fi(5, :)); ...         %ln Xi pro 5-8 tj diagonala matice Pt 4x4
411           log(x_Fi(6, :)); ...
412                   log(x_Fi(7, :)); ...
413           log(x_Fi(8, :)); ...           
414                   x_Fi(1, :).^2; ...           %kvadraticke cleny jen v Xi 1-4 a kombinovane
415           x_Fi(1, :).*x_Fi(2, :); ...
416           x_Fi(1, :).*x_Fi(3, :); ...
417           x_Fi(1, :).*x_Fi(4, :); ...
418                   x_Fi(1, :).*log(x_Fi(5, :)); ...
419           x_Fi(1, :).*log(x_Fi(6, :)); ...
420           x_Fi(1, :).*log(x_Fi(7, :)); ...
421                   x_Fi(1, :).*log(x_Fi(8, :)); ...
422           x_Fi(2, :).^2; ...
423           x_Fi(2, :).*x_Fi(3, :); ...
424           x_Fi(2, :).*x_Fi(4, :); ...
425                   x_Fi(2, :).*log(x_Fi(5, :)); ...
426           x_Fi(2, :).*log(x_Fi(6, :)); ...
427           x_Fi(2, :).*log(x_Fi(7, :)); ...
428                   x_Fi(2, :).*log(x_Fi(8, :)); ...
429           x_Fi(3, :).^2; ...
430           x_Fi(3, :).*x_Fi(4, :); ...
431                   x_Fi(3, :).*log(x_Fi(5, :)); ...
432           x_Fi(3, :).*log(x_Fi(6, :)); ...
433           x_Fi(3, :).*log(x_Fi(7, :)); ...
434                   x_Fi(3, :).*log(x_Fi(8, :)); ...
435           x_Fi(4, :).^2; ...
436                   x_Fi(4, :).*log(x_Fi(5, :)); ...
437           x_Fi(4, :).*log(x_Fi(6, :)); ...
438           x_Fi(4, :).*log(x_Fi(7, :)); ...
439                   x_Fi(4, :).*log(x_Fi(8, :)); ...
440                 ];
441
442    end
443
444    function [val_Fi] = difFi(x_Fi)
445        val_Fi = [ ...
446                   0 0 0 0 0 0 0 0; ...                 
447           1 0 0 0 0 0 0 0; ...                 
448           0 1 0 0 0 0 0 0; ...
449                   0 0 1 0 0 0 0 0; ...
450           0 0 0 1 0 0 0 0; ...
451           0 0 0 0 1/x_Fi(5) 0 0 0; ...         
452           0 0 0 0 0 1/x_Fi(6) 0 0; ...
453                   0 0 0 0 0 0 1/x_Fi(7) 0; ...
454           0 0 0 0 0 0 0 1/x_Fi(8); ...
455                   2*x_Fi(1) 0 0 0 0 0 0 0; ...         
456           x_Fi(2) x_Fi(1) 0 0 0 0 0 0; ...
457           x_Fi(3) 0 x_Fi(1) 0 0 0 0 0; ...
458           x_Fi(4) 0 0 x_Fi(1) 0 0 0 0; ...
459                   log(x_Fi(5)) 0 0 0 x_Fi(1)/x_Fi(5) 0 0 0; ...
460           log(x_Fi(6)) 0 0 0 0 x_Fi(1)/x_Fi(6) 0 0; ...
461           log(x_Fi(7)) 0 0 0 0 0 x_Fi(1)/x_Fi(7) 0; ...
462                   log(x_Fi(8)) 0 0 0 0 0 0 x_Fi(1)/x_Fi(8); ...
463           0 2*x_Fi(2) 0 0 0 0 0 0; ...
464           0 x_Fi(3) x_Fi(2) 0 0 0 0 0; ...
465           0 x_Fi(4) 0 x_Fi(2) 0 0 0 0; ...
466                   0 log(x_Fi(5)) 0 0 x_Fi(2)/x_Fi(5) 0 0 0; ...
467           0 log(x_Fi(6)) 0 0 0 x_Fi(2)/x_Fi(6) 0 0; ...
468           0 log(x_Fi(7)) 0 0 0 0 x_Fi(2)/x_Fi(7) 0; ...
469                   0 log(x_Fi(8)) 0 0 0 0 0 x_Fi(2)/x_Fi(8); ...
470           0 0 2*x_Fi(3) 0 0 0 0 0; ...
471           0 0 x_Fi(4) x_Fi(3) 0 0 0 0; ...
472                   0 0 log(x_Fi(5)) 0 x_Fi(3)/x_Fi(5) 0 0 0; ...
473           0 0 log(x_Fi(6)) 0 0 x_Fi(3)/x_Fi(6) 0 0; ...
474           0 0 log(x_Fi(7)) 0 0 0 x_Fi(3)/x_Fi(7) 0; ...
475                   0 0 log(x_Fi(8)) 0 0 0 0 x_Fi(3)/x_Fi(8); ...
476           0 0 0 2*x_Fi(4) 0 0 0 0; ...
477                   0 0 0 log(x_Fi(5)) x_Fi(4)/x_Fi(5) 0 0 0; ...
478           0 0 0 log(x_Fi(6)) 0 x_Fi(4)/x_Fi(6) 0 0; ...
479           0 0 0 log(x_Fi(7)) 0 0 x_Fi(4)/x_Fi(7) 0; ...
480                   0 0 0 log(x_Fi(8)) 0 0 0 x_Fi(4)/x_Fi(8); ...
481                 ];
482    end
483       
484    function [c, ceq, GC, GCeq] = Cond2(x)
485        c = x(1)*x(1) + x(2)*x(2) - cC1^2;
486    ceq = [];
487    GC = [2*x(1); 2*x(2)];
488        GCeq = [];
489    end
490
491    function [x_ret] = fceG(x_in, u_in)
492        x_ret = zeros(4, 1);
493        x_ret(1) = Ca * x_in(1) + Cb * x_in(3) * sin(x_in(4)) + Cc * u_in(1);
494        x_ret(2) = Ca * x_in(2) - Cb * x_in(3) * cos(x_in(4)) + Cc * u_in(2);
495        x_ret(3) = Cd * x_in(3) + Ce * (x_in(2) * cos(x_in(4)) - x_in(1) * sin(x_in(4)));
496        x_ret(4) = x_in(4) + x_in(3) * DELTAt;
497    end
498
499    function [x_ret] = fceG_du(x_in, u_in)
500        x_ret = zeros(4, 2);
501        x_ret(1, 1) = Cc;       
502        x_ret(2, 2) = Cc;       
503    end
504
505    function [y_ret] = fceH(x_in)
506        y_ret = zeros(2, 1);
507        y_ret(1) = x_in(1);
508        y_ret(2) = x_in(2);
509    end
510
511end
Note: See TracBrowser for help on using the browser.