procedure TForm5.Button1Click(Sender: TObject);
var
Q2,s:array[1..510]of double;
a:integer;
h,W,x,Q1,Q,b1,b2,m1,m2,n,n1,n2,i,h1:double;
begin
b1:=strtofloat(Edit1.text);
Q:=strtofloat(Edit5.text);
m1:=strtofloat(Edit2.text);
n1:=strtofloat(Edit4.text);
i:=strtofloat(Edit3.text);
b2:=strtofloat(Edit7.text);
m2:=strtofloat(Edit9.text);
h1:=strtofloat(Edit11.text);
n2:=strtofloat(Edit12.text);
h:=0;
begin
for a:=1 to 22 do
s[a]:=h+5*(a-1);
W:=(b1+m1*h1)*h1+(b1+2*m1*h1+2*b2+m2*(s[a]-h1)*(s[a]-h1));
x:=b1+2*h1*power(1+sqr(m1),1/2)+2*b2+2*(s[a]-h1)*power(1+sqr(m2),1/2);
if max(n1,n2)/min(n1,n2)>1.5 then
begin
n:=power(((2*power(sqr(h1)+sqr(m1*h1),1/2)+b1)*power(n1,2/3)+(2*b2+2*(s[a]-h1)*sqrt(1+sqr(m2)))*power(n2,2/3))/x,2/3);
Q2[a]:=power(W,5/3)*sqrt(i)/n/power(x,2/3);
end
else
begin
n:=(n1*(2*power(sqr(h1)+sqr(m1*h1),1/2)+b1)+n2*(2*b2+2*(s[a]-h1)*sqrt(1+sqr(m2))))/x;
Q2[a]:=power(W,5/3)*sqrt(i)/n/power(x,2/3);
end;
if abs((Q2[a])-Q)>abs(Q2[a-1]-Q)then
begin
h:=s[a-1];
Q1:=Q2[a-1];
end;
if Q-Q1>0 then
begin
for a:=1 to 501 do
s[a]:=h+0.00001*(a-1);
W:=(b1+m1*h1)*h1+(b1+2*m1*h1+2*b2+m2*(s[a]-h1)*(s[a]-h1));
x:=b1+2*h1*power(1+sqr(m1),1/2)+2*b2+2*(s[a]-h1)*power(1+sqr(m2),1/2);
if max(n1,n2)/min(n1,n2)>1.5 then
begin
n:=power(((2*power(sqr(h1)+sqr(m1*h1),1/2)+b1)*power(n1,2/3)+(2*b2+2*(s[a]-h1)*sqrt(1+sqr(m2)))*power(n2,2/3))/x,2/3);
Q2[a]:=power(W,5/3)*sqrt(i)/n/power(x,2/3);
end
else
begin
n:=(n1*(2*power(sqr(h1)+sqr(m1*h1),1/2)+b1)+n2*(2*b2+2*(s[a]-h1)*sqrt(1+sqr(m2))))/x;
Q2[a]:=power(W,5/3)*sqrt(i)/n/power(x,2/3);
end;
if abs((Q2[a])-Q)>abs(Q2[a-1]-Q)then
begin
h:=s[a-1];
Q1:=Q2[a-1];
end;
if Q-Q1<0 then
for a:=1 to 501 do
s[a]:=h-0.00001*(a-1);
W:=(b1+m1*h1)*h1+(b1+2*m1*h1+2*b2+m2*(s[a]-h1)*(s[a]-h1));
x:=b1+2*h1*power(1+sqr(m1),1/2)+2*b2+2*(s[a]-h1)*power(1+sqr(m2),1/2);
if max(n1,n2)/min(n1,n2)>1.5 then
begin
n:=power(((2*power(sqr(h1)+sqr(m1*h1),1/2)+b1)*power(n1,2/3)+(2*b2+2*(s[a]-h1)*sqrt(1+sqr(m2)))*power(n2,2/3))/x,2/3);
Q2[a]:=power(W,5/3)*sqrt(i)/n/power(x,2/3);
end
else
begin
n:=(n1*(2*power(sqr(h1)+sqr(m1*h1),1/2)+b1)+n2*(2*b2+2*(s[a]-h1)*sqrt(1+sqr(m2))))/x;
Q2[a]:=power(W,5/3)*sqrt(i)/n/power(x,2/3);
end;
if abs((Q2[a])-Q)>abs(Q2[a-1]-Q)then
begin
h:=s[a-1];
Q1:=Q2[a-1];
end;
if Q-Q1=0 then
begin
Edit6.text:=FormatFloat('###0.0000',h);
end;
end;
end;
end;
end.
我的思路是逐步逼近求解未知量h,可以运行,但不知是什么原因求不出结果,望高手来解答!
var
Q2,s:array[1..510]of double;
a:integer;
h,W,x,Q1,Q,b1,b2,m1,m2,n,n1,n2,i,h1:double;
begin
b1:=strtofloat(Edit1.text);
Q:=strtofloat(Edit5.text);
m1:=strtofloat(Edit2.text);
n1:=strtofloat(Edit4.text);
i:=strtofloat(Edit3.text);
b2:=strtofloat(Edit7.text);
m2:=strtofloat(Edit9.text);
h1:=strtofloat(Edit11.text);
n2:=strtofloat(Edit12.text);
h:=0;
begin
for a:=1 to 22 do
s[a]:=h+5*(a-1);
W:=(b1+m1*h1)*h1+(b1+2*m1*h1+2*b2+m2*(s[a]-h1)*(s[a]-h1));
x:=b1+2*h1*power(1+sqr(m1),1/2)+2*b2+2*(s[a]-h1)*power(1+sqr(m2),1/2);
if max(n1,n2)/min(n1,n2)>1.5 then
begin
n:=power(((2*power(sqr(h1)+sqr(m1*h1),1/2)+b1)*power(n1,2/3)+(2*b2+2*(s[a]-h1)*sqrt(1+sqr(m2)))*power(n2,2/3))/x,2/3);
Q2[a]:=power(W,5/3)*sqrt(i)/n/power(x,2/3);
end
else
begin
n:=(n1*(2*power(sqr(h1)+sqr(m1*h1),1/2)+b1)+n2*(2*b2+2*(s[a]-h1)*sqrt(1+sqr(m2))))/x;
Q2[a]:=power(W,5/3)*sqrt(i)/n/power(x,2/3);
end;
if abs((Q2[a])-Q)>abs(Q2[a-1]-Q)then
begin
h:=s[a-1];
Q1:=Q2[a-1];
end;
if Q-Q1>0 then
begin
for a:=1 to 501 do
s[a]:=h+0.00001*(a-1);
W:=(b1+m1*h1)*h1+(b1+2*m1*h1+2*b2+m2*(s[a]-h1)*(s[a]-h1));
x:=b1+2*h1*power(1+sqr(m1),1/2)+2*b2+2*(s[a]-h1)*power(1+sqr(m2),1/2);
if max(n1,n2)/min(n1,n2)>1.5 then
begin
n:=power(((2*power(sqr(h1)+sqr(m1*h1),1/2)+b1)*power(n1,2/3)+(2*b2+2*(s[a]-h1)*sqrt(1+sqr(m2)))*power(n2,2/3))/x,2/3);
Q2[a]:=power(W,5/3)*sqrt(i)/n/power(x,2/3);
end
else
begin
n:=(n1*(2*power(sqr(h1)+sqr(m1*h1),1/2)+b1)+n2*(2*b2+2*(s[a]-h1)*sqrt(1+sqr(m2))))/x;
Q2[a]:=power(W,5/3)*sqrt(i)/n/power(x,2/3);
end;
if abs((Q2[a])-Q)>abs(Q2[a-1]-Q)then
begin
h:=s[a-1];
Q1:=Q2[a-1];
end;
if Q-Q1<0 then
for a:=1 to 501 do
s[a]:=h-0.00001*(a-1);
W:=(b1+m1*h1)*h1+(b1+2*m1*h1+2*b2+m2*(s[a]-h1)*(s[a]-h1));
x:=b1+2*h1*power(1+sqr(m1),1/2)+2*b2+2*(s[a]-h1)*power(1+sqr(m2),1/2);
if max(n1,n2)/min(n1,n2)>1.5 then
begin
n:=power(((2*power(sqr(h1)+sqr(m1*h1),1/2)+b1)*power(n1,2/3)+(2*b2+2*(s[a]-h1)*sqrt(1+sqr(m2)))*power(n2,2/3))/x,2/3);
Q2[a]:=power(W,5/3)*sqrt(i)/n/power(x,2/3);
end
else
begin
n:=(n1*(2*power(sqr(h1)+sqr(m1*h1),1/2)+b1)+n2*(2*b2+2*(s[a]-h1)*sqrt(1+sqr(m2))))/x;
Q2[a]:=power(W,5/3)*sqrt(i)/n/power(x,2/3);
end;
if abs((Q2[a])-Q)>abs(Q2[a-1]-Q)then
begin
h:=s[a-1];
Q1:=Q2[a-1];
end;
if Q-Q1=0 then
begin
Edit6.text:=FormatFloat('###0.0000',h);
end;
end;
end;
end;
end.
我的思路是逐步逼近求解未知量h,可以运行,但不知是什么原因求不出结果,望高手来解答!
你断点跑一下 看哪里的问题