#include(stdio.h)
int main(){
double a[4][4]={{1,2,0,-1},{-1,1,2,0},{2,0,1,1},{1,-2,-1,1}}; //入力用の配列
double inv_a[4][4]; //ここに逆行列が入る
double buf; //一時的なデータを蓄える
int i,j,k; //カウンタ
int n=4; //配列の次数
//単位行列を作る
for(i=0;i<n;i++){
for(j=0;j<n;j++){
inv_a[i][j]=(i==j)?1.0:0.0;
}
}
//掃き出し法
for(i=0;i<n;i++){
buf=1/a[i][i];
for(j=0;j<n;j++){
a[i][j]*=buf;
inv_a[i][j]*=buf;
}
for(j=0;j<n;j++){
if(i!=j){
buf=a[j][i];
for(k=0;k<n;k++){
a[j][k]-=a[i][k]*buf;
inv_a[j][k]-=inv_a[i][k]*buf;
}
}
}
}
//逆行列を出力
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf(" %f",inv_a[i][j]);
}
printf("\n");
}
}
という、4次元正方行列の逆行列を求めるプログラムがあるのですが
これを複数の行列の逆行列が求められる関数にする場合を教えてください・・行列は配列で作ってるのでよくわかりません、お願いします
No.2ベストアンサー
- 回答日時:
もともとのコードが正しければ(逆行列を求めるロジックに誤りがなければ)、
こんな感じでよいのではないかと思います。
#include <stdio.h>
#define N (4)//配列の次数
void getInverseMatrix(double (*a)[N], double (*b)[N])
{
double buf;//一時的なデータを蓄える
int i, j, k;//カウンタ
//単位行列を作る
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
b[i][j] = (i == j) ? 1.0 : 0.0;
}
}
//掃き出し法
for (i = 0; i < N; i++) {
buf = 1 / a[i][i];
for (j = 0; j < N; j++) {
a[i][j] *= buf;
b[i][j] *= buf;
}
for (j = 0; j < N; j++) {
if (i != j) {
buf = a[j][i];
for (k = 0; k < N; k++) {
a[j][k] -= a[i][k] * buf;
b[j][k] -= b[i][k] * buf;
}
}
}
}
}
void printMatrix(double (*a)[N])
{
int i, j;
for (i = 0; i < N; i++) {
for (j = 0; j < N; j++) {
printf("%10.6f", a[i][j]);
}
putchar('\n');
}
}
int main(void)
{
double a[N][N] = {//入力用の配列
{ 1, 2, 0, -1},
{ -1, 1, 2, 0},
{ 2, 0, 1, 1},
{ 1, -2, -1, 1}
};
double b[N][N] = {//入力用の配列
{ 2, 0, -2, 3},
{ -4, -1, 1, 1},
{ 0, 3, -2, -1},
{ 1, -1, 0, 4}
};
double inv[N][N];//ここに逆行列が入る
printf("【行列a】\n");
printMatrix(a);
getInverseMatrix(a, inv);
printf("【行列aの逆行列】\n");
printMatrix(inv);
printf("\n【行列b】\n");
printMatrix(b);
getInverseMatrix(b, inv);
printf("【行列bの逆行列】\n");
printMatrix(inv);
return 0;
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# C 言語の Gauss Jordan 法について 2 2022/12/28 11:16
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- C言語・C++・C# LU分解法のピボット選択機能実装について(C言語・gcc-9) 1 2022/07/22 15:20
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
- C言語・C++・C# c言語の問題です 課題1 (二分探索木とセット) 大きさ size の配列 array を考える。す 2 2023/01/10 21:08
- C言語・C++・C# このプログラミングの問題を教えて欲しいです。 キーボードから整数kを入力し、kが配列aの中に何個存在 2 2022/12/19 22:50
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・「みんな教えて! 選手権!!」開催のお知らせ
- ・漫画をレンタルでお得に読める!
- ・「黒歴史」教えて下さい
- ・2024年においていきたいもの
- ・我が家のお雑煮スタイル、教えて下さい
- ・店員も客も斜め上を行くデパートの福袋
- ・食べられるかと思ったけど…ダメでした
- ・【大喜利】【投稿~12/28】こんなおせち料理は嫌だ
- ・前回の年越しの瞬間、何してた?
- ・【お題】マッチョ習字
- ・モテ期を経験した方いらっしゃいますか?
- ・一番最初にネットにつないだのはいつ?
- ・好きな人を振り向かせるためにしたこと
- ・【選手権お題その2】この漫画の2コマ目を考えてください
- ・2024年に成し遂げたこと
- ・3分あったら何をしますか?
- ・何歳が一番楽しかった?
- ・治せない「クセ」を教えてください
- ・【大喜利】【投稿~12/17】 ありそうだけど絶対に無いことわざ
- ・【選手権お題その1】これってもしかして自分だけかもしれないな…と思うあるあるを教えてください
- ・集合写真、どこに映る?
- ・自分の通っていた小学校のあるある
- ・フォントについて教えてください!
- ・これが怖いの自分だけ?というものありますか?
- ・スマホに会話を聞かれているな!?と思ったことありますか?
- ・それもChatGPT!?と驚いた使用方法を教えてください
- ・見学に行くとしたら【天国】と【地獄】どっち?
- ・これまでで一番「情けなかったとき」はいつですか?
- ・この人頭いいなと思ったエピソード
- ・あなたの「必」の書き順を教えてください
- ・10代と話して驚いたこと
- ・14歳の自分に衝撃の事実を告げてください
- ・人生最悪の忘れ物
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
c言語で、繰り返し文の中で、0....
-
至急です! マクロ定義で #defi...
-
C 開放してるのにエラー(doubl...
-
float型とdouble型の変数の違い...
-
C言語を実行すると-infが出てき...
-
C言語の型による処理速度の違い
-
int とdoubleの比較
-
doubleの変数にintとintの割り...
-
ガウスの掃き出し法によるC++プ...
-
c言語でDFTのプログラムを作成...
-
-1.#IND00 をデバッグしたい
-
浮動小数点数が表示されないん...
-
バイナリから実数を取得したい...
-
-1.#IND00と出てしまうのですが...
-
C# 浮動小数の数値文字列化
-
C言語初心者 構造体 課題について
-
C言語のデバック 領域の二重解...
-
浮動小数点の定数
-
浮動小数点の誤差のあわせ方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムでの数字につく”f”の...
-
C言語を実行すると-infが出てき...
-
c言語で、繰り返し文の中で、0....
-
C 開放してるのにエラー(doubl...
-
doubleの変数にintとintの割り...
-
至急です! マクロ定義で #defi...
-
C言語 関数プロトタイプ宣言の...
-
float型とdouble型の変数の違い...
-
2次方程式の解を求めるプログ...
-
int とdoubleの比較
-
difftime()について
-
関数におけるif文とreturn文に...
-
物体が往復する動きを作りたい
-
Cで3乗根を求める方法
-
-1.#IND00と出てしまうのですが...
-
C言語の型による処理速度の違い
-
2分法で方程式の複数の解を自...
-
浮動小数点の定数
-
listに構造体を格納
-
c言語のコンパイルエラー canno...
おすすめ情報