hier die aufgabe . ich soll s berechnen. Jedoch ist irgendwo ein fehler welcher das ergebnis verfälscht . (das programm selbst ist fehlerfrei lauffähig).

Java:
import java.util.Locale;
import java.util.Scanner;
public class LinAusgleich {
static double[] vektoreinlesen() {
Locale.setDefault (Locale.US);
Scanner sc = new Scanner (System.in);
int dim = sc.nextInt();
double[] vek = new double [dim];
for (int i=0; i<dim; ++i)
vek = sc.nextDouble();
return vek;
}
public static double[][] matrixprodukt(double[][] m1, double[][] m2) {
double[][] ergebnismatrix = null;
int zeilenm1 = m1.length;
int spaltenm1 = m1[0].length;
int spalenm2 = m2[0].length;
ergebnismatrix = new double[zeilenm1][spalenm2];
for (int i = 0; i < zeilenm1; i++) {
for (int j = 0; j < spalenm2; j++) {
ergebnismatrix[j] = 0;
for (int k = 0; k < spaltenm1; k++) {
ergebnismatrix[j] += m1[k] * m2[k][j];
}
}
}
return ergebnismatrix;
}
public static double[][] multiply(double[][] A, double[][] B) {
int mA = A.length;
int nA = A[0].length;
int mB = B.length;
int nB = B[0].length;
if (nA != mB) throw new RuntimeException("Illegal matrix dimensions.");
double[][] C = new double[mA][nB];
for (int i = 0; i < mA; i++)
for (int j = 0; j < nB; j++)
for (int k = 0; k < nA; k++)
C[j] += A[k] * B[k][j];
return C;
}
public static double[] multiplyvek(double[][] A, double[] x) {
int m = A.length;
int n = A[0].length;
if (x.length != n) throw new RuntimeException("Illegal matrix dimensions.");
double[] y = new double[m];
for (int i = 0; i < m; i++)
for (int j = 0; j < n; j++)
y += A[j] * x[j];
return y;
}
public static double [] matrixvektorprodukt (double [][] matrix, double [] vektor){
double[] newVektor = {0,0,0};
for(int i = 0; i < matrix.length ; i++){
for (int j = 0; j < matrix[0].length; j++){
newVektor += matrix [j] * vektor;
}
}
return newVektor;
}
public void matrixinvers() {
}
public static void main(String[] args) {
System.out.println("Bitte Vektor x eingeben: zuerst die Dimension, dann die Komponenten");
double [] x = vektoreinlesen();
System.out.println("Bitte Vektor y eingeben: zuerst die Dimension, dann die Komponenten");
double [] y = vektoreinlesen();
double [][] matrixa = new double[x.length][2]; // Matrix A
for(int i=0 ;i < x.length; ++i) {
matrixa [ i ] [ 0 ] = 1 ;
}
for(int i=0 ;i < x.length; ++i) {
matrixa [ i ] [1] = x ;
}
double [][] matrixat = new double[2][x.length];
for (int i=0; i<x.length; i++) { // Transpo
for (int j=0; j<2; j++) {
matrixat[j] = matrixa[j];
}
}
double[][] atmala = multiply(matrixat , matrixa);
double [][] inverse = new double [2][2];
inverse [ 0 ] [0] = atmala[1][1]* (1/(atmala[0][0]*atmala[1][1]-atmala[0][1]*atmala[1][0])) ; // Inverse
inverse [ 0 ] [1] = atmala[0][1]* (-1*(1/(atmala[0][0]*atmala[1][1]-atmala[0][1]*atmala[1][0])));
inverse [ 1 ] [0] = atmala[1][0]* (-1*(1/(atmala[0][0]*atmala[1][1]-atmala[0][1]*atmala[1][0])));
inverse [ 1 ] [1] = atmala[0][0]* (1/(atmala[0][0]*atmala[1][1]-atmala[0][1]*atmala[1][0]));
for(int j=0 ;j < 2; ++j) {
for(int i=0 ;j < 2; ++j) {
System.out.print(""+inverse[j]+" , ");
}
}
double[] mvprodukt = multiplyvek(matrixat , y);
double[] s = multiplyvek(inverse , mvprodukt);
double[][] zwischen = multiply(inverse , matrixat);
double[] ss = multiplyvek(zwischen , y);
for(int j=0 ;j < 2; ++j) {
System.out.print(""+ss[ j ]+" , ");
}
System.out.println(" ");
System.out.println(" ");
for(int j=0 ;j < 2; ++j) {
System.out.print(""+s[ j ]+" , ");
}
}
}
Zuletzt bearbeitet von einem Moderator: