232 | | //set lq |
233 | | lq.rv = RV("u", 2, 0); |
234 | | lq.set_rvc(RV("x", 5, 0)); |
235 | | lq.horizon = rec_hor; |
236 | | |
237 | | Array<linfnEx> model(2); |
238 | | model(0).A = A; |
239 | | model(0).B = vec("0 0 0 0 0"); |
240 | | model(0).rv = RV("x", 5, 0); |
241 | | model(0).rv_ret = RV("x", 5, 1); |
242 | | model(1).A = B; |
243 | | model(1).B = vec("0 0"); |
244 | | model(1).rv = RV("u", 2, 0); |
245 | | model(1).rv_ret = RV("x", 5, 1); |
246 | | lq.Models = model; |
247 | | |
248 | | Array<quadraticfn> qloss(2); |
249 | | qloss(0).Q.setCh(Q); |
250 | | qloss(0).rv = RV("x", 5, 1); |
251 | | qloss(1).Q.setCh(R); |
252 | | qloss(1).rv = RV("u", 2, 0); |
253 | | lq.Losses = qloss; |
254 | | |
255 | | lq.finalLoss.Q.setCh(Q); |
256 | | lq.finalLoss.rv = RV("x", 5, 1); |
257 | | |
258 | | lq.validate(); |
259 | | |
260 | | uab.zeros(); |
| 282 | void from_setting(const Setting &set){ |
| 283 | PMSMCtrl::from_setting(set); |
| 284 | UI::get(r,set, "r", UI::optional); |
| 285 | UI::get(rec_hor,set, "h", UI::optional); |
| 286 | } |
| 287 | |
| 288 | void validate(){ |
| 289 | R(0,0)=R(1,1)=r; |
| 290 | |
| 291 | p_isa.set_length(rec_hor+1); |
| 292 | p_isb.set_length(rec_hor+1); |
| 293 | p_ome.set_length(rec_hor+1); |
| 294 | p_the.set_length(rec_hor+1); |
| 295 | |
| 296 | Array<quadraticfn> qloss(2); |
| 297 | qloss(0).Q.setCh(Q); |
| 298 | qloss(0).rv = RV("x", 5, 1); |
| 299 | qloss(1).Q.setCh(R); |
| 300 | qloss(1).rv = RV("u", 2, 0); |
| 301 | lq.Losses = qloss; |
| 302 | |
| 303 | //set lq |
| 304 | lq.rv = RV("u", 2, 0); |
| 305 | lq.set_rvc(RV("x", 5, 0)); |
| 306 | lq.horizon = rec_hor; |
| 307 | |
| 308 | Array<linfnEx> model(2); |
| 309 | model(0).A = A; |
| 310 | model(0).B = vec("0 0 0 0 0"); |
| 311 | model(0).rv = RV("x", 5, 0); |
| 312 | model(0).rv_ret = RV("x", 5, 1); |
| 313 | model(1).A = B; |
| 314 | model(1).B = vec("0 0"); |
| 315 | model(1).rv = RV("u", 2, 0); |
| 316 | model(1).rv_ret = RV("x", 5, 1); |
| 317 | lq.Models = model; |
| 318 | |
| 319 | lq.finalLoss.Q.setCh(Q); |
| 320 | lq.finalLoss.rv = RV("x", 5, 1); |
| 321 | |
| 322 | lq.validate(); |
| 323 | |
| 324 | uab.zeros(); |
| 325 | |
| 326 | } |