トップ 言語 Java アルゴリズム 計算プログラム入門 連立方程式

連立方程式の解を計算するJavaプログラム

連立方程式の解を計算するJavaプログラムについてまとめています。

▲記事トップへ

目次

このページの目次です。

1. 連立方程式とは
2. プログラムで連立方程式が計算する方法
3. 連立方程式の解を計算するJavaのプログラム

もっと知識を広げるための参考
更新履歴

1. 連立方程式とは

連立方程式とは、同時に成立する複数本の方程式の組のことです。 方程式は式の中の文字に特別な値を代入すると成り立つ等式(「=」を用いた式)です。

たとえば、以下のように表せます。

a11・x1 + a12・x2 ・・・ a1n・xn = b1
a21・x1 + a22・x2 ・・・ a2n・xn = b2
・
・
・
am1・x1 + am2・x2 ・・・ amn・xn = bn

2. プログラムで連立方程式が計算する方法

下のような係数を抽出して作った係数行列を使用して、プログラムで連立方程式が計算できます。

a11 a12 ・・・ a1n b1
a21 a22 ・・・ a2n b2
・
・
・
am1 am2 ・・・ amn bn

3. 連立方程式の解を計算するJavaのプログラム

以下は、ガウス・ジョルダン法を用いて連立方程式の解を計算するJavaのプログラムです。

計算クラス(Calculator.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

もっと知識を広げるための参考

更新履歴

戻る

スポンサーリンク

サイト内のページ

言語
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
bootstrap /jQuery /FuelPHP /Lucene /MyBatis /Seasar2 /Spring /Struts /WordPress

Web API
Google Maps

ITインフラOSとミドルウェア
Linux /Windows /シェル
ActiveMQ /Tomcat /MariaDB /MySQL /Nagios /Redis /Solr

ITインフラサーバー
公開Webサーバー

ITインフラネットワーク
プログラミング /構築

ITインフラセキュリティ
公開サーバーのセキュリティ

PC製品
ZOTAC

SI
ホームページの作り方

その他
IT用語 /ITスキル体系

スポンサーリンク

関連サイト内検索ツール

zealseedsおよび関連サイト内のページが検索できます。

IPアドレス確認ツール

あなたのグローバルIPアドレスは以下です。

52.14.142.189

HTMLの表示色確認ツール

パスワード生成ツール

文字数のプルダウンを選択して、取得ボタンを押すと「a~z、A~Z、0~9」の文字を ランダムに組み合わせた文字列が表示されます。

ここに生成されます。

スポンサーリンク