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

Revision 845, 19.8 kB (checked in by vahalam, 15 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 = 5; %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.5;
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       %generovani stavu
106       for n = 1:N,
107            Xkn(:, 1, n) = X0;
108            Ykn(:, 1, n) = Y0 + mR * [randn(); randn()];
109            Pkn(:, :, 1, n) = P0;
110           
111            for k = 1:K-1,
112               Uk = uPi(k, Xkn(:, k, n), Pkn(:, :, k, n));
113
114               mRy = mC * Pkn(:, :, k, n) * mC' + mR;
115               mKy = Pkn(:, :, k, n) * mC' / mRy;
116               Xkn(:, k+1, n) = fceG(Xkn(:, k, n), Uk) - mKy * (Ykn(:, k, n) - fceH(Xkn(:, k, n)));
117               Ykn(:, k+1, n) = Xkn(1:2, k+1, n) + mR * [randn(); randn()]; %X kopie do Y + sum               
118               mA(1, 3) = Cb * sin(Xkn(4, k, n));
119               mA(1, 4) = Cb * Xkn(3, k, n) * cos(Xkn(4, k, n));
120               mA(2, 3) = - Cb * cos(Xkn(4, k, n));
121               mA(2, 4) = Cb * Xkn(3, k, n) * sin(Xkn(4, k, n));
122               mA(3, 1) = - Ce * sin(Xkn(4, k, n));
123               mA(3, 2) = Ce * cos(Xkn(4, k, n));
124               mA(3, 4) = - Ce * (Xkn(2, k, n) * sin(Xkn(4, k, n)) + Xkn(1, k, n) * cos(Xkn(4, k, n)));
125               Pkn(:, :, k+1, n) = mA * (Pkn(:, :, k, n) - Pkn(:, :, k, n) * mC' * inv(mRy) * mC * Pkn(:, :, k, n)) * mA + mQ;
126            end           
127       end
128       Xstripe = mean(Xkn, 3);
129       Ystripe = mean(Ykn, 3);
130       Pstripe = mean(Pkn, 4);
131                 
132       for k = K-1:-1:1,
133            gka = k;
134           
135%             1]
136            for n = 1:N,
137                %krive okoli
138               Ykn(1, k, n) = Ykn(1, k, n) - Xkn(1, k, n);
139               Ykn(2, k, n) = Ykn(2, k, n) - Xkn(2, k, n);
140
141               Xkn(1, k, n) = Xstripe(1, k) + rho*randn();
142               Xkn(2, k, n) = Xstripe(2, k) + rho*randn(); 
143               Xkn(3, k, n) = Xstripe(3, k) + rho*randn();
144               Xkn(4, k, n) = Xstripe(4, k) + rho*randn(); 
145
146               Ykn(1, k, n) = Ykn(1, k, n) + Xkn(1, k, n);
147               Ykn(2, k, n) = Ykn(2, k, n) + Xkn(2, k, n);
148
149               Pkn(:, :, k, n) = Pstripe(:, :, k) .* exp(rho*randn(4));                 
150            end 
151           
152%             2]
153            for n = 1:N,
154               gnu = n;
155                [Uopt2(:, n), Hmin(n)] = fmincon(@Hamilt, uPi(k, Xkn(:, k, n),Pkn(:, :, k, n)), [], [], [], [], [], [], @Cond2, optimset('GradConstr','on','Display','notify','Algorithm','active-set'));               
156            end
157           
158%             3]
159            for n = 1:N,
160               Vn(n) = DELTAt*Hmin(n) + Vtilde(k+1, Xkn(:, k, n), Pkn(:, :, k, n));
161            end
162           
163%             4]
164            Epsilon = zeros(8, N);
165            for n = 1:N,
166                Epsilon(1:4, n) = Xkn(1:4, k, n) - Xstripe(1:4, k);
167                Epsilon(5:8, n) = diag(Pkn(:, :, k, n) ./ Pstripe(:, :, k));
168            end
169            mFi = matrixFi(Epsilon);
170            FiFiTInvFi = (mFi*mFi')\mFi;
171            Wv(:,k) = FiFiTInvFi * Vn';
172           
173            for n = 1:N,
174               tialfa(n) = Xkn(1, k, n);
175               tibeta(n) = Xkn(2, k, n);
176               tomega(n) = Xkn(3, k, n);
177               ttheta(n) = Xkn(4, k, n);               
178               tp3(n) = Pkn(3, 3, k, n);
179               tp4(n) = Pkn(4, 4, k, n);
180            end
181
182            mPsi = [tomega',...1
183                    -tialfa'.*sin(ttheta)',...2
184                    tibeta'.*cos(ttheta)',...3
185                    -Uopt2(1,:)'.*sin(ttheta)',...4                   
186                    log(tp3)',...5
187                    -tialfa'.*log(tp4)',...6                   
188                    tibeta'.*log(tp4)',...7                   
189                    -Uopt2(1,:)'.*log(tp4)',...8
190                    -Uopt2(1,:)'];%9
191            PsiPsiTInvPsi = (mPsi'*mPsi)\mPsi';             
192            Kpi_alfa(:, k) = PsiPsiTInvPsi * (omega_t_stripe * ones(N, 1));           
193
194            mPsi = [tomega',...1
195                    -tialfa'.*sin(ttheta)',...2
196                    tibeta'.*cos(ttheta)',...3
197                    Uopt2(2,:)'.*cos(ttheta)',...4                   
198                    -log(tp3)',...5
199                    tialfa'.*log(tp4)',...6                   
200                    -tibeta'.*log(tp4)',...7                   
201                    Uopt2(2,:)'.*log(tp4)',...8
202                    Uopt2(2,:)'];%9
203            PsiPsiTInvPsi = (mPsi'*mPsi)\mPsi';             
204            Kpi_beta(:, k) = PsiPsiTInvPsi * (omega_t_stripe * ones(N, 1));
205       end       
206    end
207   
208    %%%%%%%%%%%
209    toc
210%     keyboard
211    Kpi_alfa
212    Kpi_beta
213    %vykresleni grafu
214                clf
215                subplot(3,4,3);                       
216                plot(1:K,omega_t_stripe*ones(1,K));
217               
218                Ukn = zeros(2, K, N);
219                for n = 1:N,
220                    Xkn(:, 1, n) = X0;
221                    Ykn(:, 1, n) = Y0 + mR * [randn(); randn()];
222                    Pkn(:, :, 1, n) = P0;                   
223                    for k = 1:K-1,
224                       Ukn(:, k, n) = uPi(k, Xkn(:, k, n), Pkn(:, :, k, n));
225                       mRy = mC * Pkn(:, :, k, n) * mC' + mR;
226                       mKy = Pkn(:, :, k, n) * mC' / mRy;
227                       Xkn(:, k+1, n) = fceG(Xkn(:, k, n), Ukn(:, k, n)) - mKy * (Ykn(:, k, n) - fceH(Xkn(:, k, n)));
228                       Ykn(:, k+1, n) = Xkn(1:2, k+1, n) + mR * [randn(); randn()]; %X kopie do Y + sum               
229                       mA(1, 3) = Cb * sin(Xkn(4, k, n));
230                       mA(1, 4) = Cb * Xkn(3, k, n) * cos(Xkn(4, k, n));
231                       mA(2, 3) = - Cb * cos(Xkn(4, k, n));
232                       mA(2, 4) = Cb * Xkn(3, k, n) * sin(Xkn(4, k, n));
233                       mA(3, 1) = - Ce * sin(Xkn(4, k, n));
234                       mA(3, 2) = Ce * cos(Xkn(4, k, n));
235                       mA(3, 4) = - Ce * (Xkn(2, k, n) * sin(Xkn(4, k, n)) + Xkn(1, k, n) * cos(Xkn(4, k, n)));
236                       Pkn(:, :, k+1, n) = mA * (Pkn(:, :, k, n) - Pkn(:, :, k, n) * mC' * inv(mRy) * mC * Pkn(:, :, k, n)) * mA + mQ; 
237                    end
238                   
239                        hold all
240                        subplot(3,4,1);
241                        title('X:i_{\alpha}')
242                        plot(1:K,Xkn(1,:,n))
243                       
244                        hold all
245                        subplot(3,4,2);
246                        title('X:i_{\beta}')
247                        plot(1:K,Xkn(2,:,n))
248                       
249                        hold all
250                        subplot(3,4,3);
251                        title('X:\omega')
252                        plot(1:K,Xkn(3,:,n))
253                       
254                        hold all
255                        subplot(3,4,4);
256                        title('X:\theta')
257                        plot(1:K,Xkn(4,:,n))
258                       
259                        hold all
260                        subplot(3,4,5);
261                        title('Y:i_{\alpha}')
262                        plot(1:K,Ykn(1,:,n))
263                       
264                        hold all
265                        subplot(3,4,6);
266                        title('Y:i_{\beta}')
267                        plot(1:K,Ykn(2,:,n))
268                       
269                        hold all
270                        subplot(3,4,7);
271                        title('u_{\alpha}')
272                        plot(1:K,Ukn(1,:,n))
273                       
274                        hold all
275                        subplot(3,4,8);
276                        title('u_{\beta}')
277                        plot(1:K,Ukn(2,:,n))
278                       
279                        hold all
280                        subplot(3,4,9);
281                        title('P(1, 1)')
282                        plot(1:K,squeeze(Pkn(1, 1, :, n)))
283                       
284                        hold all
285                        subplot(3,4,10);
286                        title('P(2, 2)')
287                        plot(1:K,squeeze(Pkn(2, 2, :, n)))
288                       
289                        hold all
290                        subplot(3,4,11);
291                        title('P(3, 3)')
292                        plot(1:K,squeeze(Pkn(3, 3, :, n)))
293                       
294                        hold all
295                        subplot(3,4,12);
296                        title('P(4, 4)')
297                        plot(1:K,squeeze(Pkn(4, 4, :, n)))
298                end
299               
300    %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
301    %pomocne funkce
302   
303    function [val_uPi] = uPi(k_uPi, x_uPi, p_uPi)
304        val_uPi = zeros(2, 1);
305        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));
306        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));
307       
308        if ( (val_uPi(1)^2 + val_uPi(2)^2) > cC1^2 )%nesplnena podminka - presune pod stejnym uhlem na hranici
309            tmpfi = atan2(val_uPi(2), val_uPi(1));
310            val_uPi(1) = cC1*cos(tmpfi);
311            val_uPi(2) = cC1*sin(tmpfi);
312        end       
313    end
314 
315    function [val_ham] = Hamilt(u_ham)             
316               mRy = mC * Pkn(:, :, gka, gnu) * mC' + mR;
317               mKy = Pkn(:, :, gka, gnu) * mC' / mRy;
318               tXkn = fceG(Xkn(:, gka, gnu), u_ham) - mKy * (Ykn(:, gka, gnu) - fceH(Xkn(:, gka, gnu)));
319               mA(1, 3) = Cb * sin(Xkn(4, gka, gnu));
320               mA(1, 4) = Cb * Xkn(3, gka, gnu) * cos(Xkn(4, gka, gnu));
321               mA(2, 3) = - Cb * cos(Xkn(4, gka, gnu));
322               mA(2, 4) = Cb * Xkn(3, gka, gnu) * sin(Xkn(4, gka, gnu));
323               mA(3, 1) = - Ce * sin(Xkn(4, gka, gnu));
324               mA(3, 2) = Ce * cos(Xkn(4, gka, gnu));
325               mA(3, 4) = - Ce * (Xkn(2, gka, gnu) * sin(Xkn(4, gka, gnu)) + Xkn(1, gka, gnu) * cos(Xkn(4, gka, gnu)));
326               tPkn = mA * (Pkn(:, :, gka, gnu) - Pkn(:, :, gka, gnu) * mC' * inv(mRy) * mC * Pkn(:, :, gka, gnu)) * mA + mQ;                 
327               tf = zeros(8,1);
328               tf(1:4) = tXkn;
329               tf(5:8) = diag(tPkn);
330               
331               loss = (tXkn(3) - omega_t_stripe)^2;
332               
333               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] ));
334                                         
335    end
336
337    function [val_Vt] = Vtilde(k_Vt, x_Vt, p_Vt)
338        if(k_Vt == K)
339            val_Vt = h_bel;
340        else
341            Epsl = zeros(8, 1);           
342            Epsl(1:4) = x_Vt(1:4) - Xstripe(1:4, k_Vt);
343            Epsl(5:8) = diag(p_Vt ./ Pstripe(:, :, k));               
344           
345            val_Vt = vectFi(Epsl)' * Wv(:,k_Vt);
346        end
347    end
348
349    function [val_Vt] = Vtilde_dx(k_Vt, x_Vt, p_Vt)
350        if(k_Vt == K)
351            val_Vt = h_beldx;
352        else
353             Epsl = zeros(8, 1);           
354             Epsl(1:4) = x_Vt(1:4) - Xstripe(1:4, k_Vt);
355             Epsl(5:8) = diag(p_Vt ./ Pstripe(:, :, k));               
356               
357            val_Vt = difFi(Epsl)' * Wv(:,k_Vt);
358        end
359    end
360
361    function [val_Fi] = vectFi(x_Fi)
362        val_Fi = [ ...
363                   1; ...                       %1
364                   x_Fi(1); ...                 %Xi pro 1-4
365                   x_Fi(2); ...
366                   x_Fi(3); ...
367                   x_Fi(4); ...
368                   log(x_Fi(5)); ...            %ln Xi pro 5-8 tj diagonala matice Pt 4x4
369                   log(x_Fi(6)); ...
370                   log(x_Fi(7)); ...
371                   log(x_Fi(8)); ...
372                   x_Fi(1)^2; ...               %kvadraticke cleny jen v Xi 1-4 a kombinovane
373                   x_Fi(1)*x_Fi(2); ...
374                   x_Fi(1)*x_Fi(3); ...
375                   x_Fi(1)*x_Fi(4); ...
376                   x_Fi(1)*log(x_Fi(5)); ...
377                   x_Fi(1)*log(x_Fi(6)); ...
378                   x_Fi(1)*log(x_Fi(7)); ...
379                   x_Fi(1)*log(x_Fi(8)); ...
380                   x_Fi(2)^2; ...
381                   x_Fi(2)*x_Fi(3); ...
382                   x_Fi(2)*x_Fi(4); ...
383                   x_Fi(2)*log(x_Fi(5)); ...
384                   x_Fi(2)*log(x_Fi(6)); ...
385                   x_Fi(2)*log(x_Fi(7)); ...
386                   x_Fi(2)*log(x_Fi(8)); ...
387                   x_Fi(3)^2; ...
388                   x_Fi(3)*x_Fi(4); ...
389                   x_Fi(3)*log(x_Fi(5)); ...
390                   x_Fi(3)*log(x_Fi(6)); ...
391                   x_Fi(3)*log(x_Fi(7)); ...
392                   x_Fi(3)*log(x_Fi(8)); ...
393                   x_Fi(4)^2; ...
394                   x_Fi(4)*log(x_Fi(5)); ...
395                   x_Fi(4)*log(x_Fi(6)); ...
396                   x_Fi(4)*log(x_Fi(7)); ...
397                   x_Fi(4)*log(x_Fi(8)); ...
398                 ];
399    end
400
401    function [val_Fi] = matrixFi(x_Fi)
402        val_Fi = [ ...
403                   ones(1, N); ...                      %1
404           x_Fi(1, :); ...                      %Xi pro 1-4
405           x_Fi(2, :); ...
406                   x_Fi(3, :); ...
407           x_Fi(4, :); ...
408           log(x_Fi(5, :)); ...         %ln Xi pro 5-8 tj diagonala matice Pt 4x4
409           log(x_Fi(6, :)); ...
410                   log(x_Fi(7, :)); ...
411           log(x_Fi(8, :)); ...           
412                   x_Fi(1, :).^2; ...           %kvadraticke cleny jen v Xi 1-4 a kombinovane
413           x_Fi(1, :).*x_Fi(2, :); ...
414           x_Fi(1, :).*x_Fi(3, :); ...
415           x_Fi(1, :).*x_Fi(4, :); ...
416                   x_Fi(1, :).*log(x_Fi(5, :)); ...
417           x_Fi(1, :).*log(x_Fi(6, :)); ...
418           x_Fi(1, :).*log(x_Fi(7, :)); ...
419                   x_Fi(1, :).*log(x_Fi(8, :)); ...
420           x_Fi(2, :).^2; ...
421           x_Fi(2, :).*x_Fi(3, :); ...
422           x_Fi(2, :).*x_Fi(4, :); ...
423                   x_Fi(2, :).*log(x_Fi(5, :)); ...
424           x_Fi(2, :).*log(x_Fi(6, :)); ...
425           x_Fi(2, :).*log(x_Fi(7, :)); ...
426                   x_Fi(2, :).*log(x_Fi(8, :)); ...
427           x_Fi(3, :).^2; ...
428           x_Fi(3, :).*x_Fi(4, :); ...
429                   x_Fi(3, :).*log(x_Fi(5, :)); ...
430           x_Fi(3, :).*log(x_Fi(6, :)); ...
431           x_Fi(3, :).*log(x_Fi(7, :)); ...
432                   x_Fi(3, :).*log(x_Fi(8, :)); ...
433           x_Fi(4, :).^2; ...
434                   x_Fi(4, :).*log(x_Fi(5, :)); ...
435           x_Fi(4, :).*log(x_Fi(6, :)); ...
436           x_Fi(4, :).*log(x_Fi(7, :)); ...
437                   x_Fi(4, :).*log(x_Fi(8, :)); ...
438                 ];
439
440    end
441
442    function [val_Fi] = difFi(x_Fi)
443        val_Fi = [ ...
444                   0 0 0 0 0 0 0 0; ...                 
445           1 0 0 0 0 0 0 0; ...                 
446           0 1 0 0 0 0 0 0; ...
447                   0 0 1 0 0 0 0 0; ...
448           0 0 0 1 0 0 0 0; ...
449           0 0 0 0 1/x_Fi(5) 0 0 0; ...         
450           0 0 0 0 0 1/x_Fi(6) 0 0; ...
451                   0 0 0 0 0 0 1/x_Fi(7) 0; ...
452           0 0 0 0 0 0 0 1/x_Fi(8); ...
453                   2*x_Fi(1) 0 0 0 0 0 0 0; ...         
454           x_Fi(2) x_Fi(1) 0 0 0 0 0 0; ...
455           x_Fi(3) 0 x_Fi(1) 0 0 0 0 0; ...
456           x_Fi(4) 0 0 x_Fi(1) 0 0 0 0; ...
457                   log(x_Fi(5)) 0 0 0 x_Fi(1)/x_Fi(5) 0 0 0; ...
458           log(x_Fi(6)) 0 0 0 0 x_Fi(1)/x_Fi(6) 0 0; ...
459           log(x_Fi(7)) 0 0 0 0 0 x_Fi(1)/x_Fi(7) 0; ...
460                   log(x_Fi(8)) 0 0 0 0 0 0 x_Fi(1)/x_Fi(8); ...
461           0 2*x_Fi(2) 0 0 0 0 0 0; ...
462           0 x_Fi(3) x_Fi(2) 0 0 0 0 0; ...
463           0 x_Fi(4) 0 x_Fi(2) 0 0 0 0; ...
464                   0 log(x_Fi(5)) 0 0 x_Fi(2)/x_Fi(5) 0 0 0; ...
465           0 log(x_Fi(6)) 0 0 0 x_Fi(2)/x_Fi(6) 0 0; ...
466           0 log(x_Fi(7)) 0 0 0 0 x_Fi(2)/x_Fi(7) 0; ...
467                   0 log(x_Fi(8)) 0 0 0 0 0 x_Fi(2)/x_Fi(8); ...
468           0 0 2*x_Fi(3) 0 0 0 0 0; ...
469           0 0 x_Fi(4) x_Fi(3) 0 0 0 0; ...
470                   0 0 log(x_Fi(5)) 0 x_Fi(3)/x_Fi(5) 0 0 0; ...
471           0 0 log(x_Fi(6)) 0 0 x_Fi(3)/x_Fi(6) 0 0; ...
472           0 0 log(x_Fi(7)) 0 0 0 x_Fi(3)/x_Fi(7) 0; ...
473                   0 0 log(x_Fi(8)) 0 0 0 0 x_Fi(3)/x_Fi(8); ...
474           0 0 0 2*x_Fi(4) 0 0 0 0; ...
475                   0 0 0 log(x_Fi(5)) x_Fi(4)/x_Fi(5) 0 0 0; ...
476           0 0 0 log(x_Fi(6)) 0 x_Fi(4)/x_Fi(6) 0 0; ...
477           0 0 0 log(x_Fi(7)) 0 0 x_Fi(4)/x_Fi(7) 0; ...
478                   0 0 0 log(x_Fi(8)) 0 0 0 x_Fi(4)/x_Fi(8); ...
479                 ];
480    end
481       
482    function [c, ceq, GC, GCeq] = Cond2(x)
483        c = x(1)*x(1) + x(2)*x(2) - cC1^2;
484    ceq = [];
485    GC = [2*x(1); 2*x(2)];
486        GCeq = [];
487    end
488
489    function [x_ret] = fceG(x_in, u_in)
490        x_ret = zeros(4, 1);
491        x_ret(1) = Ca * x_in(1) + Cb * x_in(3) * sin(x_in(4)) + Cc * u_in(1);
492        x_ret(2) = Ca * x_in(2) - Cb * x_in(3) * cos(x_in(4)) + Cc * u_in(2);
493        x_ret(3) = Cd * x_in(3) + Ce * (x_in(2) * cos(x_in(4)) - x_in(1) * sin(x_in(4)));
494        x_ret(4) = x_in(4) + x_in(3) * DELTAt;
495    end
496
497    function [x_ret] = fceG_du(x_in, u_in)
498        x_ret = zeros(4, 2);
499        x_ret(1, 1) = Cc;       
500        x_ret(2, 2) = Cc;       
501    end
502
503    function [y_ret] = fceH(x_in)
504        y_ret = zeros(2, 1);
505        y_ret(1) = x_in(1);
506        y_ret(2) = x_in(2);
507    end
508
509end
Note: See TracBrowser for help on using the browser.