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}