Mar. 26., 2006 | 10:11 am
No:: petro

principā kad pilnā pārlase ir pārāk apjomīgs darbs pat X GHz procim. Var mēģināt lietot tuvināšanas metodi(iteration). Pats kādreiz vienā programmprojektā esmu izmantojis
Piemērs (ja vari atšifrēt):

procedure GetData(Dp :Integer);
{ Dp - Segas pilns biezums [cm] }

const X :array [1..7] of integer = (0, 30, 60, 90, 120, 150, 180);
      a = 15;
var F   :real; {Force}
    D   :array [1..7] of real;
    K, Ae, r, DeltaR, m, n, dr, Mr, Ep, p :real; {Koeficients, ...}
    AA, BB, CC, D0apr :real;
    kor : real;
    idx : integer;
begin
  K  := 0;
  kor := 128;
  F    := DM.qryFWDimp['F'];
  D[1] := DM.qryFWDimp['D1']/10000;
  D[2] := DM.qryFWDimp['D2']/10000;
  D[3] := DM.qryFWDimp['D3']/10000;
  D[4] := DM.qryFWDimp['D4']/10000;
  D[5] := DM.qryFWDimp['D5']/10000;
  D[6] := DM.qryFWDimp['D6']/10000;
  D[7] := DM.qryFWDimp['D7']/10000;
  repeat
    K := K + Kor;
    Ae := Sqrt( Sqr(a) + Sqr(Dp) * Power(K, 2/3) );
    r  := Ae*0.7;
    DeltaR := r - X[6];
    m := D[6];
    n := D[7];
    for idx := 1 to 5 do
      if  ( X[idx] <= r ) and ( r < x[idx+1] )
      then begin
        DeltaR := r - X[idx];
        m := D[idx];
        n := D[idx+1];
      end;
    dr := m - (m-n)*DeltaR/30;
    Mr := ( 2.4 * F ) / (r * dr);
    Ep := K*Mr;
    p  := (F*10)/(Sqr(a)*Pi);
    AA := 1.5 * a * p;
    BB := Sqrt(1+ Sqr((Dp/a)* Power(Ep/Mr, 1/3)) );
    CC := 1 / Sqrt(1 + Sqr(Dp/a));
    D0apr := AA* (  (1/ (Mr*BB) ) + (1-CC)/Ep );
    kor := Abs(kor/2);
    if D0apr < D[1]
    then kor := -kor;
  until Abs( D[1] - D0apr ) < 0.000005;

  SDNew.S    := DM.qryFWDimp['S'];
  SDNew.Dp   := Dp;
  SDNew.SNef := 0.0093*Dp*Power(Ep, 1/3);
  SDNew.Egr  := Mr/3.3;
end;

# | view all comments


Reply

No:
( )Anonīms- ehh.. šitajam cibiņam netīk anonīmie, nesanāks.
Lietotājvārds:
Parole:
Temats:
Tematā HTML ir aizliegts
  
Ziņa: