C言語で連立一次方程式
/*
連立一次方程式
a*x + b*y = e
c*x + d*y = f
の解を求めるプログラムを作成したい。
a,b,c,d,e,f をキーボード入力させる
ことで、
行列 [a b
c d]
の逆行列、及び、連立方程式の解( x= , y= )を求めたい。
なお、a b c d の値によっては、逆行列を求めることが
出来ません。その時は、
【解を求めることはできません】
と表示してプログラムを終了するようにして下さい。
(注)
[a,b,c,d,e,f]を 2次元配列 ma[2][3]とする.
[逆行列[a,b,c,d]と解x,y]を 2次元配列 mb[2][3]とする.
ma[][] の値をmain関数内でキーボード入力する
mb[][] の値は,mat_keisan関数内で計算
mb[][] の値をmain関数内で表示
関数 mat_keisan の戻り値として,「解」が求まる方程式か
どうかを知らせる「int 型のフラグ(旗)」として用いるとよい.
*/
#include<stdio.h>
int mat_keisan(int ma , int mb);
int main(void)
{
int inverse;
double ma[2][3];
double mb[2][3]={0};
printf("連立一次方程式の計算\n");
printf("a * x + b * y= e\n");
printf("c * x + d * y= f\n");
printf("Input a :");
scanf("%lf",&ma[1][1]);
printf("Input b :");
scanf("%lf",&ma[1][2]);
printf("Input c :");
scanf("%lf",&ma[1][3]);
printf("Input d :");
scanf("%lf",&ma[2][1]);
printf("Input e :");
scanf("%lf",&ma[2][2]);
printf("Input f :");
scanf("%lf",&ma[2][3]);
printf("%4.2f* x + %4.2f * y = %4.2f\n", ma[1][1],ma[1][2],ma[1][3]);
printf("%4.2f* x + %4.2f * y = %4.2f\n", ma[2][1],ma[2][2],ma[2][3]);
inverse=mat_keisan(ma,mb);
if(inverse==1) printf("計算できません\n");
else{
printf("逆行列\n");
printf("%4.2f %4.2f\n", mb[1][1],mb[1][2]);
printf("%4.2f %4.2f\n", mb[2][1],mb[2][2]);
printf("解\n");
printf("x=%4.2f\n",mb[1][3]);
printf("y=%4.2f\n",mb[3][3]);
}
return (0);
}
/*配列の足し算 */
int mat_keisan(int ma ,int mb )
{
int x,y,z;//
1/ma[1][1]*mb[2][2]-ma[1][2]*mb[2][2];
//逆行列と解を求めるプログラムを作成する。
//そしてその値をmb[][] に入力する。
return(#######);
}
関数内が手も足もでません;
他のサイトを調べてみたのですが逆行列を求めるプログラムがよくわかりません;
>int mat_keisan(int ma ,int mb )
は、あってないかもです;
それとinverseの意味がわかりません;
ヒントや、解説を
よろしくお願いします;。
A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
小規模な連立方程式であれば、
ガウス・ジョルダン法
を使うのです。大規模な連立方程式であればLU分解法ですね。
参考URL:http://homepage3.nifty.com/gakuyu/suti/renritu/g …
No.2
- 回答日時:
連立一次方程式以前の話として、
>double ma[2][3];
この定義で、
>scanf("%lf",&ma[1][3]);
>scanf("%lf",&ma[2][1]);
>scanf("%lf",&ma[2][2]);
>scanf("%lf",&ma[2][3]);
これらは配列の定義範囲外の領域であることはおわかりですか?
コードの他の部分でも、配列の定義範囲外の領域にアクセスしていますね。
No.1
- 回答日時:
「inverse」という単語の意味は「逆」. プログラム中の意味は, プログラムを書いた人に聞いてくれ.
プログラムを書く以前の問題として, 「自分ならどのように解くか」をきちんと説明できますか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 宣言する関数の形が決まっている状態で、 str1とstr2の文字列をこの順に引っ付けてstrに保存し 2 2022/05/30 18:21
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# C言語 3 2022/10/04 15:07
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- C言語・C++・C# c言語でユーザ関数を利用して複素数のべき乗と絶対値の数列を計算するプログラムが作りたいです。 3 2023/01/29 22:13
- C言語・C++・C# C言語(構造体) 3 2022/07/05 20:08
- C言語・C++・C# 10個の実数に対する降順ソート結果を出力するプログラムを作りたいのですが、以下のプログラムをどう直せ 1 2022/07/09 22:16
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
- C言語・C++・C# C言語階乗の総和を求める 2 2023/03/04 23:31
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
4の倍数を論理演算で表す。。
-
10個出力で改行したいのですが...
-
小数点切捨て表示
-
コーディング
-
scanfに文字が入力されたときに...
-
コマンドラインに出力した文字...
-
【C言語教えてください】sin波...
-
printf で二進表示を行いたい。
-
strcmp
-
C言語のじゃんけんゲームのプロ...
-
2の累乗を計算するプログラム...
-
srand(time(NULL))の使い方
-
c言語 プログラム ピラミッド
-
Cプログラムについて
-
円の面積を求めるプログラミン...
-
cshの文字列操作(0埋め)
-
defineで定数が置き換えられな...
-
unsigned int型について
-
パスカルの三角形についてのCプ...
-
Cでオセロゲームプログラム
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
10個出力で改行したいのですが...
-
既約分数の表示プログラム
-
printf で二進表示を行いたい。
-
8人分のテストの点数を入力し、...
-
printf( " %2d", p * q );
-
strcmp
-
CTRL+Dでループを抜けるには
-
4の倍数を論理演算で表す。。
-
%P と %X の違い
-
【C言語教えてください】sin波...
-
c言語でAからZまでを表示する...
-
cshの文字列操作(0埋め)
-
万年カレンダーのC言語プログラ...
-
コマンドラインに出力した文字...
-
scanfに文字が入力されたときに...
-
コンパイルエラーについて
-
ホームページをC言語で作りたい...
-
改行について 1行に何個かづ...
-
台形の面積を求めるプログラム
-
なぜgccはstdio.hをインクルー...
おすすめ情報