Advertisement
Adytzu04

lab matlab f

Nov 26th, 2012
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 2.66 KB | None | 0 0
  1. EPS=input('EPS=');
  2. n=0;
  3. while(n~=2);
  4. n=input('n=');
  5. end
  6.  
  7. a=zeros(n);
  8. for i=1:n;
  9.     fprintf('\n linia %g',i)
  10.     a(i,:)=input(' ');
  11. end
  12. aa=a;
  13. u=zeros(n);
  14. q=eye(n);
  15. format long e;
  16. for k=1:n-2
  17.     uk=zeros(n,1);
  18.     sum=sqrt(a(k+1:n,k)'*a(k+1:n,k));
  19.     if(a(k+1,k)>=0)
  20.         semn=1;
  21.     else
  22.         semn=-1;
  23.     end
  24.     sigma=semn*sum;
  25.     uk(k+1)=a(k+1,k)+sigma;
  26.     uk(k+2:n)=a(k+2:n,k);
  27.     beta=sigma*uk(k+1);
  28.     if(beta==0)
  29.         fprintf('\n beta-nul: STOP');
  30.      return;
  31.  end
  32.  u=eye(n)-(uk*uk')/beta;
  33.  a=u*a*u';
  34.  q=u*q;
  35.  fprintf('k=');
  36.  k
  37.   fprintf('a=');
  38.   a
  39. end
  40. h=a;
  41.  fprintf('\n forma superior Hassenberg',h);
  42.  iter=0;
  43.  flag=1;
  44.  while(flag==1)
  45.      iter=iter+1;
  46.      miu=h(n,n);
  47.      pt=eye(n);
  48.      h=h-miu*eye(n);
  49.      for k=1:n-1
  50.          r=sqrt(h(k,k)^2+h(k+1,k)^2);
  51.          if (r==0)
  52.               fprintf('r=0:STOP');
  53.               return;
  54.           end
  55.           ck=h(k,k)/r;
  56.           dk=h(k+1,k)/r;
  57.           p=eye(n);
  58.           p(k,k)=ck;
  59.           p(k+1,k)=-dk;
  60.           p(k,k+1)=dk;
  61.           p(k+1,k+1)=ck;
  62.           h=p*h;
  63.           pt=pt*p';
  64.           q=p*q;
  65.       end
  66.       h=h*pt+miu*eye(n);
  67.       for i=1:n-1;
  68.           sum=(abs(h(i,i))+abs(h(i+1,i+1)))*EPS;
  69.           if(abs(h(i+1,i))<=sum)
  70.               h(i+1,i)=0;
  71.           end
  72.       end
  73.       flag=0;
  74.       i=1;
  75.       while((i<=n-2)&&(flag==0))
  76.           if((h(i+1,i)~=0)&&(h(i+2,i+1~0))
  77.               flag=1;
  78.           end
  79.           i=i+1;
  80.       end
  81.       if(flag==0)
  82.           i=1;
  83.           while((h(i+1,i)~=0)
  84.               ca=1;
  85.               cb=-(h(i,i)+h(i+1,i+1));
  86.               cc=h(i,i)*h(i+1,i+1)-h(i+1,i)*h(i,i+1);
  87.               delta=cb*cb-4*ca*cc;
  88.               if(delta>=0)
  89.                   flag=1;
  90.               end
  91.               i=i+1;
  92.           end
  93.          fprintf('\n iter=',iter);
  94.          s=h;
  95.          fprintf('\n s=',s);
  96.      end
  97.      fprintf('\n forma canonica Schur:',s);
  98.      qt=q';
  99.      fprintf('\n matricea de transformare:',qt);
  100.      ic=sqrt(-1);
  101.      valp=zeros(1,n);
  102.      vectp=zeros(n);
  103.      j-1;
  104.      while(j<=n-1)
  105.          if(s(j+1,j)==0)
  106.              valp(j)=s(j,j);
  107.              vect(:,j)=qt(:,j)
  108.              j=j+1;
  109.          else
  110.              ca=1;
  111.              cb=-(s(j,j)+s(j+1,j+1));
  112.              cc=s(j,j)*s(j+1,j+1)-s(j+1,j)*s(j,j+1);
  113.              v=roots([ca cb cc]);
  114.              valp(j)=v(1);
  115.              valp(j+1)=v(2);          
  116.              vectp(:,j)=qt(:,j)+ic*qt(:,j+1);
  117.              vectp(:,j+1)=qt(:,j)-ic*qt(:,j+1);
  118.              j=j+2;
  119.          end
  120.          if(j==n)
  121.              valp(j)=s(j,j);
  122.              vectp(:,j)=qt(:,j);
  123.          end
  124.      end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement