高分请教:最小二分法的问题 ( 积分: 100 )

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

wcj003

Unregistered / Unconfirmed
GUEST, unregistred user!
我遇到这样一个问题:
我有一组数(可以想象成平面上的点),要求算出方程y=ax+b的解(a、b)
xy为横坐标与纵坐标。
现在的问题是:怎样限定a的值处于0-1之间?
有兴趣的可与我联系:wcj003@163.net
 
我遇到这样一个问题:
我有一组数(可以想象成平面上的点),要求算出方程y=ax+b的解(a、b)
xy为横坐标与纵坐标。
现在的问题是:怎样限定a的值处于0-1之间?
有兴趣的可与我联系:wcj003@163.net
 
算法程序:
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 := k 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;

调用部分:
MinSqrMul(iObject,2,aFrom,aTo,aX);
其中:
iObject:点数
2:变量个数
aFrom:横坐标数组,其中第二列为1
aTo:纵坐标数组
aX:结果数组(a、b)
 
通过比较,把0,1之间的数放入数组不就可以了吗?
 
zhengmw,你好
首先,谢谢回复!
我的问题是:数组中的值是已经给定的!
请问是否有办法限定结果的值在一定范围中?
另外,是否有别的程序可以完成此功能?
再次表示感谢!
 
点都已经给定了,那怎么可能把a的范围确定在某个范围呢?除非只给定一个点
 
多人接受答案了。
 

Similar threads

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