public void addRow(int rowId, double value) { rowNode newRow = new rowNode(); newRow.rowId = rowId; newRow.nextRow = prerow.nextRow; prerow.nextRow = newRow; newRow.value = value; row = newRow; }
public void addLine(int lineId) { lineNode newLine = new lineNode(); newLine.lineId = lineId; newLine.nextLine = preline.nextLine; preline.nextLine = newLine; line = newLine; prerow = newLine.firstRow; row = null; }
public void nextLine() { preline = line; line = line.nextLine; if (line != null) { prerow = line.firstRow; row = line.firstRow.nextRow; } }
public smat re() { smat tmp = new smat(this); smat tmp2 = new smat(lineCount); smat resultTmp = new smat(lineCount); smat result = new smat(lineCount); for (int l = 0; l < lineCount; l++) resultTmp.set(l, l, 1); tmp.reLine(); resultTmp.reLine(); lineNode maxline = null; lineNode max2line = null; lineNode premaxline = null; lineNode premax2line = null; lineNode resMaxline = null; lineNode resMax2line = null; lineNode preresMaxline = null; lineNode preresMax2line = null; int i = 0; while (tmp.it.line != null) { while (tmp.it.line != null) { if (maxline == null || tmp.it.row.rowId < maxline.firstRow.nextRow.rowId) { max2line = maxline; premax2line = premaxline; resMax2line = resMaxline; preresMax2line = preresMaxline; maxline = tmp.it.line; premaxline = tmp.it.preline; resMaxline = resultTmp.it.line; preresMaxline = resultTmp.it.preline; } else if ((max2line == null || tmp.it.row.rowId < max2line.firstRow.nextRow.rowId) && tmp.it.line.lineId != maxline.lineId) { max2line = tmp.it.line; premax2line = tmp.it.preline; resMax2line = resultTmp.it.line; preresMax2line = resultTmp.it.preline; } tmp.it.nextLine(); resultTmp.it.nextLine(); } if (max2line != null && maxline.firstRow.nextRow.rowId == max2line.firstRow.nextRow.rowId) { double basis = max2line.firstRow.nextRow.value / maxline.firstRow.nextRow.value; rowNode rowit = maxline.firstRow.nextRow; rowNode resRowit = resMaxline.firstRow.nextRow; while (rowit != null) { add(max2line.lineId, rowit.rowId, -(rowit.value * basis)); add(resMax2line.lineId, resRowit.rowId, -(resRowit.value * basis)); rowit = rowit.nextRow; resRowit = resRowit.nextRow; } } else { premaxline.nextLine = maxline.nextLine; preresMaxline.nextLine = resMaxline.nextLine; maxline.nextLine = null; resMaxline.nextLine = null; if (premax2line == maxline) { premax2line = premaxline; preresMax2line = preresMaxline; } rowNode j = maxline.firstRow.nextRow; rowNode k = resMaxline.firstRow.nextRow; while (j != null) { tmp2.set(i, j.rowId, j.value/ maxline.firstRow.nextRow.value); j = j.nextRow; } while (k != null) { result.set(i, k.rowId, k.value/ maxline.firstRow.nextRow.value); k = k.nextRow; } i++; tmp2.it.nextLine(); result.it.nextLine(); maxline = null; resMaxline = null; premaxline = null; preresMaxline = null; max2line = null; resMax2line = null; premax2line = null; preresMax2line = null; } tmp.reLine(); resultTmp.reLine(); } if (i != lineCount) return new smat(0); tmp2.reLine(); result.reLine(); for (int l = lineCount - 1; l >= 0; l--) for (int j = lineCount - 1; j > l; j--) { for(int k=j;k<lineCount;k++) result.add(l, k, -result.get(j, k) * tmp2.get(l, j)); tmp2.it.reRow(); } return result; }
public smat tri() { smat tmp = new smat(this); smat result = new smat(lineCount); lineNode maxline = null; lineNode max2line = null; lineNode premaxline = null; lineNode premax2line = null; tmp.reLine(); int i = 0; while (tmp.it.line!= null) { while (tmp.it.line!= null) { if (maxline == null || tmp.it.row.rowId < maxline.firstRow.nextRow.rowId) { max2line = maxline; premax2line = premaxline; maxline = tmp.it.line; premaxline = tmp.it.preline; } else if ((max2line == null || tmp.it.row.rowId < max2line.firstRow.nextRow.rowId) && tmp.it.line.lineId != maxline.lineId) { max2line = tmp.it.line; premax2line = tmp.it.preline; } tmp.it.nextLine(); } if (max2line!=null&&maxline.firstRow.nextRow.rowId == max2line.firstRow.nextRow.rowId) { double basis = max2line.firstRow.nextRow.value / maxline.firstRow.nextRow.value; rowNode rowit = maxline.firstRow.nextRow; while (rowit != null) { tmp.add(max2line.lineId, rowit.rowId, -(rowit.value * basis)); rowit = rowit.nextRow; } } else { premaxline.nextLine = maxline.nextLine; maxline.nextLine = null; if (premax2line == maxline) premax2line = premaxline; rowNode j = maxline.firstRow.nextRow; while(j!=null) { result.set(i, j.rowId, j.value); j = j.nextRow; } i++; result.it.nextLine(); maxline = null; premaxline = null; max2line = null; premax2line = null; } tmp.reLine(); } return result; }
public void reRow() { row = line.firstRow.nextRow; prerow = line.firstRow; }
public void nextRow() { prerow = row; row = row.nextRow; }
public lineNode() { firstRow = new rowNode(); firstRow.rowId = -1; }