プロが教えるわが家の防犯対策術!

A[1][1] = A[1][1] - A[0][1] * A[1][0] / A[0][0];
A[1][2] = A[1][2] - A[0][2] * A[1][0] / A[0][0];

A[2][1] = A[2][1] - A[0][1] * A[2][0] / A[0][0];

A[2][2] = A[2][2] - A[0][2] * A[2][0] / A[0][0];

A[2][2] = A[2][2] - A[1][2] * A[2][1] / A[1][1];
以上の式をfor文でまとめたいのですが、まとめられますか。

質問者からの補足コメント

  • どうもありがとうございます。
    ちなみにいかが全体のコードなのですが、Nが変数の場合でも載せて頂いたプログラムを組み込めば計算できるのでしょうか?

      補足日時:2018/08/12 06:21
  • 以下は全体のコードです。
    #include <iostream>
    #include <stdio.h>

    #define N 3

    double A[N][N] = {
    { 1.0, 2.0, 8.0 },
    { 4.0, 3.0, 2.0 },
    { 1.0, 4.0, 2.0 },
    };

    double b[N] = { 4.0, 12.0, 4.0 };

    #define N 3

    void solve(double A[N][N], double b[N]) {

    }

    int main() {

    //(2)-(1)* A[0][0] / A[0][0]
    A[1][1] = A[1][1] - A[0][1] * A[1][0] / A[0][0];
    printf("過程の計算でのA[1][1]は%f\n", A[1][1]);

      補足日時:2018/08/12 06:21
  • A[1][2] = A[1][2] - A[0][2] * A[1][0] / A[0][0];
    printf("過程の計算でのA[1][2]は%f\n", A[1][2]);

    b[1] = b[1] - b[0] * A[1][0] / A[0][0];
    printf("過程の計算でのb[1]は%f\n", b[1]);

    //(3)-(1) * A[2][0] / A[0][0]
    A[2][1] = A[2][1] - A[0][1] * A[2][0] / A[0][0];
    printf("過程の計算でのA[2][1]は%f\n", A[2][1]);

    A[2][2] = A[2][2] - A[0][2] * A[2][0] / A[0][0];
    printf("過程の計算でのA[2][2]は%f\n", A[2][2]);

      補足日時:2018/08/12 06:23
  • b[2] = b[2] - b[0] * A[2][0] / A[0][0];
    printf("過程の計算でのb[2]は%f\n", b[2]);

    //(3)'-(2)' * A[2][1] / A[1][1]
    A[2][2] = A[2][2] - A[1][2] * A[2][1] / A[1][1];
    printf("過程の計算でのA[2][2]は%f\n", A[2][2]);

    b[2] = b[2] - b[1] * A[2][1] / A[1][1];
    printf("過程の計算でのb[2]は%f\n", b[2]);

      補足日時:2018/08/12 06:24
  • //変数x2の係数が1の時のb[2]に入る数字が変数x2の解となるため。
    b[2] = b[2] / A[2][2];
    printf("b[2]は%f\n", b[2]);

    //変数x1の係数が1の時のb[1]に入る数字が変数x1の解となるため。
    b[1] = (b[1] - A[1][2] * b[2]) / A[1][1];
    printf("b[1]は%f\n", b[1]);

    //変数x2の係数が1の時のb[2]に入る数字が変数x2の解となるため。
    b[0] = (b[0] - A[0][2] * b[2] - A[0][1] * b[1]) / A[0][0];
    printf("b[0]は%f\n", b[0]);

      補足日時:2018/08/12 06:24
  • for (int k = 0; k < 3; k++) {

    printf("b[%d]はb[%d] = %fである\n",k, k, b[k]);
    }

    return 0;

    }

    までが全体のコードです。

      補足日時:2018/08/12 06:25

A 回答 (2件)

#include <stdio.h>



int main(void){
int i,j,k;

for(i = 1; i < 3; i++)
for(j = i; j < 3; j++)
for(k = i; k < 3; k++)
printf("A[%d][%d] = A[%d][%d] - A[%d][%d] * A[%d][%d] / A[%d][%d];\n", j,k,j,k,i-1,k,j,i-1,i-1,i-1);

return 0;
}
    • good
    • 0
この回答へのお礼

どうもありがとうございます。
どうか作るまでの過程を詳しく教えて頂けないでしょうか?

お礼日時:2018/08/12 05:51

> どうか作るまでの過程を詳しく教えて頂けないでしょうか?



欲しいのは以下の縦3列の変化
A B C
[1][1][0](グループ1)
[1][2][0]
[2][1][0]
[2][2][0]

[2][2][1](グループ2)



A/B列に合わせてC列も1から始めたいので+1しておいて後で引く
A B C
[1][1][1](グループ1)
[1][2][1]
[2][1][1]
[2][2][1]

[2][2][2](グループ2)


グループ1のA/B列の変化は、1から2までの通常の2重ループである。

ではグループ2の様にするにはどうすれば良いか?
→開始値を1ではなく2から始めれば良い
→2重ループの外側にもうひとつループを作成して、
 その変数の変化を2重ループの開始値にすれば良い
 ちょうどC列の変化と一致する。
 これを変数iのループとする

 内側の2重ループの変数をそれぞれj,kとする。

以上
    • good
    • 0
この回答へのお礼

どうもありがとうございます。

お礼日時:2018/08/12 06:20

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!