C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 50 を表示中)
■27670 / )  3元1次方程式
□投稿者/ セルピコ (7回)-(2008/11/12(Wed) 01:11:27)

分類:[.NET 全般] 

2008/11/12(Wed) 01:22:31 編集(投稿者)
2008/11/12(Wed) 01:12:28 編集(投稿者)

プログラム初心者です。visual C++でCを使ってプログラムを書いています。
以下のプログラムで、CSVファイルからデータを読み込んで、掃き出し法を使っ
て3元1次方程式を解くようにしたいのですが、forループ(矢印の箇所)の1順
目はちゃんと変数が入り計算できるのですが2順目以降からは3行3列の単位
行列が表示されてしまします。原因が分からず困っています。どこを直せばよ
いのでしょうか?
よろしくお願いします。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define DATASIZE 1000
#define N 3

double freqArray[DATASIZE];
double dbArray[DATASIZE];


int main(void)
{

char csvfilename[40];
char buf[256];
int fval;
double dbval;
int index = 0;
int i = 0;



FILE *csvfile;

//音声工房で生成したスペクトルファイルを開く

label1:printf ("音声工房で生成したスペクトルファイル名を入力して下さい。");
fflush (stdin);
gets (csvfilename);

if ( strlen(csvfilename ) == 0) return 0;


if( (csvfile = fopen( csvfilename, "r" )) == NULL )
{
printf( "ファイル '%s' は開けませんでした。\n\n", csvfilename );
goto label1;
}
//ファイルデータの周波数、デシベルパワーをそれぞれ配列データを作る

//printf( "周波数[Hz] デシベルパワー[dB] \n" );

while( fgets( buf, 256, csvfile ) != NULL )
{


if (sscanf(buf, "%d , %lf", &fval, &dbval) != 2)
{
printf("# データフォーマットエラー '%s'\n", buf);
exit(1);
} else if (index >= sizeof(dbArray) / sizeof(dbArray[0]))
{
printf("# データ数が最大個数(%d)を超過\n", sizeof(dbArray) / sizeof(dbArray[0]));
exit(1);
} else
{
//printf(" %d[Hz] %lf[dB]\n", fval, dbval);
freqArray[index] = fval;
dbArray[index] = dbval;
index++;
}
}
printf( "%d 個のデータを取得しました\n", index );

//放物線近似をするための3点の決定


for ( i = 1; i <= index-2; i++ )
{

if ( dbArray[i-1] > dbArray[i] )
{
if ( dbArray[i] < dbArray[i+1] )
{
printf ( " dbArray[%d]=%lf dbArray[%d]=%lf dbArray[%d]=%lf \n", i-1, dbArray[i-1], i, dbArray[i], i+1, dbArray[i+1] );
static double a[N][N+1] =
{
pow( freqArray[i-1], 2), freqArray[i-1], 1.0, dbArray[i-1],
pow( freqArray[i], 2), freqArray[i], 1.0, dbArray[i],
pow( freqArray[i+1], 2), freqArray[i+1], 1.0, dbArray[i+1]
};

double p;
double d;
int i, j, k;

for (i = 0; i < N; i++)   ←変数を読み込まない
   {
   for (j = 0; j < N; j++)
printf("%f\t", a[i][j]);
printf("x[%d]\t", i);
printf("%f\n", a[i][N]);
}

for (k = 0; k < N; k++)
{
p = a[k][k];
for (j = k; j < N+1; j++)
a[k][j] /= p;
for (i = 0; i < N; i++)
{
if (i != k)
{
d = a[i][k];
for (j = k; j < N+1; j++)
a[i][j] -= d*a[k][j];
}
}
}

printf("Solutions:\n");
for (k = 0; k < N; k++)
printf("x[%d] = %f\n", k, a[k][N]);
}
}
}

fclose ( csvfile );
return 0;
}
返信 編集キー/


管理者用

- Child Tree -