JohnsonGuo在不在?关于最小二乘法(10分)

L

lcl_003

Unregistered / Unconfirmed
GUEST, unregistred user!
以下是JohnsonGuo写的最小二乘法解线性方程组的源程序,有几 个地方不太明白主要是
调用的时候

procedure MinSqrMul(m, n: Integer; A: TMatrix; b: array of Double; var x: array of Double);
var
i, j, k: Integer;
ATA: array of array of Double;
ATb: array of Double;
Elem: Double;
begin
SetLength(ATA, n, n);
SetLength(ATb, n);
for i := 0 to n - 1 do
for j := 0 to n - 1 do begin
ATA[i, j] := 0;
for k := 0 to m - 1 do
ATA[i, j] := ATA[i, j] + A[k, i] * A[k, j];
end;
for i := 0 to n - 1 do begin
ATb := 0;
for j := 0 to m - 1 do
ATb := ATb + A[j, i] * b[j];
end;
for i := 0 to n - 1 do begin
Elem := ATA[i, i];
for j := i to n - 1 do
ATA[i, j] := ATA[i, j] / Elem;
ATb := ATb / Elem;
for k := i + 1 to n - 1 do begin
Elem := -ATA[k, i];
for j := [red]i + 1[/red] to n - 1 do
ATA[k, j] := ATA[k, j] + ATA[i, j] * Elem;
ATb[k] := ATb[k] + ATb * Elem;
end;
end;
x[n - 1] := ATb[n - 1];
for i := n - 2 downto 0 do begin
for j := i + 1 to n - 1 do
ATb := ATb - ATA[i, j] * x[j];
x := ATb;
end;
end;


以下是调用
procedure TForm1.FormClick(Sender: TObject);
var
A: TMatrix;
b: array [0..2] of Double;
x: array [0..1] of Double;
begin
SetLength(A, 3, 2);
A[0, 0] := 1; A[0, 1] := 2; b[0] := 3;
A[1, 0] := 1; A[1, 1] := 2; b[1] := 4;
A[2, 0] := 2; A[2, 1] := 1; b[2] := 3;
MinSqrMul(3, 2, A, b, x);
ShowMessage(Format('%f, %f', [x[0], x[1]]));
end;

我现在不明白调用的时候各个数据是什么。MinSqrMul(3, 2, A, b, x); 中
A应该是各点吧,那3,2,b,x是什么呢?
 
3个方程 2个未知数 b 是常数(非齐次项) x 是未知数
不知对不对?
 
法无二乘。
 
什么法无二乘?
 
若说一切法,是着一切相。是一既不二,是二既为一。
本来无有二,是有分别心,如无心分别,不二法门入。
呵呵无聊时打机锋玩啊
 
说的很跟老学究似的:)
 
火龙真人说话很有xuan机
 
玄而又玄,众妙之门,
真人,好深的禅机!佩服,佩服!

他说的什么意思谁给翻译翻译?
 
??可是Yves你说的是道德经啊,呵呵,
 
你这个“真人”(金大侠称做 “牛鼻子”)不也 口宣 佛法 么?呵呵
你应叫 火龙佛爷 什么的:)
 
不好意思两边都兼着职呢。
 
火龙真人,可否留下玉照,让我们开开眼界您的保养之道!
 
真想看么呵呵,留下油箱,看了后在猜猜我拍照片时候的年龄
 
接受答案了.
 
顶部