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,可以运行,但不知是什么原因求不出结果,望高手来解答!

解决方案 »

  1.   

    一个字 乱
    你断点跑一下 看哪里的问题
      

  2.   

    到底要完成一个什么题目?对题目的兴趣更浓
      

  3.   

    你要算什么,何不把公式贴出来?或者举个带数据的例子说明
      

  4.   

    这))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))))至少公式要贴出来,看你的代码就能看出公式?