Erstellen einer Matrixklasse in Java Teil 1

Als ich G. Strangs "Lineare Algebra und ihre Anwendungen" las und nach einer API in Java suchte, fand ich eine Seite mit dem Namen "Let's Create a Matrix Class". Zuvor habe ich eine rudimentäre komplexe Klasse erstellt. Ich habe es nicht in dem Artikel geschrieben. Ich wollte eines Tages auch meine eigene mathematische Bibliothek zusammenstellen, also habe ich eine Klasse erstellt, die die Eigenschaft komplexer Zahlen widerspiegelt, dass sie im Quadrat -1 wird. Um es gut auszudrücken, es fühlt sich so an, als hätte ich meine eigene Datenstruktur darum herum erstellt und einen Algorithmus, der im Quadrat -1 wird. Ein selbst erstelltes komplexes Zahlenklassenobjekt empfängt zwei ganze Zahlen, und die letztere ganze Zahl wird als Koeffizient der komplexen Zahl i behandelt. Mit anderen Worten, wenn wir das Array [1,3] erhalten, haben wir eine Klasse erstellt, die es mathematisch als 1 + 3i interpretiert. Es ist die Summe von 1 als reelle Zahl und i × 3 als imaginäre Zahl. Ich habe auch eine Methode (Algorithmus) zum Addieren und Multiplizieren dieser komplexen Objekte (mit einer reellen Zahl und einer imaginären Zahl) erstellt.

Danach habe ich das erste Problem der "linearen Algebra und ihre Anwendung" gelöst, und meine Spannung als Programmierer war so hoch, dass ich diesmal die Matrixklasse ausprobiert habe. Zu diesem Zeitpunkt habe ich eine Klasse geschrieben, die das Produkt einer quadratischen quadratischen Matrix und eines Spaltenvektors mit zwei Komponenten findet.

Schreiben wir einen Artikel als Zusammenfassung.

Referenzseite Lassen Sie uns eine Matrixklasse erstellen http://syrinx.q.t.u-tokyo.ac.jp/tori/java/basic/Matrix.html

Es gab ein Beispiel für JavaDoc im Link unten, also habe ich die Klasse geschrieben, die darauf verweist. http://syrinx.q.t.u-tokyo.ac.jp/tori/java/basic/MatrixJavaDoc.html

Diesmal ist es Teil 1, also werde ich über Addition und Subtraktion schreiben. In diesem Artikel verwenden wir zunächst den Programmierstil, JavaDoc zu schreiben und dann das Programm zu implementieren. In XP (Extreme Programming) werde ich aus dem Testcode schreiben, aber dieses Mal habe ich im obigen Link das richtige JavaDoc gefunden, also habe ich es basierend auf JavaDoc implementiert.

Code unten Das letzte q von Matrixq ist Qiita.

//ここはコードとして挿入されていませんが、コードをもし実行するならば、大事な宣言です。ただコメントなど日本語で加筆したこともあり、エラーが出るかもしれません。 // // private double [] [] double2DArray ist ebenfalls eine erforderliche Deklaration

public class Matrixq { private double[][] double2DArray; //Constructor

Matrixq (int rowSize, int columnSize) // Dies ist ein Konstruktor, der ein Objekt der Matrixq-Klasse erstellt //行と列のサイズを受け取ります { double2DArray=new double[rowSize][columnSize]; }

Matrixq (double [] [] mat2Darray) // Dies ist ein weiterer Konstruktor, der ein Objekt der Klasse Matrixq erstellt //double型の二次元配列を受け取ります、その二次元配列を名前mat2Darrayとして扱います //受け取ったその二次元配列を、インスタンス変数double2DArrayに代入します。 //mat2Darrayは、matrix2DimensinalArrayの略です { this.double2DArray=mat2Darray; }

//Instance Methods

double get (int i, int j) // Definiere get (), das die Elemente von mat2Darray [i] [j] des Double-Typ-Arrays zurückgibt { return double2DArray[i][j]; }

int getRowSize () // Zeilengröße zurückgeben getRowSize () ist eine Methode, die die Zeilengröße zurückgibt { int l=this.double2DArray.length; return l; }

int getColumnSize () // Gibt die Spaltengröße zurück. getColumnSize () ist eine Methode, die die Spaltengröße zurückgibt { int l=this.double2DArray[0].length; return l; }

Bisher haben wir es von der Referenzseite JavaDoc implementiert. Wenn Sie den Konstruktor kennen, müssen Sie die Länge () des zweidimensionalen Arrays verwenden. In der Java-Sprache wird diese Referenz ebenfalls veröffentlicht. Ich verwende dies, um auf eine Instanzvariable eines Objekts einer Klasse zuzugreifen. Das Objekt dieser Klasse wurde jedoch noch nicht erstellt. Daher können Sie den Punktoperator "name.variable" nicht verwenden. Dies zeigt auf ein Objekt dieser Klasse und greift in Kombination mit dem Punktoperator auf seine Instanzvariable zu.

Der Erste Matrixq(int rowSize,int columnSize) { double2DArray=new double[rowSize][columnSize]; } Dann private double[][] double2DArray; Deklarieren Sie die Größe eines zweidimensionalen Arrays vom doppelten Typ, das in als private Instanzvariable deklariert ist. Dies ist der Konstruktor für Objekte der Matrixq-Klasse. Dieses private double [] [] double2DArray, eine private Instanzvariable, wird jedes Mal automatisch erstellt, wenn Sie ein Objekt der Matrixq-Klasse erstellen.

Ein zweidimensionales Array wird mit der als Argument empfangenen Ganzzahl rowSize vom Typ int und der Größe von columnSize deklariert. Der Inhalt des zu diesem Zeitpunkt erzeugten zweidimensionalen Arrays (Werte jedes Elements) beträgt alle 0,0. Es ist eine Java-Spezifikation. Mit anderen Worten, wenn Sie einen Konstruktor verwenden, der die Zeilen- und Spaltengröße empfängt, wird der Anfangswert von 0.0 im zweidimensionalen Array vom doppelten Typ des erstellten Matrixq-Objekts gespeichert.

Der nächste Konstruktor (Mehrfachdefinition / Polymorphismus) verwendet ein praktischeres zweidimensionales Array mit doppeltem Inhalt als Argument und weist es dem Feld "double2DArray" des Matrixq-Klassenobjekts zu.

Auf dieses Feld sollte mit getter () zugegriffen werden. Deshalb haben wir eine private Erklärung.

Der Rest der Instanzmethoden kann anhand der Kommentare grob verstanden werden. Damit ist die Erläuterung des obigen Codes abgeschlossen.

Unten statische Methode

//Static Methods
public static Matrixq plus(Matrixq m1,Matrixq m2)
{
	
	isValidMatrix(m1, m2);
	
	Matrixq mAns=new Matrixq(m1.getRowSize(),m1.getColumnSize());

	for(int i=0;i<m1.getRowSize();i++)
	{
		for(int j=0;j<m1.getColumnSize();j++)
		{
			mAns.double2DArray[i][j]=m1.double2DArray[i][j]+m2.double2DArray[i][j];
		}
	}
		
	return mAns;
}

public static Matrixq minus(Matrixq m1,Matrixq m2)
{
	
	isValidMatrix(m1, m2);
	
	Matrixq mAns=new Matrixq(m1.getRowSize(),m1.getColumnSize());

	for(int i=0;i<m1.getRowSize();i++)
	{
		for(int j=0;j<m1.getColumnSize();j++)
		{
			mAns.double2DArray[i][j]=m1.double2DArray[i][j]-m2.double2DArray[i][j];
		}
	}
		
	return mAns;
}

private static void isValidMatrix(Matrixq m1, Matrixq m2) throws MatrixException 
{
	if(m1.getRowSize()!=m2.getRowSize() || m1.getColumnSize()!=m2.getColumnSize())
	{
		throw m1.new MatrixException("Matrix row, column size error. Check size");
	}
}

Der Algorithmus hier macht dem Leser Spaß. (Geplant, hinzugefügt zu werden) Der Punkt ist die Implementierung der Ausnahmebehandlung. Die Methode isValidMatrix () überprüft, ob die beiden zu berechnenden Matrizen (Matrixq-Objekte) eine angemessene Größe haben, die als Matrix berechnet werden kann. Dies ist ein wenig schwierig, macht aber auch Spaß beim Programmieren von Matrixberechnungen. Die abgeleitete Klasse "MatrixException" von RuntimeException ist implementiert.

Eigentlich habe ich auch eine ColumnVector-Klasse erstellt und eine Klasse für das Produkt einer quadratischen quadratischen Matrix x eines Spaltenvektors mit zwei Komponenten geschrieben.

Es war ziemlich schwierig, das Produkt zu finden. Ich fand eine Formel, versuchte es in einer kleinen Warteschlange und versuchte es schließlich. Der Teil, in dem die Beziehung zwischen Zeilen und Spalten umgekehrt ist, wurde korrigiert.

...

Recommended Posts

Erstellen einer Matrixklasse in Java Teil 1
Erstellen einer Klasse für eine Matrix in Java Teil 2 - Über eine Matrix (lineare Algebra) -
Ein kurzer Überblick über Java, das in Klasse 3 gelernt wurde
Führen Sie eine Phrasenanalyse in Java 8 durch (Teil 2).
Erstellen einer Phrasenanalyse in Java 8 (Teil 1)
Was ist eine Klasse in der Java-Sprache (3 /?)
[Erstellen] Ein Memorandum über das Codieren in Java
Was ist eine Klasse in der Java-Sprache (1 /?)
Was ist eine Klasse in der Java-Sprache (2 /?)
Ein kurzer Überblick über Java, das im Unterricht gelernt wurde
Schreiben einer Klasse, die in Java bestellt werden kann Ein kleines Standard-Memo
Schreiben Sie eine Klasse in Kotlin und nennen Sie sie in Java
Suchen Sie eine Teilmenge in Java
[MQTT / Java] Implementierte eine Klasse, die Pub / Sub von MQTT in Java ausführt
3 Implementieren Sie einen einfachen Interpreter in Java
Ich habe ein PDF mit Java erstellt.
StringBuffer- und StringBuilder-Klasse in Java
Ein einfaches Beispiel für Rückrufe in Java
Bleiben Sie in einem Java Primer stecken
Ich kann in IntelliJ keine Java-Klasse mit einem bestimmten Namen erstellen
Informationen zum Zurückgeben einer Referenz in einem Java Getter
Bei der Suche nach mehreren in einem Java-Array
Kotlins Klasse Teil 2 zum Senden an Java-Entwickler
Verwenden Sie OpenCV_Contrib (ArUco) mit Java! (Teil 2-Programmierung)
Java erstellt eine Tabelle in einem Word-Dokument
Java erstellt ein Kreisdiagramm in Excel
Warum nennt Java eine Datei eine Klasse?
Erstellen Sie eine TODO-App in Java 7 Create Header
Lassen Sie uns eine Taschenrechner-App mit Java erstellen
Erstellen eines Servlets in der Liberty-Umgebung
Implementieren Sie so etwas wie einen Stack in Java
Teilen Sie eine Zeichenfolge in Java mit ". (Dot)"
Erstellen eines Projekts (und eines GitHub-Repositorys) mit Java und Gradle mit IntelliJ IDEA
Erstellen einer Entwicklungsumgebung für Java-Webanwendungen mit Docker für Mac Teil1
[Java] Implementieren Sie eine Funktion, die eine im Builder-Muster implementierte Klasse verwendet
Ich habe ein Programm zur Beurteilung von Primzahlen in Java erstellt
Einfaches Beispiel für einen Rückruf im Beispiel einer anonymen Java Part2-Klasse
Fügen Sie .gitignore hinzu, wenn Sie ein Projekt in Xcode erstellen
Java-Klassenmethoden
Escape-Verarbeitung beim Erstellen einer URL in Ruby
Zwei Möglichkeiten, einen Thread in Java + @ zu starten
Erstellen Sie eine CSR mit erweiterten Informationen in Java
Java-Scanner-Klasse
Eine Geschichte über das JDK in der Java 11-Ära
Verwenden Sie OpenCV_Contrib (ArUco) mit Java! (Teil 1-Build) (OpenCV-3.4.4)
Java HashMap-Klasse
So zeigen Sie eine Webseite in Java an
Java-Methodenaufruf von RPG (Methodenaufruf in eigener Klasse)
[Android / Java] Betreiben Sie eine lokale Datenbank in Room
Messen Sie die Größe eines Ordners mit Java
Code zum Escapezeichen von JSON-Zeichenfolgen in Java
Java (abstrakte Klasse)
Versuchen Sie, ein Bulletin Board in Java zu erstellen
Änderungen in Java 11
Janken in Java
So erhalten Sie eine Klasse von Element in Java
Ein Hinweis, wenn Sie Tupel in Java möchten
Java-Übung Teil 1
Ich habe ein Programm zur Beurteilung von Primzahlen in Java geschrieben