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

  1. function [ms1,par1]=fixxx(ms,par,mat,arg,fixpar)
  2. %FIXXX Subroutine for fixpar
  3. %
  4. %    [MS1,PAR1] = fixxx(MS,PAR,MAT,ARG,FIXPAR)
  5. %
  6.  
  7. %    L. Ljung 15-4-90
  8. %    Copyright (c) 1990 The MathWorks, Inc
  9. %    All rights reserved
  10.  
  11. deff=0;
  12. if fixpar(1)=='d', deff=1;end
  13. [a,b,c,d,k,x0]=ssmodx9(par,-1,ms);
  14.  
  15. par1=par;
  16. nd=length(par);%nd=sum(sum(ms==NaN)');
  17. [rarg,carg]=size(arg);
  18. rr=rand(1,nd);
  19. [ar,br,cr,dr,kr,x0r]=ssmodx9(rr,-1,ms);
  20. [as,bs,cs,ds,ks,x0s]=ssmodx9(NaN*ones(1,nd),-1,ms);
  21. if mat=='a' | mat=='A'
  22.     kk=[];
  23.     for nr=1:rarg
  24.     if deff,as(arg(nr,1),arg(nr,2))=a(arg(nr,1),arg(nr,2));
  25.     else as(arg(nr,1),arg(nr,2))=fixpar(nr);end
  26.     kk=[kk,find(abs(rr-ar(arg(nr,1),arg(nr,2)))<eps)];
  27.     
  28.     end
  29.     kk=sort(kk);nk=length(kk);kk=kk(nk:-1:1);
  30.     for sk=1:nk
  31.     par1=par1([1:kk(nk)-1,kk(nk)+1:length(par1)]);
  32.     end
  33. end
  34. if mat=='b' | mat=='B'
  35.  
  36.     kk=[];
  37.     for nr=1:rarg
  38.     if deff,bs(arg(nr,1),arg(nr,2))=b(arg(nr,1),arg(nr,2));
  39.     else bs(arg(nr,1),arg(nr,2))=fixpar(nr);end
  40.     kk=[kk,find(abs(rr-br(arg(nr,1),arg(nr,2)))<eps)];
  41.     
  42.     end
  43.     kk=sort(kk);nk=length(kk);kk=kk(nk:-1:1);
  44.     for sk=1:nk
  45.     par1=par1([1:kk(nk)-1,kk(nk)+1:length(par1)]);
  46.     end
  47. end
  48. if mat=='c' | mat=='C'
  49.  
  50.     kk=[];
  51.     for nr=1:rarg
  52.     if deff,cs(arg(nr,1),arg(nr,2))=c(arg(nr,1),arg(nr,2));
  53.     else cs(arg(nr,1),arg(nr,2))=fixpar(nr);end
  54.     kk=[kk,find(abs(rr-cr(arg(nr,1),arg(nr,2)))<eps)];
  55.     
  56.     end
  57.     kk=sort(kk);nk=length(kk);kk=kk(nk:-1:1);
  58.     for sk=1:nk
  59.     par1=par1([1:kk(nk)-1,kk(nk)+1:length(par1)]);
  60.     end
  61. end
  62. if mat=='d' | mat=='D'
  63.  
  64.     kk=[];
  65.     for nr=1:rarg
  66.     if deff,ds(arg(nr,1),arg(nr,2))=d(arg(nr,1),arg(nr,2));
  67.     else ds(arg(nr,1),arg(nr,2))=fixpar(nr);end
  68.     kk=[kk,find(abs(rr-dr(arg(nr,1),arg(nr,2)))<eps)];
  69.     
  70.     end
  71.     kk=sort(kk);nk=length(kk);kk=kk(nk:-1:1);
  72.     for sk=1:nk
  73.     par1=par1([1:kk(nk)-1,kk(nk)+1:length(par1)]);
  74.     end
  75. end
  76. if mat=='k' | mat=='K'
  77.  
  78.     kk=[];
  79.     for nr=1:rarg
  80.     if deff,ks(arg(nr,1),arg(nr,2))=k(arg(nr,1),arg(nr,2));
  81.     else ks(arg(nr,1),arg(nr,2))=fixpar(nr);end
  82.     kk=[kk,find(abs(rr-kr(arg(nr,1),arg(nr,2)))<eps)];
  83.     
  84.     end
  85.     kk=sort(kk);nk=length(kk);kk=kk(nk:-1:1);
  86.     for sk=1:nk
  87.     par1=par1([1:kk(nk)-1,kk(nk)+1:length(par1)]);
  88.     end
  89. end
  90. if mat=='x0' | mat=='X0'
  91.  
  92.     kk=[];
  93.     for nr=1:rarg
  94.     if deff,x0s(arg(nr,1),arg(nr,2))=x0(arg(nr,1),arg(nr,2));
  95.     else x0s(arg(nr,1),arg(nr,2))=fixpar(nr);end
  96.     kk=[kk,find(abs(rr-x0r(arg(nr,1),arg(nr,2)))<eps)];
  97.     
  98.     end
  99.     kk=sort(kk);nk=length(kk);kk=kk(nk:-1:1);
  100.     for sk=1:nk
  101.     par1=par1([1:kk(nk)-1,kk(nk)+1:length(par1)]);
  102.     end
  103. end
  104.  
  105. ms1=modstruc(as,bs,cs,ds,ks,x0s);
  106.  
  107.