全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1194
推到 Plurk!
推到 Facebook!

關於矩陣的大小

尚未結案
JK53
一般會員


發表:5
回覆:8
積分:2
註冊:2003-12-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-12-27 21:33:21 IP:140.124.xxx.xxx 未訂閱
我最近在寫一個以矩陣作高斯運算的問題 目前只能做500*500的矩陣運算 但是如果以1000*1000的大小作時 會出現記憶體不足的訊息 請問我該如何處理這樣的問題勒 初學者, 不好意思
kuanll
一般會員


發表:5
回覆:6
積分:2
註冊:2002-09-25

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-12-27 22:09:05 IP:211.74.xxx.xxx 未訂閱
引言: 我最近在寫一個以矩陣作高斯運算的問題 目前只能做500*500的矩陣運算 但是如果以1000*1000的大小作時 會出現記憶體不足的訊息 請問我該如何處理這樣的問題勒 初學者, 不好意思
可不可以把程式碼附上來? 矩陣的內容是浮點數嗎?
taishyang
站務副站長


發表:377
回覆:5490
積分:4563
註冊:2002-10-08

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-12-28 02:47:42 IP:61.231.xxx.xxx 未訂閱
JK53您好: 您可以參考下面連結的討論 http://delphi.ktop.com.tw/topic.php?TOPIC_ID=29290 順心
61650105
一般會員


發表:0
回覆:1
積分:0
註冊:2003-12-24

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-28 08:46:09 IP:218.163.xxx.xxx 未訂閱
JK53您好: 你可以先配置一塊動態記憶體,然後將memory的 資料放置function中計算,最後記得要將memory 釋放喔. 我寫一個小小的例子,希望對你有用.
byte    *ptr , *ptrdst;
byte    src[10]= {1,2,3,4,5,6,7,8,9,10};
int     Num , i;
                        // Initial value
Num     = 10;
ptrdst  = NULL;
                        // Allocate the memory  
ptr = new byte[Num];
ptrdst = ptr;
                        // Read the  array data into memory
for(i=0 ; i    發表人 - taishyang 於 2003/12/28  14:45:46
        
JK53
一般會員


發表:5
回覆:8
積分:2
註冊:2003-12-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-01-01 10:01:37 IP:140.124.xxx.xxx 未訂閱
謝謝妳的幫忙 不過我試過了, 還是沒辦法 真是不好意思
JK53
一般會員


發表:5
回覆:8
積分:2
註冊:2003-12-27

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-01-01 10:09:13 IP:140.124.xxx.xxx 未訂閱
引言: 可不可以把程式碼附上來? 矩陣的內容是浮點數嗎?
如果把矩陣大小改為500*501的話, 就可以跑 但是現在的情形1000*1001就不行了 可是我希望能做到10000*10001的矩陣運算 那是不是更不可能了啊 int n=1000; float augment[1000][1000 1]; float temp[1000 1]; float sol[1000]; TDateTime t0, t1; t0 = Now(); for (int i=0;iLines->Add(L) ; } //隨機產生矩陣內的數值,並顯示在記事本內 for(int j=0;jmax_val) { max_val=fabs(augment[i][j]); max_i=i; } } //找出此時計算之行中數目最大的那個列 for (int k=j;k=0;i--) { float sum=0; for(int s=i 1;sLines->Add("x" IntToStr(i 1) " = " FloatToStr(sol[i])); } else { Memo1->Lines->Add("x" IntToStr(i 1) " = " " 本題將可能無解"); } } //最後的計算,並秀出答案 t1 = Now(); Memo1->Lines->Add(t0.TimeString()); Memo1->Lines->Add(t1.TimeString());
lu
高階會員


發表:11
回覆:189
積分:195
註冊:2003-11-19

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-01-06 13:28:34 IP:211.72.xxx.xxx 未訂閱
如果把矩陣大小改為500*501的話, 就可以跑 但是現在的情形1000*1001就不行了 可是我希望能做到10000*10001的矩陣運算 那是不是更不可能了啊
int n=1000;
float *augment[1000];
float temp[1000 1];
float sol[1000];

for (int c=0;c<1000;c  )
  augment[c] = new float [1001];    TDateTime t0, t1;
t0 = Now();    for (int i=0;iLines->Add(L) ;
}
//隨機產生矩陣內的數值,並顯示在記事本內        for(int j=0;jmax_val)
    {
      max_val=fabs(augment[i][j]);
      max_i=i;
    }
  }     //找出此時計算之行中數目最大的那個列      for (int k=j;k=0;i--)
{
  float sum=0;
  for(int s=i 1;sLines->Add("x" IntToStr(i 1) " =  " FloatToStr(sol[i]));
  }
  else
  {
    Memo1->Lines->Add("x" IntToStr(i 1) " = " " 本題將可能無解");
  }
} //最後的計算,並秀出答案    t1 = Now();
Memo1->Lines->Add(t0.TimeString());
Memo1->Lines->Add(t1.TimeString());    for (int c=0;c<1000;c  )
  delete [] augment[c];
 
 
這樣應該可以了
JK53
一般會員


發表:5
回覆:8
積分:2
註冊:2003-12-27

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-01-07 09:23:48 IP:140.124.xxx.xxx 未訂閱
謝謝你喔 現在已經可以用了
系統時間:2024-11-25 12:35:23
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!