請問:將text檔轉成矩陣 |
尚未結案
|
初入BCB
一般會員 ![]() ![]() 發表:10 回覆:4 積分:2 註冊:2005-03-04 發送簡訊給我 |
|
blk5743
高階會員 ![]() ![]() ![]() ![]() 發表:34 回覆:371 積分:236 註冊:2003-11-17 發送簡訊給我 |
|
初入BCB
一般會員 ![]() ![]() 發表:10 回覆:4 積分:2 註冊:2005-03-04 發送簡訊給我 |
|
blk5743
高階會員 ![]() ![]() ![]() ![]() 發表:34 回覆:371 積分:236 註冊:2003-11-17 發送簡訊給我 |
請參考這一篇 http://delphi.ktop.com.tw/topic.php?topic_id=65375
【問題】有關檔案存取fopen fscanf fprintf...
|
初入BCB
一般會員 ![]() ![]() 發表:10 回覆:4 積分:2 註冊:2005-03-04 發送簡訊給我 |
謝謝 blk5743 姐的指導
但是試了一整晚仍發現有些問題想跟請教 因為我是從數學軟體 Mathematica產生數值存成.txt檔
當我在BCB裡面呼叫進來並做矩陣相乘時卻發生ERROR錯誤
不知道是否跟space或是數值的位數有關
在進行5*5矩陣相乘時數值都對
但進行5*5以上的矩陣相成時卻會產生 "9.7025605752885E30"的結果 以下是我的code:
#define m 6;
#define n 6; void __fastcall TForm1::Button1Click(TObject *Sender)
{
FILE *fp1,*fp2;
float a[m][n];
float b[n][1];
float c[m][1];
int i,j; //a matrix
ZeroMemory(a,sizeof(a));
fp1= fopen("out1.txt","r加");
for ( int i = 0; i < m; i加加 )
{
for ( int j = 0; j < n; j加加 )
{
fscanf(fp1, "%f", &a[i][j]);
}
}
fclose(fp1); //Edit1->Text =FloatToStr(c[0][3]); //b matrix
ZeroMemory(b,sizeof(b));
fp2 = fopen("out2.txt","r加");
for ( int i = 0; i < n; i加加 )
{
for ( int j = 0; j < 1; j加加 )
{
fscanf(fp2, "%f", &b[i][j]);
}
}
fclose(fp2);
// int I,J,K;
for (I=0; I < n;I加加)
for (J=0;J < 1;J加加)
Memo1->Lines->Add(b[I][J]); for (I=0;I < m;I加加)
for (J=0;J < n;J加加)
Memo3->Lines->Add(a[I][J]); for (I=0;I < m;I加加)
for (J=0;J < 1;J加加) {
for (K=0;K < n;K加加)
c[I][J]+=a[I][K]*b[K][J];
Memo2->Lines->Add(c[I][J]);
}
} //--------------------------------結束 其中out1.txt:
0.5403023058681398 -0.4161468365471424 -0.9899924966004454 -0.6536436208636119 0.28366218546322625 0.960170286650366 0.7539022543433046 -0.14550003380861354 -0.9111302618846769 -0.8390715290764524 0.004425697988050785 0.8438539587324921 0.9074467814501962 0.1367372182078336 -0.7596879128588213 -0.9576594803233847 -0.27516333805159693 0.6603167082440802 0.9887046181866692 0.40808206181339196 -0.5477292602242684 -0.9999608263946371 -0.5328330203333975 0.424179007336997 0.9912028118634736 0.6469193223286404 -0.2921388087338362 -0.9626058663135666 -0.7480575296890003 0.15425144988758405 0.9147423578045313 0.8342233605065102 -0.013276747223059479 -0.8485702747846052 -0.9036922050915067 -0.12796368962740468 out2.txt:
0.8414709848078965 0.9092974268256817 0.1411200080598672 -0.7568024953079282 -0.9589242746631385 -0.27941549819892586
|
blk5743
高階會員 ![]() ![]() ![]() ![]() 發表:34 回覆:371 積分:236 註冊:2003-11-17 發送簡訊給我 |
引言: 謝謝 blk5743 姐的指導=>雖然顯示女,但我是男的 但是試了一整晚仍發現有些問題想跟請教 因為我是從數學軟體 Mathematica產生數值存成.txt檔 當我在BCB裡面呼叫進來並做矩陣相乘時卻發生ERROR錯誤 不知道是否跟space或是數值的位數有關 在進行5*5矩陣相乘時數值都對你的矩陣最大是6x6(m=n=6) 但進行5*5以上的矩陣相成時卻會產生 "9.7025605752885E30"的結果 這我不清楚,E是科學記號的意思吧,看來可能是位數太多了 float b[n][1];==>何必宣告為二維 用b[n]即可 float c[m][1];==>何必宣告為二維 用c[n]即可 for (I=0;I < m;I ) for (J=0;J < 1;J )==>無意義 j一定為0 { for (K=0;K < n;K ) c[I][J] =a[I][K]*b[K][J];[red]==>你可以在這邊設中斷點檢查值的變化/red] Memo2->Lines->Add(c[I][J]); }請恕我只能提供你方向,不能也不應該幫你把這一個問題解到完 |
初入BCB
一般會員 ![]() ![]() 發表:10 回覆:4 積分:2 註冊:2005-03-04 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |