能帖一个解方程组的程序嘛???(100分)

Z

zrj

Unregistered / Unconfirmed
GUEST, unregistred user!
类似这种方程组:
2X+3y+4z=5;
3x+4Y+5Z=6;
4X+5y+6z=7;
6x+2y+4z=8;
我觉得例子可能不合适,类似这种方程的,看书上是用
(2x+3y+4z-5)平方,其它类似,然后对X,y,z求偏导得出来得出三个方程求解得,
不过计算机如何 实现??就是最小二乘法拟和数据得算法
 
算得我累死了,有可能会算错,不过大概是这样的,要给我分哦:)
function JieFang(a1,a2,a3,b1,b2,b3,c1,c2,c3,n1,n2,n3:Real):string;
var
x,y,z:Real;
begin
Result:='';
x:= ((n1*c2-n2*c1)*(b1*c3-b3*c1)-(n1*c3-n3*c1)*(b1*c3-b2*c1))/((a1*c2-a2*c1)*(b1*c3-b3*c1)-(a1*c3-a3*c1)*(b1*c2-b2*c1));
y:= ((n1*a2-n2*a1)*(a3*b1-a1*b3)-(n1*a3-n3*a1)*(a2*b1-a1*b2))/((a2*c1-a1*c2)*(a3*b1-a1*b3)-(a2*b1-a1*b2)*(a3*c1-a1*c3));
z:= ((n1*a2-n2*a1)*(a3*c1-a1*c3)-(n1*a3-n3*a1)*(a2*c1-a1*c2))/((a2*b1-a1*b2)*(a3*c1-a1*c3)-(a3*b1-a1*b3)*(a2*c1-a1*c3));
Result:='x='+FloatToStr(x)+'y='+FloatToStr(y)+'z='+FloatToStr(z);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
button1.caption := JieFang(2,3,4,3,4,5,4,5,6,5,6,7);
end;
 
用高斯消元法不是更通用,每个都这样解,确实要累死人的.
 
To all;
那是个超定方程啊,不是常规方程,三个未知数可是4个方程啊,也可能是5个或者6个方程
都有可能啊,所以这么解还是不合适得呀
看书上解法:令 Q = 2X+3y+4z-5 然后Q平方对X求偏导得到一个方程 +
令 Q = 3x+4Y+5Z-6然后Q平方对X求偏导得到一个方程+
有n个方程就加n次,=0,
然后就是对y,对Z求偏导,这样就把超定方程转化为普通方程了,那样方法就多了
TO:quejian:
这么辛苦写出来,分数一定给你得,呵呵
 
接受答案了.
 
to:quejian
不好意思操作失误,分都给了LeeChange了,你来
http://www.delphibbs.com/delphibbs/dispq.asp?lid=654773
拿分吧
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
600
import
I
I
回复
0
查看
617
import
I
顶部