001/*
002 * $Id$
003 */
004
005package edu.jas.commons.math;
006
007
008import java.math.MathContext;
009import java.util.List;
010
011import edu.jas.arith.BigDecimal;
012import edu.jas.arith.BigRational;
013import edu.jas.poly.Complex;
014import edu.jas.poly.ComplexRing;
015import edu.jas.poly.GenPolynomial;
016import edu.jas.poly.GenPolynomialRing;
017import edu.jas.poly.PolyUtil;
018import edu.jas.vector.GenMatrix;
019import edu.jas.vector.GenMatrixRing;
020import edu.jas.vector.GenVector;
021import edu.jas.vector.GenVectorModul;
022
023
024/**
025 * Examples that compute solutions of linear equation systems.
026 * @author Heinz Kredel
027 */
028
029public class MatrixExamples {
030
031
032    public static void main(String[] argv) {
033        example1();
034        example2();
035    }
036
037
038    public static void example1() {
039        BigRational r1, r2, r3, r4, r5, r6, fac;
040        r1 = new BigRational(1, 10);
041        r2 = new BigRational(6, 5);
042        r3 = new BigRational(1, 9);
043        r4 = new BigRational(1, 1);
044        r5 = r2.sum(r3);
045        r6 = r1.multiply(r4);
046
047        fac = new BigRational();
048
049        BigRational[][] aa = new BigRational[][] { { r1, r2, r3 }, { r4, r5, r6 }, { r2, r1, r3 } };
050        GenMatrixRing<BigRational> mfac = new GenMatrixRing<BigRational>(fac, aa.length, aa[0].length);
051        GenMatrix<BigRational> a = new GenMatrix<BigRational>(mfac,
052                        CMFieldElementUtil.<BigRational> toList(aa));
053        System.out.println("system = " + a);
054
055        BigRational[] ba = new BigRational[] { r1, r2, r3 };
056        GenVectorModul<BigRational> vfac = new GenVectorModul<BigRational>(fac, ba.length);
057        GenVector<BigRational> b = new GenVector<BigRational>(vfac,
058                        CMFieldElementUtil.<BigRational> toList(ba));
059        System.out.println("right hand side = " + b);
060
061        GaussElimination<BigRational> ge = new GaussElimination<BigRational>();
062        GenVector<BigRational> x = ge.solve(a, b);
063        System.out.println("solution = " + x);
064    }
065
066
067    public static void example2() {
068        BigRational cfac = new BigRational();
069        GenPolynomialRing<BigRational> pfac = new GenPolynomialRing<BigRational>(cfac, new String[] { "x" });
070
071        GenPolynomial<BigRational> p = pfac.parse("(x^2 + 2)(x^2 - 3)"); // (x^2 - 2)
072        System.out.println("p = " + p);
073        //p = p.multiply(p); // not square-free to fail complexRoots
074        //System.out.println("p = " + p);
075
076        Roots<BigRational> rf = new Roots<BigRational>();
077        List<Complex<BigDecimal>> r = rf.complexRoots(p);
078        System.out.println("r = " + r);
079        if (r.size() != p.degree(0)) {
080            System.out.println("#r != deg(p)");
081        }
082
083        ComplexRing<BigDecimal> cc = new ComplexRing<BigDecimal>(new BigDecimal(0.0, MathContext.DECIMAL64));
084        GenPolynomialRing<Complex<BigDecimal>> dfac = new GenPolynomialRing<Complex<BigDecimal>>(cc,
085                        new String[] { "x" });
086        GenPolynomial<Complex<BigDecimal>> cp = dfac.parse(p.toString());
087        //System.out.println("cp = " + cp);
088        for (Complex<BigDecimal> cd : r) {
089            //System.out.println("cd = " + cd);
090            Complex<BigDecimal> ev = PolyUtil.<Complex<BigDecimal>> evaluateMain(cc, cp, cd);
091            if (ev.isZERO()) {
092                System.out.println("ev = " + ev + " == 0.0: " + ev.isZERO());
093            }
094        }
095    }
096
097}