1 / 28

Interpolēšanas metožu izmantošana Delphi un Matlab vidē.

Interpolēšanas metožu izmantošana Delphi un Matlab vidē. . Praks ē nereti rodas nepieciešam ī ba noskaidrot sakar ī bas daž ā dos procesos un par ā d ī b ā s un izteikt š ī s sakar ī bas matem ā tiskas izteiksmes veid ā .

brilliant
Download Presentation

Interpolēšanas metožu izmantošana Delphi un Matlab vidē.

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Interpolēšanas metožu izmantošana Delphi un Matlabvidē.

  2. Praksēneretirodasnepieciešamībanoskaidrotsakarības dažādos procesos un parādībāsun izteiktšīs sakarības matemātiskasizteiksmesveidā. Ir zināmi trīs funkcijuuzdošanasveidi: analītiskais, grafiskais un tabulārais. Interpolācijavisbiežāk jāizmantotad, jafunkcijairuzdotatabulasveidā.

  3. Funkciju interpolācija

  4. Lineārā interpolācija - Taisnes vienādojums Funkcijas vērtības kaimiņ mezglu punktos

  5. Atrodam a un b vērtības: Nosacījums xi < Xt < xi+1

  6. Piemērs. xt := strtofloat(edit1.text); For i := 1 to n-1 do begin if (xt < x[i+1]) and (xt > x[i]) then begin a:= (y[i+1] – y[i])/(x[i+1] – x[i]); b:= y[i] – x[i] * a; yt:= a*xt + b; end end;

  7. Kvadrātiskā interpolācija a*x2 + b*x + c = 0; Parabolas vienādojums y[i-1] = x[i-1]*x[i-1]*a + x[i-1]*b + c y[i] = x[i]*x[i]*a + x[i]*b + c y[i+1] = x[i+1]*x[i+1]*a + x[i+1]*b + c

  8. No vienādojumu sistēmas atrodam a, b un c vērtības: a = ∆a /∆; b = ∆b /∆; c = ∆c /∆; kur ∆, ∆a, ∆b, ∆c– trešās kārtas determinanti. xi-1 <= x <= xi+1

  9. Splain-interpolācija m kārtības splain dēvējas funkcija, kura ir m pakāpes polinoms uz katras atstarpes starp mezglu punktiem un visos iekšējos mezglos apmierina funkcijas un atvasinājumu kontinuitātes nosacījumiem.

  10. Vislielāko izplatīšanu saņēma kuba splains y=ax3+bx2+cx+d. Atradīsim atkarības viņa a, b, c, d koeficentu aprēķināšanai pa funkcijas un tās pirmo atvasinājumu vērtībām kaimiņ mezglu punktos.

  11. Izkravāšanu vienkāršojumam pieņemsim, ka atstarpes kreisa leņķiska punkta xi,xi+1argumenta vērtība, kurai meklējam splain-funkciju, vienāds nullei. To vienmēr var izdarīt pārveidi x=xi+z, kur z jauns arguments.

  12. y=az3+bz2+cz+d xi+1 z2 = xi+1 - xi z = x - xi xi z1 = 0

  13. Tad uzdevums ir noformulējams sekojoši: atrast nezināmus a, b, c, d splaina koeficentus, apmierinoši mezglu punktos nosacījumam z1=0; y(z1)=f1;y'(z1)=f1'; y(z2)=f2; y' (z2)=f2'. Šeit f1,f2,f1',f2'- attiecīgi interpolēšanasfunkcijas un tās atvasinājuma vērtības mezglu punktos z1, z2.

  14. Lai atrastu a,b,c,d saliksim vienādojumu sistēmu, izmantojot nosacījumus mezglu punktos f1 = d; f1′ = c; f2 = az23+ bz22+ cz2+d; f2′ = 3az22+ 2bz +c; tātad d = f1; c = f1′

  15. Paliekot atrastās d, c vērtības divos pēdējos vienādojumos un atļaujot tos relatīvi a, b saņemsim a = (z2(f2′ - f1′ ) – 2(f2 - f1′ * z2– f1))/z23 b = (3(f2- f1′ * z2– f1) – z2(f2′ - f1′ ))/z22

  16. Paliekot atrastos koeficentus kuba splainuun uzdodot argumenta vērtību, aprēķināsim funkcijas vērtību starp mezglu punktiem. y = az3 + bz2+ cz+ d

  17. Bieži pie interpolācijas ir esamas tikai funkcijas vērtības mezglu punktos un nav atvasinājumu vērtību. Tad pirmie atvasinājumi iekšējos mezglu punktos aprēķina pa formulām fi′ = (fi+1 – fi-1)/(xi+1 – xi-1), fi′ = (fi+1 – fi-1)/(2h), i = 2, .. N-1 h- attālums starp mezglu punktiem. N – mezglu punktu skaits

  18. Atvasinājuma vērtību pirmajā un pēdējā mezglu punktos aprēķina pa formulām: f1′ = f2′ - f2″h; fn′ = fn-1′ – fn-1″h; f2″ = (f1 + f3 – 2f2)/h2; fn-1″ = (fn-2 + fn – 2fn-1)/h2; f2″ , fn-1″ - otro atvasinājumu pietuvinātās vērtības otrajā un n - 1 punktos.

  19. Programmas fragmenti Delphi vidē Funkcijas kubisks splains

  20. functionk_spl(xx:Real):Real; var d:Real; // koeficient d {pirmā atvasinājuma aprēķins mezgla punktos (i>= 2) and (i <= n-1)} function fi_1(i:Byte):Real; begin fi_1 := (y[i+1] - y[i-1])/(x[i+1]-x[i-1]); end; {otrā atvasinājuma aprēķins punktā i = 2} function f22:single; begin f22 := (y[1] + y[3] - 2*y[2])/sqr(x[2]-x[1]); end; {pirmā atvasinājuma aprēķins punktā i = 1} function f12:single; begin f12 := fi_1(2) - f22*(x[2]-x[1]); end;

  21. {otrā atvasinājuma aprēķins punktā i = n-1} function fn2:single; begin fn2 := (y[n-2] + y[n] - 2*y[n-1])/sqr(x[n]-x[n-1]); end; {pirmā atvasinājuma aprēķins punktā i = n} function f1n:single; begin f1n := fi_1(n-1) - fn2*(x[n]-x[n-1]); end; {koeficienta c aprēķināšana} functionc(i:byte):single; begin if (i>= 2) and (i < n-1) then c := fi_1(i); if i = 1 then c := f12; if i = n-1 then c := f1n; end;

  22. {koeficienta a aprēķinšāna} functiona(i:Byte):Real; begin if (i>= 2) and (i < n-1) then begin a := ((x[i+1]-x[i])*(fi_1(i+1)-fi_1(i)) - 2*(y[i+1] - fi_1(i)*(x[i+1]-x[i]) - y[i]))/power(x[i+1]-x[i],3); end; if i= 1 then begin a := ((x[i+1]-x[i])*(fi_1(i+1)-fi_1(i)) - 2*(y[i+1] - f12*(x[i+1]-x[i]) - y[i]))/power(x[i+1]-x[i],3); end; if i= n-1 then begin a := ((x[i+1]-x[i])*(f1n-fi_1(i)) - 2*(y[i+1] - fi_1(i)*(x[i+1]-x[i]) - y[i]))/power(x[i+1]-x[i],3); end; end;

  23. {koeficienta b aprēķināšana} functionb(i:Byte):Real; begin if (i>= 2) and (i < n-1) then begin b := (3*(y[i+1] - fi_1(i)*(x[i+1]-x[i]) - y[i])-(x[i+1]-x[i])* (fi_1(i+1)-fi_1(i)))/sqr(x[i+1]-x[i]); end; if i = 1 then begin b := (3*(y[i+1] - f12*(x[i+1]-x[i]) - y[i])- (x[i+1]-x[i])*(fi_1(i+1)- fi_1(i)))/sqr(x[i+1]-x[i]); end; if i= n-1 then begin b := (3*(y[i+1] - fi_1(i)*(x[i+1]-x[i]) - y[i])- (x[i+1]-x[i])*(f1n-fi_1(i)))/sqr(x[i+1]-x[i]); end; end;

  24. {Funkcijas ķermenis} begin for j := 1 to n-1 do if(xx > x[j]) and (xx < x[j+1]) then it := j; {it – kreisa mezgla numurs x[it] - kreisa mezgla koordināta xx – argumenta vērtība} d := y[it]; k_spl := a(it)*power(xx-x[it],3) + b(it)*sqr(xx-x[it])+ c(it)*(xx-x[it]) + d; end;

  25. {Funkcijas y(xt) vērtības aprēķināšana} procedureTForm1.Button1Click(Sender: TObject); begin xt := strtofloat(edit1.Text); { lasīt vektorus x un y no stringgrid komponenta} for i := 1 to n do begin x[i] := strtofloat(stringgrid1.Cells[i-1,0]); y[i] := strtofloat(stringgrid1.Cells[i-1,1]); end; yt := k_spl(xt) ; {vērtības y(xt) izvade} edit2.Text := floattostrf(yt,fffixed,10,3); end;

  26. {Grafika konstruēšana} procedureTForm1.Button2Click(Sender: TObject); begin Series1.Clear; Series2.Clear; fori := 1 to n do begin x[i] := strtofloat(stringgrid1.Cells[i-1,0]); y[i] := strtofloat(stringgrid1.Cells[i-1,1]); Series1.AddXY(x[i],y[i]); end; xg := x[1]; yg := y[1]; Series2.AddXY(xg,yg); repeat xg := xg + 0.05; yg := k_spl(xg) ; Series2.AddXY(xg,yf); untilxg >= x[n]; end;

  27. {Lasīt vektorus x un y no faila, izmantojot OpenDialog komponentu} procedureTForm1.Open1Click(Sender: TObject); begin if OpenDialog1.Execute then begin AssignFile(ff,OpenDialog1.FileName); Reset(ff); i:=0; whilenotEof(ff) do begin i := i+1; readln(ff,x[i],y[i]); end; end; CloseFile(ff); end;

  28. {Fails dati.txtNotepadā} -5.0 9.13 -4.2 1.26 -3.4 -0.7 -2.6 1.03 -1.8 -2.05 -1.0 -7.23 -0.2 -6.15 0.6 -2.02 1.4 -3.02 2.2 -5.43

More Related