Wilkinson.java
/*
* Created on 2004/11/11
* Copyright (C) 2004 Koga Laboratory. All rights reserved.
*
*/
package org.mklab.cga.util;
import org.mklab.nfc.matrix.DoubleMatrix;
/**
* J.H.Wilkinsonの固有値テスト行列を作るクラスです。
*
* @author hiroki
* @version $Revision: 1.4 $.2004/11/11
*/
public class Wilkinson {
/**
* J.H.Wilkinsonの固有値テスト行列を作ります。 これは、近い値の組み合わせからなる対称な三重対角行列ですが、固有値には正確には一致しません。
*
* @param n 行列の大きさ。
* @return Wilkinson行列。
*/
public static DoubleMatrix wilkinson(int n) {
double d = (n - 1) / 2.0;
DoubleMatrix wilkinson = new DoubleMatrix(n, n);
for (int i = 0; i < (n + 1) / 2; i++) {
wilkinson.setElement(i + 1, i + 1, d);
d = d - 1;
}
d = d + 1;
if (n % 2 == 0) {
for (int i = (n + 1) / 2; i < n; i++) {
wilkinson.setElement(i + 1, i + 1, d);
d = d + 1;
}
} else {
for (int i = (n + 1) / 2; i < n; i++) {
d = d + 1;
wilkinson.setElement(i + 1, i + 1, d);
}
}
for (int i = 0; i < n - 1; i++) {
wilkinson.setElement(i + 2, i + 1, 1.0);
wilkinson.setElement(i + 1, i + 2, 1.0);
}
return wilkinson;
}
}