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):
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;