[37] | 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 | |
---|