Création d'une classe de matrice dans Java Partie 1

Quand je lisais "Linear Algebra and Its Applications" de G. Strang et que je cherchais une API en Java, j'ai trouvé une page intitulée "Let's Create a Matrix Class". Auparavant, j'ai créé une classe complexe rudimentaire. Je ne l'ai pas écrit dans l'article. Je voulais aussi créer ma propre bibliothèque mathématique un jour, j'ai donc créé une classe qui reflète la propriété des nombres complexes qui, lorsqu'ils sont au carré, deviennent -1. Pour le dire gentiment, j'ai l'impression d'avoir créé ma propre structure de données autour de cela et un algorithme qui devient -1 une fois au carré. Un objet de classe de nombre complexe créé lui-même reçoit deux entiers, et ce dernier entier est traité comme un coefficient de nombre complexe i. En d'autres termes, lorsque nous recevons le tableau [1,3], nous avons créé une classe qui l'interprète mathématiquement comme 1 + 3i. C'est la somme de 1 comme nombre réel et i × 3 comme nombre imaginaire. J'ai également créé une méthode (algorithme) pour ajouter et multiplier ces objets complexes (ayant un nombre réel et un nombre imaginaire).

Après cela, j'ai fait le premier problème de "Algèbre linéaire et son application", et ma tension en tant que programmeur était très élevée, j'ai donc essayé la classe matricielle cette fois. À ce stade, j'ai écrit une classe qui trouve le produit d'une matrice quadratique carrée et d'un vecteur colonne à deux composants.

Écrivons un article en résumé.

Site de référence Faisons une classe matricielle http://syrinx.q.t.u-tokyo.ac.jp/tori/java/basic/Matrix.html

Il y avait un exemple de JavaDoc dans le lien ci-dessous, j'ai donc écrit la classe qui y faisait référence. http://syrinx.q.t.u-tokyo.ac.jp/tori/java/basic/MatrixJavaDoc.html

Cette fois, c'est la première partie, donc j'écrirai sur l'addition et la soustraction. Dans cet article, je prends d'abord le style de programmation de l'écriture de JavaDoc, puis de l'implémentation du programme. Dans XP (Extreme Programming), j'écrirai à partir du code de test, mais cette fois j'ai trouvé le bon JavaDoc dans le lien ci-dessus, donc je l'ai implémenté basé sur JavaDoc.

Code ci-dessous Le dernier q de Matrixq est Qiita.

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

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

Matrixq (int rowSize, int columnSize) // Ceci est un constructeur qui crée un objet de la classe Matrixq //行と列のサイズを受け取ります { double2DArray=new double[rowSize][columnSize]; }

Matrixq (double [] [] mat2Darray) // Ceci est un autre constructeur qui crée un objet de classe Matrixq //double型の二次元配列を受け取ります、その二次元配列を名前mat2Darrayとして扱います //受け取ったその二次元配列を、インスタンス変数double2DArrayに代入します。 //mat2Darrayは、matrix2DimensinalArrayの略です { this.double2DArray=mat2Darray; }

//Instance Methods

double get (int i, int j) // Définit get () qui renvoie les éléments de mat2Darray [i] [j] de type double array { return double2DArray[i][j]; }

int getRowSize () // retourne la taille de la ligne getRowSize () est une méthode qui renvoie la taille de la ligne { int l=this.double2DArray.length; return l; }

int getColumnSize () // Renvoie la taille de la colonne getColumnSize () est une méthode qui renvoie la taille de la colonne { int l=this.double2DArray[0].length; return l; }

Jusqu'à présent, nous l'avons implémenté à partir du site de référence JavaDoc. Si vous connaissez le constructeur, le point est de savoir comment utiliser length () du tableau à deux dimensions. De plus, en langage Java, cette référence sort. J'utilise ceci pour accéder à une variable d'instance d'un objet d'une classe. Cependant, l'objet de cette classe n'a pas encore été créé. Par conséquent, vous ne pouvez pas utiliser l'opérateur point "nom.variable". ceci pointe vers un objet de cette classe et accède à sa variable d'instance en combinaison avec l'opérateur point.

la première Matrixq(int rowSize,int columnSize) { double2DArray=new double[rowSize][columnSize]; } Puis private double[][] double2DArray; Déclarez la taille d'un tableau bidimensionnel de type double déclaré comme variable d'instance privée dans. C'est le constructeur des objets de la classe Matrixq. Ce double privé [] [] double2DArray, une variable d'instance privée, sera créé automatiquement à chaque fois que vous créez un objet de la classe Matrixq.

Un tableau à deux dimensions est déclaré avec l'entier de type int rowSize reçu comme argument et la taille de columnSize. Le contenu du tableau bidimensionnel généré à ce moment (les valeurs de chaque élément) sont tous de 0,0. C'est une spécification Java. En d'autres termes, si vous utilisez un constructeur qui reçoit la taille de ligne et la taille de colonne, la valeur initiale de 0,0 est stockée dans le tableau bidimensionnel de type double de l'objet Matrixq créé.

Le constructeur suivant (définition multiple / polymorphisme) prend un tableau bidimensionnel de type double de contenu plus pratique comme argument et l'assigne au champ "double2DArray" de l'objet de classe Matrixq.

Ce champ doit être accessible avec getter (). C'est pourquoi nous avons une déclaration privée.

Le reste des méthodes d'instance peut être approximativement compris en regardant les commentaires. Ceci conclut l'explication du code ci-dessus.

Sous la méthode statique

//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");
	}
}

L'algorithme ici est amusant pour le lecteur. (Prévu pour être ajouté) Le point est la mise en œuvre de la gestion des exceptions. La méthode isValidMatrix () vérifie que les deux matrices (objets Matrixq) à calculer sont d'une taille raisonnable qui peut être calculée comme une matrice. C'est un peu difficile, mais aussi une partie amusante des calculs de matrice de programmation. La classe dérivée "MatrixException" de RuntimeException est implémentée.

En fait, j'ai également créé une classe ColumnVector et écrit une classe pour le produit d'une matrice quadratique carrée x un vecteur colonne à deux composants.

Il était assez difficile de trouver le produit. J'ai trouvé une formule, je l'ai essayée dans une petite file d'attente et j'ai finalement essayé. Correction de la partie où la relation entre les lignes et les colonnes est inversée.

...

Recommended Posts

Création d'une classe de matrice dans Java Partie 1
Création d'une classe pour une matrice en Java Partie 2-A propos d'une matrice (algèbre linéaire) -
Un examen rapide de Java appris en classe part3
Faire une analyse de phrase en Java 8 (partie 2)
Création d'une analyse de phrase dans Java 8 (partie 1)
Qu'est-ce qu'une classe en langage Java (3 /?)
[Création] Un mémorandum sur le codage en Java
Qu'est-ce qu'une classe en langage Java (1 /?)
Qu'est-ce qu'une classe en langage Java (2 /?)
Un examen rapide de Java appris en classe
Ecrire une classe qui peut être ordonnée en Java Un petit mémo standard
Ecrire une classe en Kotlin et l'appeler en Java
Rechercher un sous-ensemble en Java
[MQTT / Java] Implémentation d'une classe qui fait Pub / Sub de MQTT en Java
3 Implémentez un interpréteur simple en Java
J'ai créé un PDF avec Java.
Classe StringBuffer et StringBuilder en Java
Un exemple simple de rappels en Java
Restez coincé dans un Java Primer
Je ne peux pas créer une classe Java avec un nom spécifique dans IntelliJ
A propos du renvoi d'une référence dans un Java Getter
Lors de la recherche de plusieurs dans un tableau Java
Kotlin's Class part.2 à envoyer aux développeurs Java
Utilisez OpenCV_Contrib (ArUco) avec Java! (Partie 2-Programmation)
Java crée un tableau dans un document Word
Java crée un graphique circulaire dans Excel
Pourquoi Java appelle-t-il un fichier une classe?
Créer une application TODO dans Java 7 Créer un en-tête
Créons une application de calcul avec Java
Création d'un servlet dans l'environnement Liberty
Implémenter quelque chose comme une pile en Java
Diviser une chaîne avec ". (Dot)" en Java
Création d'un projet (et d'un référentiel GitHub) à l'aide de Java et Gradle avec IntelliJ IDEA
Création d'un environnement de développement pour les applications Web Java avec Docker pour Mac Part1
[Java] Implémenter une fonction qui utilise une classe implémentée dans le modèle Builder
J'ai créé un programme de jugement des nombres premiers en Java
Exemple simple de rappel dans l'exemple de classe anonyme Java Part2
Ajouter .gitignore lors de la création d'un projet dans Xcode
Méthodes de classe Java
Traitement d'échappement lors de la création d'une URL dans Ruby
Deux façons de démarrer un thread en Java + @
Créer un CSR avec des informations étendues en Java
classe Scanner java
Une histoire sur le JDK à l'ère de Java 11
Utilisez OpenCV_Contrib (ArUco) avec Java! (Partie 1-Construire) (OpenCV-3.4.4)
Classe Java HashMap
Comment afficher une page Web en Java
Appel de méthode Java depuis RPG (appel de méthode dans sa propre classe)
[Android / Java] Exploitez une base de données locale dans la salle
Mesurer la taille d'un dossier avec Java
Code pour échapper aux chaînes JSON en Java
java (classe abstraite)
Essayez de créer un babillard en Java
Changements dans Java 11
Janken à Java
Comment obtenir une classe depuis Element en Java
Une note quand vous voulez Tuple en Java
java pratique partie 1
J'ai écrit un programme de jugement des nombres premiers en Java