連立方程式の解を計算するJavaプログラムについてまとめています。
このページの目次です。
1. 連立方程式とは
2. プログラムで連立方程式が計算する方法
3. 連立方程式の解を計算するJavaのプログラム
連立方程式とは、同時に成立する複数本の方程式の組のことです。 方程式は式の中の文字に特別な値を代入すると成り立つ等式(「=」を用いた式)です。
たとえば、以下のように表せます。
a11・x1 + a12・x2 ・・・ a1n・xn = b1 a21・x1 + a22・x2 ・・・ a2n・xn = b2 ・ ・ ・ am1・x1 + am2・x2 ・・・ amn・xn = bn
下のような係数を抽出して作った係数行列を使用して、プログラムで連立方程式が計算できます。
a11 a12 ・・・ a1n b1 a21 a22 ・・・ a2n b2 ・ ・ ・ am1 am2 ・・・ amn bn
以下は、ガウス・ジョルダン法を用いて連立方程式の解を計算するJavaのプログラムです。
計算を行うクラスです。 係数行列が2次元配列と2次元のリストの両方で計算ができるように引数の型を変えてオーバーロードしたメソッドを用意してみました。
import java.util.ArrayList;
import java.util.List;
/**
 * 計算クラス
 */
public class Calculator {
	/**
	 * 連立方程式を計算する
	 * @param coefficientMatrix m行n列の係数行列
	 * @return 結果
	 */
	public List<Double> systemOfEquations(Listt<List<Double>> coefficientMatrix) {
		int n = coefficientMatrix.size();
		int m = coefficientMatrix.get(0).size();
		double[][] matrix = new double[n][];
		for (int i = 0; i < n; i++) {
			double[] row = new double[m];
			for (int j = 0; j < m; j++) {
				row[j] = coefficientMatrix.get(i).get(j);
			}
			matrix[i] = row;
		}
		return systemOfEquations(matrix);
	}
	/**
	 * 連立方程式を計算する
	 * @param coefficientMatrix m行n列の係数行列
	 * @return 結果
	 */
	public List<Double> systemOfEquations(final double[][] coefficientMatrix) {
		List<Double> result = new ArrayList<>();
		double[][] matrix = coefficientMatrix;
		int n = matrix.length;
		int m = matrix[0].length;
		for (int k = 0; k < n; k++) {
			double p = matrix[k][k];
			for (int j = k; j < m; j++) {
				matrix[k][j] = matrix[k][j]/p;
			}
			for (int i = 0; i < n; i++) {
				if (i != k) {
					double d = matrix[i][k];
					for (int j = k; j < m; j++) {
						matrix[i][j] = matrix[i][j] - d * matrix[k][j];
					}
				}
			}
		}
		for (int i = 0; i < n; i++) {
			result.add(matrix[i][n]);
		}
		return result;
	}
}
テスト用のクラスです。
import java.util.ArrayList;
import java.util.List;
public class SampleTest {
	public static void main(String[] args) {
		// 2次元配列の係数行列データ
		double[][] matrix1 = {
			{2.0, 3.0, 1.0, 4.0},
			{4.0, 1.0, -3.0, -2.0},
			{-1.0, 2.0, 2.0, 2.0}
		};
		// 2次元のリストの係数行列データ
		ListListt<List<Double>> matrix2 = new ArrayList<>();
		for (int i = 0; i < matrix1.length; i++) {
			List<Double> row = new ArrayList<>();
			for (int j = 0; j < matrix1[i].length; j++) {
				row.add(matrix1[i][j]);
			}
			matrix2.add(row);
		}
		// 計算して表示
		Calculator calc = new Calculator();
		printResult(calc.systemOfEquations(matrix1));
		printResult(calc.systemOfEquations(matrix2));
	}
	public static void printResult(List<Double> result) {
		for (int i = 0; i < result.size(); i++) {
			System.out.println(String.format("x%d = %f", i+1, result.get(i)));
		}
		System.out.println("");
	}
}
実行すると以下のように表示されます。
x1 = 2.000000 x2 = -1.000000 x3 = 3.000000 x1 = 2.000000 x2 = -1.000000 x3 = 3.000000
Javaで学ぶ計算プログラムの入門コンテンツをテーマに記事まとめています。 簡単な平均値の計算プログラムから知識を補足しつつ系統立てて説明しています。 標準偏差、相関係数、連立方程式の解法プログラム、回帰分析などの統計解析などの計算プログラムを取り扱っています。
Javaとは?から言語の枠を超えるところまで、Java言語についてまとめています。
スポンサーリンク
サイト内のページ
 言語
言語
C・C++
/HTML
/Java
/JavaScript
/PHP
/シェルスクリプト
 開発環境
開発環境
Ant
/Burp
/Eclipse
/Fiddler
/gcc
/gdb
/Git
/g++
/JDK
/JMeter
/JUnit
/Teraterm
/ZAP
 技術・仕様
技術・仕様
Ajax
/CORBA
/Jakarta EE(旧称J2EE、Java EE)
/JNI
 ライブラリ/Framework/CMS
ライブラリ/Framework/CMS
bootstrap
/jQuery
/FuelPHP
/Lucene
/MyBatis
/Seasar2
/Spring
/Struts
/WordPress
 Web API
Web API
Google Maps
 ITインフラ
ITインフラ OSとミドルウェア
OSとミドルウェア
Linux
/Windows
/シェル
ActiveMQ
/Tomcat
/MariaDB
/MySQL
/Nagios
/Redis
/Solr
 ITインフラ
ITインフラ セキュリティ
セキュリティ
公開サーバーのセキュリティ
 SI
SI
ホームページの作り方
スポンサーリンク
IPアドレス確認ツール
あなたのグローバルIPアドレスは以下です。
216.73.216.181
HTMLの表示色確認ツール
パスワード生成ツール
文字数のプルダウンを選択して、取得ボタンを押すと「a~z、A~Z、0~9」の文字を ランダムに組み合わせた文字列が表示されます。
ここに生成されます。
スポンサーリンク
Copyright (C) 2007-2024 zealseeds. All Rights Reserved.