ページ 11

ガウスの消去法

Posted: 2014年11月10日(月) 17:27
by ライト
この問題わかりますか?C言語の問題です。
行列とベクトルの計算で、問題はまずファイル
a.txtは4×4の行列。b.txtは4x1のベクトル。
この二つのファイルを読み込んでガウスの消去法で計算するのですが。
/*
gauss.c(ガウスの消去法)
*/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
#include "vmulti.c"
#define EPS 0.00001

/*ガウスの消去法*/
void gauss(matrix a, vector b, int n);

void gauss(matrix a, vector b, int n)
{
int k, c, i, j, d, l;
int x[]={0};
/*前進消去*/
for(k=1; k<=n-1; k++){
/*部分ピボット選択*/
for(i=k+1; i<=n; i++){
c = (-1)*(a[k])/(a[k][k]);
for(j=k+1; j<=n; j++){
a[j] = a[j] + c*a[k][j];
}
b = b + c*b[k];
}
}

/*後退代入*/
x[n] = b[n] / a[n][n];
for(k=n-1; k<=1; k++){
for(d=k+1; d<=n; d++){
x[k] = ((b[k] - (a[k][j]*x[j])) / a[k][k]);
}
}
}

int main(void)
{
int si, nrow, ncol;
int i, t, p;
matrix u;
vector v;
FILE *fpi, *fp;
char fname1[256], fname2[256];
int e = 0;

printf("行列A :");
scanf("%s", fname1);
printf("ベクトルB:");
scanf("%s", fname2);

if((fpi = fopen(fname1, "r")) == NULL) {
fprintf(stderr, "ファイル %s を開けません\n", fname1);
exit(1);
}

if((fp = fopen(fname2, "r")) == NULL) {
fprintf(stderr, "ファイル %s を開けません\n", fname2);
exit(1);
}

と、ここまでは自力で書いたのですがあとが分かりません。
vmulti.cには、/* ベクトルの領域確保 */
vector new_vector(int n)
{
vector v;

v = malloc(sizeof(SCALAR) * n);

if (v == NULL) {
fprintf(stderr, "ベクトルのメモリが確保できません\n");
exit(1);
}
return v;
}

/* 行列の領域確保 */
matrix new_matrix(int nrow, int ncol)
{
int i;
matrix a;

a = malloc(sizeof(vector) * (nrow+1));

if (a == NULL) {
fprintf(stderr, "行列のメモリが確保できません\n");
exit(1);
}
for (i = 0; i < nrow; i++) {
a = malloc(sizeof(SCALAR) * ncol);
if (a == NULL) {
while (--i >= 0)
free(a);
free(a);
fprintf(stderr, "行列のメモリが確保できません\n"); exit(1);
}
}
a[nrow]=NULL;
return a;
}
です。
教えてください!

Re: ガウスの消去法

Posted: 2014年11月10日(月) 18:11
by hide
フォーラムルールをまず読んで見てください。
現在マルチポストや丸投げなどによってルール違反になっています。

Re: ガウスの消去法

Posted: 2014年11月10日(月) 21:49
by みけCAT
コードを提示するときはBBcodeを有効にした状態でcodeタグで囲み、
かつ適切なインデントをしていただけると、見やすくて助かります。
ライト さんが書きました:この問題わかりますか?C言語の問題です。
行列とベクトルの計算で、問題はまずファイル
a.txtは4×4の行列。b.txtは4x1のベクトル。
この二つのファイルを読み込んでガウスの消去法で計算するのですが。
わかりません。何を計算するのですか?
ファイルのフォーマットの情報も無さそうに見えますね。