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
30
31
32
33
34
35
36
37
|
// function [Y,degY,X,degX,B,degB,A,degA] = xdync(N,degN,D,degD,C,degC,gap)
// given coefficient matrix in T1, primary redundant row information sel,
// solves XD + YN = C
// calling order changed on 16 April 2005. Old order:
// function [B,degB,A,degA,Y,degY,X,degX] = xdync(N,degN,D,degD,C,degC,gap)
function [Y,degY,X,degX,B,degB,A,degA] = xdync(N,degN,D,degD,C,degC,gap)
if argn(2) == 6
gap = 1.0e+8;
end
[F,degF] = rowjoin(D,degD,N,degN);
[Frows,Fbcols] = polsize(F,degF); //Fbcols = block columns
[B,degB,A,degA,S,sel,degT1,Fbcols] = left_prm(N,degN,D,degD,3,gap);
//if issoln(D,degD,C,degC,B,degB,A,degA)
[Crows,Ccols] = size(C);
[Srows,Scols] = size(S);
S = clean(S);
S = S(mtlb_logical(sel),:);
T2 =[];
for i = 1:Crows,
Saug = seshft(S,C(i,:),0);
b = cindep(Saug);
b = move_sci(b,find(sel),Srows);
T2 =[T2; b];
end
[X,degX,Y,degY] = colsplit(T2,degT1,Fbcols,Frows-Fbcols);
[X,degX] = clcoef(X,degX);
[Y,degY] = clcoef(Y,degY);
Y = clean(Y); X = clean(X);
endfunction
|