Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
also ich muss eine api schreiben mit verschiedenen aufrufen Matrix Matrix Produkt, Vektor Matrix Produkt.
mein Problem ist das ich für die for schleife ja die länge des Arrays wissen muss bzw bei der MAtrix die höhe und die länge, und dies unbestimmt als variable angeben muss.
beim skalarprodukt ist das ja einfach da ich bei 2 vektoren ja einfach x.length nehmen kann
wie hier:
Java:
public static double [] dot(double[] a, double[] b)
{
double c[] = new double[a.length];
for (int i = 0; i < a.length; i++)
{
//Skalar produkt von Zeile i von a [][] und b []
for (int j = 0; j < b.length; j++)
{
c[i] = a[i] * b[j];
}
}
return c;
}
jetzt hab ich das problem beim MAtrix Matrix produkt das ich nicht weiß was ich anstatt a.length angeben soll, und was ich bei double c[][] für N einsetzen soll für die zu erstellende matrix. zzt habe ich noch die Hilfsvariable N habewelche ich ersetzten muss
hier mein anfang:
Java:
public static double[][] multilply(double[][] a, double[][] b)
{
int N = 3;
double c[][] = new double[N][N];
for (int i = 0; i < N; i++)
{
for (int j = 0; j < N; j++)
{
c[i][j] = a[i][j] * b[i][j];
}
}
return c;
}
dasselbe problem habe ich beim Vektor Matrix Produkt nur daS hier die länge des zu erzeugenden arrays ja kürzer ist als die des eingangsarrays
hier mein ansatz:
Java:
public static double[] multilply(double[] a, double[][] b)
{
int N = 3;
int M = 3;
double c[] = new double[N];
for (int i = 0; i < M; i++)
{
//Skalar produkt von Zeile i von a [][] und b []
for (int j = 0; j < N; j++)
{
c[i] = a[j] * b[i][j];
}
}
return c;
jetzt hab ich das problem beim MAtrix Matrix produkt das ich nicht weiß was ich anstatt a.length angeben soll, und was ich bei double c[][] für N einsetzen soll für die zu erstellende matrix. zzt habe ich noch die Hilfsvariable N habewelche ich ersetzten muss
Naja in Java sind mehrdimensionale Arrays einfach Arrays von Arrays. Sprich b[0].length = Anzahl der Spalten von Matrix b.
Die Ergebnismatrix ist ja so groß, wie die Zeilen von Matrix a und Spalten von Matrix b.
weißt du denn auch wie ich die länge für das Vektor mal Matrix array bestimme?
Theoretisch kann der Benutzer natürlich Mist machen:
Code:
double a[][] = new double[3];
a[0] = new double[3];
a[1] = new double[2];
a[2] = new double[1];
ergibt eine dreieckige Matrix. Man kann einfach in die Vorbedingungen (im Methodenkommentar) schreiben, dass der Benutzer dann selbst schuld ist, wenn es kracht.
Ansonsten solltest du zumindest in Erwägung ziehen, die Matrizen auch als double[] (und nicht als double[][]) anzugeben. Das hat einige Vorteile. Natürlich muss die Matrixgröße dann mit übergeben werden, aber das ist nicht unüblich. Das wird bei den BLAS auch gemacht (siehe Basic Linear Algebra Subprograms - Wikipedia, the free encyclopedia und java blas - Google-Suche )
so alles klar danke für eure hilfe leute hab mein programm jetzt soweit fertig
Java:
/**
* @param Skalarprodukt zweier Vektoren berechnen
* @return Vektor ausgabe
*/
public static double [] dot(double[] a, double[] b)
{
double c[] = new double[a.length];
for (int i = 0; i < a.length; i++)
{
//Skalar produkt von Zeile i von a [][] und b []
for (int j = 0; j < b.length; j++)
{
c[i] = a[i] * b[j];
}
}
return c;
}
/**
* @param Matrix - Matrix Produkt berechnen
* @return Matrix ausgabe
*/
public static double[][] multilply(double[][] a, double[][] b)
{
double c[][] = new double[a.length][b[0].length];
for (int i = 0; i < a.length; i++)
{
for (int j = 0; j < b[0].length; j++)
{
c[i][j] = a[i][j] * b[i][j];
}
}
return c;
}
/**
* @param ein Matrix Transpodieren
* @return Matrix ausgabe
*/
public static double[][] transpose(double[][] a)
{
double c[][] = new double[a.length][a[0].length];
//Zeile von array a mit spalte von array b vertauschen
for (int i = 0; i < a.length; i++)
{
for (int j = 0; j < a[0].length; j++)
{
a [i][j] = c [j][i];
}
}
return c;
}
/**
* @param Vektor - Matrix Produkt ausrechnen
* @return Vektor ausgabe
*/
public static double[] multilply(double[] a, double[][] b)
{
double c[] = new double[a.length];
for (int i = 0; i < a.length; i++)
{
//Skalar produkt von Zeile i von a [][] und b []
for (int j = 0; j < b.length; j++)
{
c[i] = a[j] * b[i][j];
}
}
return c;
}
/**
* @param Matrix - Vektor Produkt ausrechnen
* @return Vektor ausgabe
*/
public static double[] multilply(double[][] a, double[] b)
{
double c[] = new double[b.length];
for (int i = 0; i < a[0].length; i++)
{
//Skalar produkt von Zeile i von a [][] und b []
for (int j = 0; j < b.length; j++)
{
c[i] = a[i][j] + b[j];
}
}
return c;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
}
}
infos stehen dabei
meint ihr dass soweit alles richtig ist?
PS: kann mir vvlt jmnd erklären wie ich ein java doc erstelle?
mit @....(siehe code) können ja die einzelnen infos ins java doc eingetragen werden
wie kann ich nun dieses erstellen und wo kann ich dies dann aufrufen?
public static double[][] multilply(double[][] a, double[][] b)
Ist schon mal auf jedem Fall falsch, die anderen wahrscheinlich auch.
Schau dir erst mal an, wie man Matrizen multipliziert: Matrix (Mathematik) ? Wikipedia