[問題] 雙重指標 二維陣列 副程式
開發平台(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
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
12/21 13:35, 5F
→
12/21 13:35, , 6F
12/21 13:35, 6F
→
12/21 13:36, , 7F
12/21 13:36, 7F
→
12/21 13:36, , 8F
12/21 13:36, 8F
→
12/21 13:36, , 9F
12/21 13:36, 9F
→
12/21 13:36, , 10F
12/21 13:36, 10F
→
12/21 13:37, , 11F
12/21 13:37, 11F
→
12/21 13:37, , 12F
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