Rev | Line | |
---|
[10] | 1 | %PE_AFFINE Define and execute Pseudo Eclidean Affine mappings
|
---|
| 2 | %
|
---|
| 3 | % W = PE_AFFINE(W,SIG)
|
---|
| 4 | % F = PE_AFFINE(A,W)
|
---|
| 5 | % F = A*W
|
---|
| 6 |
|
---|
| 7 | function argout = pe_affine(arg1,arg2)
|
---|
| 8 |
|
---|
| 9 | if ismapping(arg1) % definition of PE mapping
|
---|
| 10 | isaffine(arg1);
|
---|
| 11 | if length(arg2) ~= 2
|
---|
| 12 | error('Signature should have two components')
|
---|
| 13 | end
|
---|
| 14 | [n1,n2] = size(arg1);
|
---|
| 15 | if sum(arg2) ~= n1
|
---|
| 16 | error('Sum of signature numbers should equal input dimension of mapping')
|
---|
| 17 | end
|
---|
| 18 | par.map = arg1;
|
---|
| 19 | par.sig = arg2;
|
---|
[79] | 20 | argout = prmapping(mfilename,'trained',par,getlabels(arg1),n1,n2);
|
---|
[10] | 21 | else
|
---|
| 22 | isdataset(arg1);
|
---|
| 23 | ismapping(arg2);
|
---|
| 24 | w = getdata(arg2,'map');
|
---|
| 25 | sig = getdata(arg2,'sig');
|
---|
| 26 | if sig(2) ~= 0;
|
---|
| 27 | data = getdata(w);
|
---|
| 28 | data.rot = -data.rot;
|
---|
| 29 | data.offset = zeros(1,size(arg2,2));
|
---|
| 30 | v = setdata(w,data);
|
---|
| 31 | [m,k] = size(arg1);
|
---|
| 32 | if sig(1) ~= 0
|
---|
| 33 | argout = [arg1(:,1:sig(1)) zeros(m,sig(2))]*w;
|
---|
| 34 | else
|
---|
| 35 | argout = setdata(arg1,zeros(m,k))*w;
|
---|
| 36 | end
|
---|
| 37 | argout = argout + [setdata(arg1,zeros(m,sig(1))) arg1(:,sig(1)+1:end)]*v;
|
---|
| 38 | else % no negative directions: back in Euclidean case
|
---|
| 39 | argout = arg1*w;
|
---|
| 40 | end
|
---|
| 41 | end
|
---|
Note: See
TracBrowser
for help on using the repository browser.