import java.lang.Math; import java.util.Locale; import java.util.StringTokenizer; import java.text.DecimalFormat; /* * Vektor im R^n * * @author Thorsten Raasch, Manuel Werner */ public class Vector { /* * Kopierkonstruktor */ public Vector(Vector v) { entries = new double[v.dimension()]; for (int i = 0; i < entries.length; i++) entries[i] = v.get_entry(i); } /* * konstruiert Nullvektor gegebener Dimension */ public Vector(int dimension) { entries = new double[dimension]; } /* * konstruiert Vektor gegebener Dimension, * Eintraege als Zeichenkette (durch Leerzeichen getrennt) */ public Vector(int dimension, String s) { entries = new double[dimension]; StringTokenizer st = new StringTokenizer(s); for (int i = 0; i < dimension && st.hasMoreTokens(); i++) entries[i] = Double.parseDouble(st.nextToken()); } /* * Dimension des Vektors */ public int dimension() { return entries.length; } /* * Lesezugriff auf Eintrag x_i */ public double get_entry(int index) { return entries[index]; } /* * Schreibzugriff auf Eintrag x_i */ public void set_entry(int index, double value) { entries[index] = value; } /* * gewichtete Addition zweier Vektoren, * x <- a*x+b*y */ public void sadd(double xfactor, double yfactor, Vector y) { for (int i = 0; i < dimension(); i++) set_entry(i, xfactor * get_entry(i) + yfactor * y.get_entry(i)); } /* * Ausgabe als Zeichenkette */ public String toString() { String s = "["; DecimalFormat df = (DecimalFormat)DecimalFormat.getInstance(Locale.US); df.applyPattern("0.000"); for (int i = 0; i < dimension(); i++) { s += df.format(get_entry(i)); if (i < dimension()-1) s += " "; } s += "]"; return s; } /* * Maximumnorm */ public double infinity_norm() { double r = 0; for (int i = 0; i < dimension(); i++) r = Math.max(r, Math.abs(get_entry(i))); return r; } /* * p-Norm */ public double p_norm(double p) { double r = 0; for (int i = 0; i < dimension(); i++) r += Math.pow(Math.abs(get_entry(i)),p); return Math.pow(r, 1.0/p); } /* * Speicherplatz fuer die Vektoreintraege */ private double[] entries = null; };