連立方程式の解を計算する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
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インフラ
セキュリティ
公開サーバーのセキュリティ
SI
ホームページの作り方
スポンサーリンク
IPアドレス確認ツール
あなたのグローバルIPアドレスは以下です。
216.73.216.99
HTMLの表示色確認ツール
パスワード生成ツール
文字数のプルダウンを選択して、取得ボタンを押すと「a~z、A~Z、0~9」の文字を ランダムに組み合わせた文字列が表示されます。
ここに生成されます。
スポンサーリンク
Copyright (C) 2007-2024 zealseeds. All Rights Reserved.