急寻曲线拟和算法(最小二乘法),能拟和二次曲线就可以了。希望各位提供线索。(100分)

  • 主题发起人 主题发起人 wxb761014
  • 开始时间 开始时间
W

wxb761014

Unregistered / Unconfirmed
GUEST, unregistred user!
谢谢!!!
 
刚好写过:)
procedure MinSqrMul(m, n: Integer;
A: TMatrix;
b: array ofdo
uble;
var x: array ofdo
uble);
var
i, j, k: Integer;
ATA: array of array ofdo
uble;
ATb: array ofdo
uble;
Elem:do
uble;
begin
SetLength(ATA, n, n);
SetLength(ATb, n);
for i := 0 to n - 1do
for j := 0 to n - 1do
begin
ATA[i, j] := 0;
for k := 0 to m - 1do
ATA[i, j] := ATA[i, j] + A[k, i] * A[k, j];
end;
for i := 0 to n - 1do
begin
ATb := 0;
for j := 0 to m - 1do
ATb := ATb + A[j, i] * b[j];
end;
for i := 0 to n - 1do
begin
Elem := ATA[i, i];
for j := i to n - 1do
ATA[i, j] := ATA[i, j] / Elem;
ATb := ATb / Elem;
for k := i + 1 to n - 1do
begin
Elem := -ATA[k, i];
for j := i + 1 to n - 1do
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 - 2do
wnto 0do
begin
for j := i + 1 to n - 1do
ATb := ATb - ATA[i, j] * x[j];
x := ATb;
end;
end;

procedure Tsensor.Button1Click(Sender: TObject);
var
A: TMatrix;
i, j: byte;
b: array ofdo
uble;
x: array ofdo
uble;
begin
setlength(A, series2.Count, 2);
Setlength(b, series2.Count);
Setlength(x, series2.Count);
for i := 1 to series2.Countdo
begin
A[i - 1, 0] := series2.XValue[i - 1];
A[i - 1, 1] := 1;
b[i - 1] := series2.YValue[i - 1];
end;
MinSqrMul(series2.Count, 2, A, b, x);
series1.AddXY(series2.XValue[0], x[0] * series2.XValue[0] + x[1]);
series1.AddXY(series2.XValue[series2.Count - 1], x[0] * series2.XValue[series2.Count - 1] + x[1]);
dm2.cfgADOTable2.Edit;
dm2.cfgADOTable2.fieldbyname('A').asstring := formatfloat('0.000', x[0]);
dm2.cfgADOTable2.fieldbyname('B').asstring := formatfloat('0.000', x[1]);
dm2.cfgADOTable2.Post;
end;
 
程序我就不贴出来了。
建议你看看《数值分析》,我曾经学过。好像在第五章有n次拟合曲线的计算方法,很容易的改成程序,看懂了只要几分钟。
 
to:lcl_003
谢谢,你有java的程序吗?我对pascal不是太熟,c或者c++的也行
另外,能否说明一下你的函数的用法,参数意义,适用情况等等。
十分感谢!!!!
 
我买过一本书,书名是《C语言算法大全》,才20元,600多页,读
大学时买的;现在再版的好象要100元左右。
可惜,该书不在旁边。
 
多人接受答案了。
 
TMatrix,Delphi6.0不认识该怎么办?
 
to:lcl_003, 我的执行结果不对啊,能不能给我发一个 zhy9376@163.com ,谢谢
 
TMatrix,是什么啊
 
up,对啊,TMatrix是怎么定义的?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
2K
DelphiTeacher的专栏
D
后退
顶部