001/*
002 *                    BioJava development code
003 *
004 * This code may be freely distributed and modified under the
005 * terms of the GNU Lesser General Public Licence.  This should
006 * be distributed with the code.  If you do not have a copy,
007 * see:
008 *
009 *      http://www.gnu.org/copyleft/lesser.html
010 *
011 * Copyright for this code is held jointly by the individual
012 * authors.  These should be listed in @author doc comments.
013 *
014 * For more information on the BioJava project and its aims,
015 * or to join the biojava-l mailing list, visit the home page
016 * at:
017 *
018 *      http://www.biojava.org/
019 *
020 */
021package org.biojava.nbio.survival.cox.stats;
022
023/**
024 *
025 * @author Scooter Willis <willishf at gmail dot com>
026 */
027public class Chsolve2 {
028
029        /**
030         *
031         * @param matrix
032         * @param n
033         * @param y
034         * @param test
035         */
036        static public void process(double[][] matrix, int n, double[][] y, int test) {
037                int i, j;
038                double temp;
039
040                /*
041                 ** solve Fb =y
042                 */
043                for (i = 0; i < n; i++) {
044                        temp = y[test][i];
045                        for (j = 0; j < i; j++) {
046                                temp -= y[test][j] * matrix[i][j];
047                        }
048                        y[test][i] = temp;
049                }
050                /*
051                 ** solve DF'z =b
052                 */
053                for (i = (n - 1); i >= 0; i--) {
054                        if (matrix[i][i] == 0) {
055                                y[test][i] = 0;
056                        } else {
057                                temp = y[test][i] / matrix[i][i];
058                                for (j = i + 1; j < n; j++) {
059                                        temp -= y[test][j] * matrix[j][i];
060                                }
061                                y[test][i] = temp;
062                        }
063                }
064
065        }
066}