001 /* 002 * Created on 03.10.2004 003 * $Id: Katsura.java 3058 2010-03-27 11:05:23Z kredel $ 004 */ 005 006 package edu.jas.gb; 007 008 /** 009 * Class to produce a system of equations as defined by Katsura. 010 * 011 * @author Heinz Kredel 012 * 013 */ 014 public class Katsura { 015 016 /** 017 * main. 018 */ 019 public static void main(String[] args) { 020 if ( args.length == 0 ) { 021 System.out.println("usage: Katsura N <order> <var>"); 022 return; 023 } 024 int n = Integer.parseInt(args[0]); 025 Katsura k = null; 026 if ( args.length == 1 ) { 027 k = new Katsura(n); 028 } 029 if ( args.length == 2 ) { 030 k = new Katsura("u",n, args[1]); 031 } 032 if ( args.length == 3 ) { 033 k = new Katsura(args[2],n, args[1]); 034 } 035 System.out.println("#Katsura equations for N = " + n + ":"); 036 System.out.println("" + k); 037 } 038 039 final int N; 040 final String var; 041 final String order; 042 043 044 /** 045 * Katsura constructor. 046 * @param n problem size. 047 */ 048 public Katsura(int n) { 049 this("u", n); 050 } 051 052 053 /** 054 * Katsura constructor. 055 * @param v name of variables. 056 * @param n problem size. 057 */ 058 public Katsura(String v, int n) { 059 this(v, n, "G"); 060 } 061 062 063 /** 064 * Katsura constructor. 065 * @param var name of variables. 066 * @param n problem size. 067 * @param order term order letter for output. 068 */ 069 public Katsura(String var, int n, String order) { 070 this.var = var; 071 this.N = n; 072 this.order = order; 073 } 074 075 076 String sum1() { 077 StringBuffer s = new StringBuffer(); 078 for (int i = -N; i <= N; i++) { 079 s.append(variable(i)); 080 if (i < N) { 081 s.append(" + "); 082 } 083 } 084 s.append(" - 1"); 085 return s.toString(); 086 } 087 088 089 String sumUm(int m) { 090 StringBuffer s = new StringBuffer(); 091 for (int i = -N; i <= N; i++) { 092 s.append(variable(i)); 093 s.append("*"); 094 s.append(variable(m - i)); 095 if (i < N) { 096 s.append(" + "); 097 } 098 } 099 s.append(" - " + variable(m)); 100 return s.toString(); 101 } 102 103 104 /** 105 * Generate variable list. 106 * @param order term order letter. 107 * @return polynomial ring description. 108 */ 109 public String varList(String order) { 110 return varList("Rat",order); 111 } 112 113 114 /** 115 * Generate variable list. 116 * @param order term order letter. 117 * @param coeff coefficient ring name. 118 * @return polynomial ring description. 119 */ 120 public String varList(String coeff, String order) { 121 StringBuffer s = new StringBuffer(); 122 s.append(coeff); 123 s.append("("); 124 // for (int i = 0; i <= N; i++) { 125 for (int i = N; i >=0; i--) { 126 s.append(variable(i)); 127 if (i > 0) { 128 s.append(","); 129 } 130 } 131 s.append(") "); 132 s.append(order); 133 return s.toString(); 134 } 135 136 137 /** 138 * toString. 139 * @return Katsura problem as string. 140 */ 141 @Override 142 public String toString() { 143 StringBuffer s = new StringBuffer(); 144 s.append(varList(order)); 145 s.append(System.getProperty("line.separator")); 146 s.append(polyList()); 147 return s.toString(); 148 } 149 150 151 /** 152 * Generate polynomial list. 153 * @return Katsura polynomials as string. 154 */ 155 public String polyList() { 156 StringBuffer s = new StringBuffer(); 157 s.append("("+System.getProperty("line.separator")); 158 //for (int m = -N + 1; m <= N - 1; m++) { doubles polynomials 159 for (int m = 0; m <= N - 1; m++) { 160 s.append( sumUm(m) ); 161 s.append(","+System.getProperty("line.separator")); 162 } 163 s.append( sum1() ); 164 s.append(System.getProperty("line.separator")); 165 s.append(")"+System.getProperty("line.separator")); 166 return s.toString(); 167 } 168 169 170 /** 171 * Generate variable string. 172 * @return varaible name as string. 173 */ 174 String variable(int i) { 175 if (i < 0) { 176 return variable(-i); 177 } 178 if (i > N) { 179 return "0"; 180 } 181 return var + i; 182 } 183 184 }