0
Дек 16
Всем привет. Мне нужен ваш совет. Извините, если расположил тему не в том разделе. В связи с проблемой вставки текста, прикладываю в виде изображения. Не смогли подсказать с литературой или возможно есть какие наработки. Приведена следующая система разработки. Хотелось бы конечно реализовать программно, но вначале с теорией надо разобраться.
Опубликовано
17 Дек 2016
Активность
3
ответа
2691
просмотр
2
участника
1
Рейтинг
Что можете по методу суперпозиции скинуть?)
не надо суперпозиции, достаточно обычной.
Так ли?
procedure TForm1.Button2Click(Sender: TObject); var i,N,k,j,p,l,d,w,it,maxit,b,f:integer; Rc,Pn,Pd,Pk,Rk,h,pron,mu,norma,eps,s,v,c,Xmin,Xmax,Ymax,Ymin,sum:real; x,y,NagX,NagY,DobX,DobY,dob,nag,Q,Press,Q0,Yp,Xp:array [0..27] of real; z:array [0..27] of string; begin eps:=1e-6; maxit:=100; pron:=1; mu:=1; h:=0.001; Rk:=10; Pk:=250; Pn:=450; Pd:=50; Rc:=0.00011; N:=strtoint(Edit1.Text); for i:= 0 to N-1 do begin x[i]:=strtofloat(StringGrid1.Cells[1,i]); y[i]:=strtofloat(StringGrid1.Cells[2,i]); z[i]:=(StringGrid1.Cells[3,i]); Press[i]:=strtofloat(StringGrid1.Cells[4,i]); end; d:=0; while d<N do begin for i:=0 to N-1 do begin if d = i then begin Delta[d,i]:=Rc; end else begin Delta[d,i]:=sqrt(sqr(x[d]-x[i])+sqr(y[d]-y[i])); end; end; d:=d+1; end; for j:= 0 to N-1 do Delta[N,j]:=sqrt(sqr(Rk-x[j])+sqr(Rk-y[j])); for i:=0 to N do for j:=0 to N-1 do begin Delta[i,j]:=Delta[i,j]*mu/(2*pi*pron*h); end; for i:= 0 to N-1 do Q[i]:=0; it:=0; repeat for i:= 0 to N-1 do begin s:=0; for j:= 0 to N-1 do if j<>i then s:=s+Delta[i,j]*Q[j]; v:=Q[i]; Q[i]:=(Press[i]-s)/(Delta[i,i]); end; norma:=0; for i:= 0 to N do norma:=abs(Q[i]-v); it:=it+1; until (norma<eps) or (it>maxit); end; procedure TForm1.Button4Click(Sender: TObject); var Xmax,Xmin,Ymin,Ymax,dH,sum,pron,mu,h,DeltaP:real; x,y,z,Q:array [0..29] of real; P,Xp,Yp:array [0..50,0..50] of real; i,N,b,f:integer; begin N:=strtoint(Edit1.Text); dH:=0.01; pron:=1; mu:=1; h:=0.001; for i:= 0 to N-1 do begin x[i]:=strtofloat(StringGrid1.Cells[1,i]); y[i]:=strtofloat(StringGrid1.Cells[2,i]); Q[i]:=strtofloat(StringGrid2.Cells[0,i+1]); end; Xmin:=x[0]; Xmax:=x[0]; for i:= 0 to N-1 do begin if Xmin>x[i] then Xmin:=x[i]; if Xmax<x[i] then Xmax:=x[i] end; Ymin:=y[0]; Ymax:=y[0]; for i:=0 to N-1 do begin if Ymin > y[i] then Ymin:=y[i]; if Ymax < y[i] then Ymax:=y[i] end; b:=0; f:=0; Yp[0,b]:=Ymin; Xp[f,0]:=Xmin; while Yp[f,b] < Ymax do begin if Xp[f,b] < Xmax then begin for i:=0 to N-1 do begin DeltaP:=sqrt(sqr(Xp[f,b]-x[i])+sqr(Yp[f,b]-y[i])); sum:=sum+DeltaP*mu*Q[i]/(2*pi*pron*h*100000); end; P[f,b]:=sum; stringgrid3.Cells[b,f]:=floattostr(P[f,b]); sum:=0; b:=b+1; Xp[f,b]:=Xp[f,b-1]+dH; end else begin b:=0; Xp[f,0]:=Xmin; sum:=0; f:=f+1; Yp[f,b]:=Yp[f-1,b]+dH; end; end; end; end.