File: colcomp.sci

package info (click to toggle)
scilab 2.4-1
  • links: PTS
  • area: non-free
  • in suites: potato, slink
  • size: 55,196 kB
  • ctags: 38,019
  • sloc: ansic: 231,970; fortran: 148,976; tcl: 7,099; makefile: 4,585; sh: 2,978; csh: 154; cpp: 101; asm: 39; sed: 5
file content (29 lines) | stat: -rw-r--r-- 913 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function [w,rk]=colcomp(a,flag,tol)
//Syntaxes : [w,rk]=colcomp(a)
//           [w,rk]=colcomp(a,flag)
//           [w,rk]=colcomp(a,flag,tol)
//
//column compression of a i.e. comput. of ker(a)
//flag and tol are optional parameters
//flag='qr' or 'svd' (defaut 'svd')
//tol tolerance parameter (of order %eps as defaut value)
//the ma-rk first columns of w span the kernel of a when size(a)=(na,ma)
//F.D.
//!
// Copyright INRIA
[ma,na]=size(a)
[lhs,rhs]=argn(0)
if a==[] then w=[];rk=0;return;end
if norm(a,1) < sqrt(%eps)/10 then rk=0,w=eye(na,na),return,end
if rhs ==2 then tol=sqrt(%eps)*norm(a,1)*maxi(ma,na),end
if rhs==1 then flag='svd',tol=sqrt(%eps)*norm(a,1)*maxi(ma,na);end
select flag
case 'qr' then [q,r,rk,e]=qr(a',tol);
//w=[q(:,rk+1:ma),q(:,1:rk)]; <-- le  ma me parait suspect je met na 
w=q(:,na:-1:1)
case 'svd' then [u,s,v,rk]=svd(a',tol);
//w=[u(:,rk+1:na),u(:,1:rk)];
w=u(:,na:-1:1)
end