#include <stdio.h>
#define N 4
int main() {
double A[N][N] = {
{3, 1.5, -6, 4.8},
{1, 1.5, -2, -2.4},
{0, -1.5, -2, -1},
{2, 4, -1.8, -0.6}
};
double b[N] = {1.2, 0.6, -2.4, 0};
double L[N][N] = {0};
double U[N][N];
double y[N] = {0};
double x[N] = {0};
double LU[N][N] = {0};
double Ax[N] = {0};
int i, j, k;
for(i = 0; i < N; i++) {
for(j = 0; j < N; j++) {
U[i][j] = A[i][j];
}
}
for(i = 0; i < N; i++) {
L[i][i] = 1.0;
}
for(i = 0; i < N - 1; i++) {
for(j = i + 1; j < N; j++) {
double factor = U[j][i] / U[i][i];
L[j][i] = factor;
for(k = 0; k < N; k++) {
U[j][k] = U[j][k] - factor * U[i][k];
}
}
}
for(i = 0; i < N; i++) {
y[i] = b[i];
for(j = 0; j < i; j++) {
y[i] -= L[i][j] * y[j];
}
}
for(i = N - 1; i >= 0; i--) {
x[i] = y[i];
for(j = i + 1; j < N; j++) {
x[i] -= U[i][j] * x[j];
}
x[i] /= U[i][i];
}
for(i = 0; i < N; i++) {
for(j = 0; j < N; j++) {
}
}
for(i = 0; i < N; i++) {
for(j = 0; j < N; j++) {
}
}
for(i = 0; i < N; i++) {
}
for(i = 0; i < N; i++) {
printf("x%d = %8.3f\n", i
+ 1, x
[i
]); }
for(i = 0; i < N; i++) {
for(j = 0; j < N; j++) {
LU[i][j] = 0;
for(k = 0; k < N; k++) {
LU[i][j] += L[i][k] * U[k][j];
}
}
}
printf("\nLU行列(LU = A の確認):\n");
for(i = 0; i < N; i++) {
for(j = 0; j < N; j++) {
}
}
for(i = 0; i < N; i++) {
Ax[i] = 0;
for(j = 0; j < N; j++) {
Ax[i] += A[i][j] * x[j];
}
}
printf("\nAxベクトル(Ax = b の確認):\n");
for(i = 0; i < N; i++) {
}
for(i = 0; i < N; i++) {
}
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNkZWZpbmUgTiA0CgppbnQgbWFpbigpIHsKZG91YmxlIEFbTl1bTl0gPSB7CnszLCAxLjUsIC02LCA0Ljh9LAp7MSwgMS41LCAtMiwgLTIuNH0sCnswLCAtMS41LCAtMiwgLTF9LAp7MiwgNCwgLTEuOCwgLTAuNn0KfTsKCmRvdWJsZSBiW05dID0gezEuMiwgMC42LCAtMi40LCAwfTsKZG91YmxlIExbTl1bTl0gPSB7MH07CmRvdWJsZSBVW05dW05dOwpkb3VibGUgeVtOXSA9IHswfTsKZG91YmxlIHhbTl0gPSB7MH07CmRvdWJsZSBMVVtOXVtOXSA9IHswfTsKZG91YmxlIEF4W05dID0gezB9OwoKaW50IGksIGosIGs7Cgpmb3IoaSA9IDA7IGkgPCBOOyBpKyspIHsKZm9yKGogPSAwOyBqIDwgTjsgaisrKSB7ClVbaV1bal0gPSBBW2ldW2pdOwp9Cn0KCmZvcihpID0gMDsgaSA8IE47IGkrKykgewpMW2ldW2ldID0gMS4wOwp9Cgpmb3IoaSA9IDA7IGkgPCBOIC0gMTsgaSsrKSB7CmZvcihqID0gaSArIDE7IGogPCBOOyBqKyspIHsKCmRvdWJsZSBmYWN0b3IgPSBVW2pdW2ldIC8gVVtpXVtpXTsKTFtqXVtpXSA9IGZhY3RvcjsKCmZvcihrID0gMDsgayA8IE47IGsrKykgewpVW2pdW2tdID0gVVtqXVtrXSAtIGZhY3RvciAqIFVbaV1ba107Cn0KfQp9CmZvcihpID0gMDsgaSA8IE47IGkrKykgewoKeVtpXSA9IGJbaV07Cgpmb3IoaiA9IDA7IGogPCBpOyBqKyspIHsKeVtpXSAtPSBMW2ldW2pdICogeVtqXTsKfQp9Cgpmb3IoaSA9IE4gLSAxOyBpID49IDA7IGktLSkgewoKeFtpXSA9IHlbaV07Cgpmb3IoaiA9IGkgKyAxOyBqIDwgTjsgaisrKSB7CnhbaV0gLT0gVVtpXVtqXSAqIHhbal07Cn0KCnhbaV0gLz0gVVtpXVtpXTsKfQpwcmludGYoIkzooYzliJc6XG4iKTsKCmZvcihpID0gMDsgaSA8IE47IGkrKykgewpmb3IoaiA9IDA7IGogPCBOOyBqKyspIHsKcHJpbnRmKCIlOC4zZiAiLCBMW2ldW2pdKTsKfQpwcmludGYoIlxuIik7Cn0KcHJpbnRmKCJcblXooYzliJc6XG4iKTsKCmZvcihpID0gMDsgaSA8IE47IGkrKykgewpmb3IoaiA9IDA7IGogPCBOOyBqKyspIHsKcHJpbnRmKCIlOC4zZiAiLCBVW2ldW2pdKTsKfQpwcmludGYoIlxuIik7Cn0KCnByaW50ZigiXG5544OZ44Kv44OI44OrOlxuIik7Cgpmb3IoaSA9IDA7IGkgPCBOOyBpKyspIHsKcHJpbnRmKCIlOC4zZlxuIiwgeVtpXSk7Cn0KCgpwcmludGYoIlxu6YCj56uL5pa556iL5byP44Gu6KejIHg6XG4iKTsKCmZvcihpID0gMDsgaSA8IE47IGkrKykgewpwcmludGYoInglZCA9ICU4LjNmXG4iLCBpICsgMSwgeFtpXSk7Cn0KCmZvcihpID0gMDsgaSA8IE47IGkrKykgewpmb3IoaiA9IDA7IGogPCBOOyBqKyspIHsKCkxVW2ldW2pdID0gMDsKCmZvcihrID0gMDsgayA8IE47IGsrKykgewpMVVtpXVtqXSArPSBMW2ldW2tdICogVVtrXVtqXTsKfQp9Cn0KCnByaW50ZigiXG5MVeihjOWIl++8iExVID0gQSDjga7norroqo3vvIk6XG4iKTsKCmZvcihpID0gMDsgaSA8IE47IGkrKykgewpmb3IoaiA9IDA7IGogPCBOOyBqKyspIHsKcHJpbnRmKCIlOC4zZiAiLCBMVVtpXVtqXSk7Cn0KcHJpbnRmKCJcbiIpOwp9Cgpmb3IoaSA9IDA7IGkgPCBOOyBpKyspIHsKCkF4W2ldID0gMDsKCmZvcihqID0gMDsgaiA8IE47IGorKykgewpBeFtpXSArPSBBW2ldW2pdICogeFtqXTsKfQp9CgpwcmludGYoIlxuQXjjg5njgq/jg4jjg6vvvIhBeCA9IGIg44Gu56K66KqN77yJOlxuIik7Cgpmb3IoaSA9IDA7IGkgPCBOOyBpKyspIHsKcHJpbnRmKCIlOC4zZlxuIiwgQXhbaV0pOwp9CgpwcmludGYoIlxu5YWD44GuYuODmeOCr+ODiOODqzpcbiIpOwoKZm9yKGkgPSAwOyBpIDwgTjsgaSsrKSB7CnByaW50ZigiJTguM2ZcbiIsIGJbaV0pOwp9CnJldHVybiAwOwp9Cg==