home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 10 / 10.iso / l / l455 / 9.ddi / IDENT.DI$ / UNFIXXX.M < prev    next >
Encoding:
Text File  |  1993-03-11  |  3.5 KB  |  170 lines

  1. function [ms1,par1]=unfixxx(ms,par,mat,arg)
  2. %UNFIXXX Subroutine for UNFIXPAR
  3. %
  4. %    [MS1,PAR1] = unfixxx(MS,PAR,MAT,ARG)
  5. %
  6.  
  7. %    L. Ljung 10-2-90,2-7-92
  8. %    Copyright (c) 1990 by the MathWorks, Inc.
  9. %    All Rights Reserved.
  10.  
  11. [nx,nn]=size(ms);if ms(1,nn)<0,arx=1;else arx=0;end
  12. [a,b,c,d,k,x0]=ssmodx9(par,-1,ms);
  13. par1=par;
  14.  
  15. nd=length(par);[n1,n2]=size(arg);
  16.  
  17. [rarg,carg]=size(arg);
  18. [as,bs,cs,ds,ks,x0s]=ssmodx9(NaN*ones(1,nd),-1,ms);
  19. if mat=='a' | mat=='A'
  20.  
  21.     kk=[];
  22.     for nr=1:rarg
  23.     as(arg(nr,1),arg(nr,2))=NaN;
  24.     pp(nr)=a(arg(nr,1),arg(nr,2));
  25.     end
  26.     ms1=modstruc(as,bs,cs,ds,ks,x0s);
  27.     nd=nd+n1;%nd=sum(sum(ms1==NaN)');
  28.     if arx,ms1(1,nn)=-ms1(1,nn);end
  29.     rr=rand(1,nd);
  30.  
  31.     [ar,br,cr,dr,kr,x0r]=ssmodx9(rr,-1,ms1);
  32.     for nr=1:rarg
  33.     kk=[kk find(abs(rr-ar(arg(nr,1),arg(nr,2)))<eps)];
  34.     end
  35.     ksort=sort(kk);lks=length(ksort);
  36.     for ll=1:lks
  37. par1=[par1(1:ksort(ll)-1) 0 par1(ksort(ll):length(par1))];
  38.  
  39.     end
  40.     for ll=1:lks
  41.     par1(kk(ll))=pp(ll);
  42.     end
  43. end
  44. if mat=='b' | mat=='B'
  45.  
  46.     kk=[];
  47.     for nr=1:rarg
  48.     bs(arg(nr,1),arg(nr,2))=NaN;
  49.     pp(nr)=b(arg(nr,1),arg(nr,2));
  50.     end
  51.     ms1=modstruc(as,bs,cs,ds,ks,x0s);
  52.     nd=nd+n1;%nd=sum(sum(ms1==NaN)');
  53.     if arx,ms1(1,nn)=-ms1(1,nn);end
  54.  
  55.     rr=rand(1,nd);
  56.     [ar,br,cr,dr,kr,x0r]=ssmodx9(rr,-1,ms1);
  57.     for nr=1:rarg
  58.     kk=[kk find(abs(rr-br(arg(nr,1),arg(nr,2)))<eps)];
  59.     end
  60.     ksort=sort(kk);lks=length(ksort);
  61.     for ll=1:lks
  62. par1=[par1(1:ksort(ll)-1) 0 par1(ksort(ll):length(par1))];
  63.  
  64.     end
  65.     for ll=1:lks
  66.     par1(kk(ll))=pp(ll);
  67.     end
  68. end
  69. if mat=='c' | mat=='C'
  70.  
  71.     kk=[];
  72.     for nr=1:rarg
  73.     cs(arg(nr,1),arg(nr,2))=NaN;
  74.     pp(nr)=c(arg(nr,1),arg(nr,2));
  75.     end
  76.     ms1=modstruc(as,bs,cs,ds,ks,x0s);
  77.     nd=sum(sum(isnan(ms1))');
  78.     if arx,ms1(1,nn)=-ms1(1,nn);end
  79.  
  80.     rr=rand(1,nd);
  81.     [ar,br,cr,dr,kr,x0r]=ssmodx9(rr,-1,ms1);
  82.     for nr=1:rarg
  83.     kk=[kk find(abs(rr-cr(arg(nr,1),arg(nr,2)))<eps)];
  84.     end
  85.     ksort=sort(kk);lks=length(ksort);
  86.     for ll=1:lks
  87. par1=[par1(1:ksort(ll)-1) 0 par1(ksort(ll):length(par1))];
  88.  
  89.     end
  90.     for ll=1:lks
  91.     par1(kk(ll))=pp(ll);
  92.     end
  93. end
  94. if mat=='d' | mat=='D'
  95.  
  96.     kk=[];
  97.     for nr=1:rarg
  98.     ds(arg(nr,1),arg(nr,2))=NaN;
  99.     pp(nr)=d(arg(nr,1),arg(nr,2));
  100.     end
  101.     ms1=modstruc(as,bs,cs,ds,ks,x0s);
  102.     nd=sum(sum(isnan(ms1))');
  103.     if arx,ms1(1,nn)=-ms1(1,nn);end
  104.  
  105.     rr=rand(1,nd);
  106.     [ar,br,cr,dr,kr,x0r]=ssmodx9(rr,-1,ms1);
  107.     for nr=1:rarg
  108.     kk=[kk find(abs(rr-dr(arg(nr,1),arg(nr,2)))<eps)];
  109.     end
  110.     ksort=sort(kk);lks=length(ksort);
  111.     for ll=1:lks
  112. par1=[par1(1:ksort(ll)-1) 0 par1(ksort(ll):length(par1))];
  113.  
  114.     end
  115.     for ll=1:lks
  116.     par1(kk(ll))=pp(ll);
  117.     end
  118. end
  119. if mat=='k' | mat=='K'
  120.  
  121.     kk=[];
  122.     for nr=1:rarg
  123.     ks(arg(nr,1),arg(nr,2))=NaN;
  124.     pp(nr)=k(arg(nr,1),arg(nr,2));
  125.     end
  126.     ms1=modstruc(as,bs,cs,ds,ks,x0s);
  127.     nd=sum(sum(isnan(ms1))');
  128.     if arx,ms1(1,nn)=-ms1(1,nn);end
  129.  
  130.     rr=rand(1,nd);
  131.     [ar,br,cr,dr,kr,x0r]=ssmodx9(rr,-1,ms1);
  132.     for nr=1:rarg
  133.     kk=[kk find(abs(rr-kr(arg(nr,1),arg(nr,2)))<eps)];
  134.     end
  135.     ksort=sort(kk);lks=length(ksort);
  136.     for ll=1:lks
  137. par1=[par1(1:ksort(ll)-1) 0 par1(ksort(ll):length(par1))];
  138.  
  139.     end
  140.     for ll=1:lks
  141.     par1(kk(ll))=pp(ll);
  142.     end
  143. end
  144. if mat=='x0' | mat=='X0'
  145.  
  146.     kk=[];
  147.     for nr=1:rarg
  148.     x0s(arg(nr,1),arg(nr,2))=NaN;
  149.     pp(nr)=x0(arg(nr,1),arg(nr,2));
  150.     end
  151.     ms1=modstruc(as,bs,cs,ds,ks,x0s);
  152.     nd=nd+n1;%nd=sum(sum(ms1==NaN)');
  153.     if arx,ms1(1,nn)=-ms1(1,nn);end
  154.  
  155.     rr=rand(1,nd);
  156.     [ar,br,cr,dr,kr,x0r]=ssmodx9(rr,-1,ms1);
  157.     for nr=1:rarg
  158.     kk=[kk find(abs(rr-x0r(arg(nr,1),arg(nr,2)))<eps)];
  159.     end
  160.     ksort=sort(kk);lks=length(ksort);
  161.     for ll=1:lks
  162. par1=[par1(1:ksort(ll)-1) 0 par1(ksort(ll):length(par1))];
  163.  
  164.     end
  165.     for ll=1:lks
  166.     par1(kk(ll))=pp(ll);
  167.     end
  168. end
  169.  
  170.