1 | function [Nbegcol,Nlencol,Nrowndx,Nobjcnt,Nobjndx,cJacobian] = jacSparsity(interfacedata) |
---|
2 | |
---|
3 | linear = setdiff(find(interfacedata.variabletype == 0),interfacedata.evalVariables); |
---|
4 | oJacobian = zeros(length(linear),1); |
---|
5 | variabletype = interfacedata.variabletype; |
---|
6 | c = interfacedata.c; |
---|
7 | F_struc = interfacedata.F_struc; |
---|
8 | m = size(interfacedata.F_struc,1); |
---|
9 | |
---|
10 | nonlinear = variabletype; |
---|
11 | nonlinear(interfacedata.evalVariables) = 1; |
---|
12 | |
---|
13 | for i = find(c(:)')%1:length(c) |
---|
14 | % if c(i) |
---|
15 | if nonlinear(i)%variabletype(i) | ismember(i,interfacedata.evalVariables) |
---|
16 | if ismember(i,interfacedata.evalVariables) |
---|
17 | j = find(i == interfacedata.evalVariables); |
---|
18 | variables = interfacedata.evalMap{j}.variableIndex; |
---|
19 | else |
---|
20 | variables = find(interfacedata.monomtable(i,:)); |
---|
21 | end |
---|
22 | oJacobian(find(ismember(linear,variables))) = 1; |
---|
23 | end |
---|
24 | % end |
---|
25 | end |
---|
26 | if m > 0 |
---|
27 | cJacobian = zeros(m,length(linear)); |
---|
28 | for i = 1:size(F_struc,2)-1 |
---|
29 | %if nonlinear(i)%variabletype(i) | ismembc(i,interfacedata.evalVariables) |
---|
30 | f = F_struc(:,i+1); |
---|
31 | for j = find(f(:)')%1:size(F_struc,1) |
---|
32 | % if f(j)%F_struc(j,i+1) |
---|
33 | % if variabletype(i) | ismembc(i,interfacedata.evalVariables) |
---|
34 | if ismembc(i,interfacedata.evalVariables) |
---|
35 | k = find(i == interfacedata.evalVariables); |
---|
36 | variables = interfacedata.evalMap{k}.variableIndex; |
---|
37 | elseif nonlinear(i) |
---|
38 | variables = find(interfacedata.monomtable(i,:)); |
---|
39 | else |
---|
40 | variables = i;; |
---|
41 | end |
---|
42 | cJacobian(j,find(ismembc(linear,variables))) = 1; |
---|
43 | end |
---|
44 | % else |
---|
45 | |
---|
46 | % end |
---|
47 | end |
---|
48 | [Nbegcol,Nlencol,Nrowndx] = lindosparse(cJacobian); |
---|
49 | else |
---|
50 | cJacobian = []; |
---|
51 | Nbegcol = []; |
---|
52 | Nrowndx = []; |
---|
53 | Nlencol = []; |
---|
54 | Nbegcol = [Nbegcol sum(Nlencol)]; |
---|
55 | end |
---|
56 | oJacobian = double(oJacobian | any(interfacedata.Q(linear,linear),2)); |
---|
57 | |
---|
58 | Nobjndx = find(oJacobian) - 1; |
---|
59 | Nobjcnt = length(Nobjndx); |
---|
60 | if isempty(Nobjndx) |
---|
61 | Nobjndx = []; |
---|
62 | end |
---|
63 | |
---|
64 | |
---|