[問題] 雙重指標 二維陣列 副程式

看板C_and_CPP作者 (法國號有氣質)時間11年前 (2012/12/21 03:06), 編輯推噓-1(0113)
留言14則, 7人參與, 最新討論串1/1
開發平台(Platform): (Ex: VC++, GCC, Linux, ...) VC++ 額外使用到的函數庫(Library Used): (Ex: OpenGL, ...) 問題(Question): 我要利用 LU 分解去解一組線性聯立方程式 我使用的是 Numerical Recipes in C 的 code 有兩個副程式,第一個說明如下: void ludcmp(float **a, int n, int *indx, float *d) 簡單講就是我輸入一個n*n的方陣,名稱為a,n也是傳入值。 執行結果會回傳a, indx[], 和d。 回傳的意義是什麼請恕我略過,因為那是屬於數值分析解運算過程的內容。 回傳的a, indx[]需再傳入另一個副程式lubksb,以便解線性聯立方程組或是求得原本 的a的反矩陣。(請注意,經過ludcmp的運算之後,回傳的a已經與原本的a不一樣了, 被取代掉了) 第二個副程式說明如下: void lubksb(float **a, int n, int *indx, float b[]) 傳入這個副程式的a已經不是我要解的方程組「原本的」的係數了, 它是傳入經過ludcmp做LU分解後的一個矩陣。indx[]也是將ludcmp所回傳的 再傳入lubksb。 最後一個引數是方程組的常數項,我必須先定義才能傳入lubksb。 所以我的主程式很單純: 先宣告兩個副程式 然後就是在void main()裡面 先宣告變數 float **a,*b,d; int n,*indx; 再定義我的a(方程組未知數的係數), 和b(方程組的常數項)。 之後再呼叫 ludcmp(a,n,indx,&d); lubksb(a,n,indx,b); 應該就可以得到正確的解了。 餵入的資料(Input): 係數矩陣 常數項 4 2 -1 2 3 -1 2 10 11 3 9 8 預期的正確結果(Expected Output): 解應該是 2.4 -4.1333 -0.6667 錯誤結果(Wrong Output): 我的問題卡在: Recipe是用指標,甚至是雙重指標去把值傳入副程式中, 但我卻不知道如何在主程式中定義好我的a和b,讓它們可以傳到副程式中...... 程式碼(Code):(請善用置底文網頁, 記得排版) //前面有一些常用的宣告恕我省略// #include <math.h> #include "nrutil.c" #include "nrutil.h" #define TINY 1.0e-20; void ludcmp(float **a, int n, int *indx, float *d) 這兩行的宣告 void lubksb(float **a, int n, int *indx, float b[]) 不知道是否是正確的呢? void main() { float **a,*b,d; int n,*indx; ...(我就是笨在這一段不知道怎麼寫?) 如何定義a和b,並將它們傳入ludcmp中? ludcmp(a,n,indx,&d); lubksb(a,n,indx,b); } //以下是兩個副程式的內容// http://codepad.org/NyyHJPJA http://codepad.org/7Mrbb1yc //nrutil.c的連結如下// http://codepad.org/dkusa62f //nrutil.h的連結如下// http://codepad.org/EUohcWL6 補充說明(Supplement): -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.36.13.246

12/21 03:37, , 1F
貼長code請用置底文列出的空間
12/21 03:37, 1F

12/21 05:12, , 2F
這樣看好痛苦...
12/21 05:12, 2F

12/21 09:11, , 3F
= =
12/21 09:11, 3F

12/21 12:24, , 4F
殺了我吧
12/21 12:24, 4F

12/21 13:35, , 5F
a = matrix(1, n, 1, n);
12/21 13:35, 5F

12/21 13:35, , 6F
b = vector(1, n);
12/21 13:35, 6F

12/21 13:36, , 7F
// 填值
12/21 13:36, 7F

12/21 13:36, , 8F
ludcmp(a, n, indx, &d);
12/21 13:36, 8F

12/21 13:36, , 9F
lubksb(a, n, indx, b);
12/21 13:36, 9F

12/21 13:36, , 10F
// do something...
12/21 13:36, 10F

12/21 13:37, , 11F
free_vector(b, 1, n);
12/21 13:37, 11F

12/21 13:37, , 12F
free_matrix(a, 1, n, 1, n);
12/21 13:37, 12F

12/21 14:12, , 13F
來問問題,排版和用置底的網址是基本禮貌吧
12/21 14:12, 13F
※ 編輯: moussorgsky 來自: 114.36.5.74 (12/21 15:55)

12/21 15:56, , 14F
我試著改進,不知道這樣有沒有比較容易閱讀...
12/21 15:56, 14F
文章代碼(AID): #1Gqs6zoA (C_and_CPP)