QBASICBOOK.ru: сайт про QB64

Опубликовано: 2018-07-30 08:00:00

Интерполяция

Интерполяция, интерполирование – в вычислительной математике способ нахождения промежуточных значений величины по имеющемуся дискретному набору известных значений.

Многим из тех, кто сталкивается с научными и инженерными расчётами, часто приходится оперировать наборами значений, полученных опытным путём или методом случайной выборки. Как правило, на основании этих наборов требуется построить функцию, на которую могли бы с высокой точностью попадать другие получаемые значения. Такая задача называется аппроксимацией. Интерполяцией называют такую разновидность аппроксимации, при которой кривая построенной функции проходит точно через имеющиеся точки данных.

В качестве стартового примера простенькая программа изображающая график функции, полученный вследствие произведённой интерполяции Лагранжа.


  1. DECLARE FUNCTION LAGRANGE# (X#(), Y#(), N%, ARGX#)
  2.  
  3. DIM XXX#(64), YYY#(64)
  4. TOCH% = 6: STP% = 90
  5. RANDOMIZE TIMER: SCREEN 12
  6. OUT &H3C8, 1: OUT &H3C9, 0: OUT &H3C9, 5: OUT &H3C9, 24
  7. SNOVA: LINE (0, 0)-(639, 479), 1, BF
  8. LINE (5, 5)-(634, 474), 15, B
  9. COLOR 14: LOCATE 2, 31: PRINT "LAGRANGE POLYNOMIAL"
  10. LOCATE 3, 34: PRINT "INTERPOLATION"
  11. LOCATE 25, 29: COLOR 12: PRINT "DRAWING... PLEASE WAIT!"
  12. FOR P% = 1 TO TOCH%
  13.     XXX#(P%) = P% * STP%: YYY#(P%) = (RND * 100) - 50
  14. NEXT
  15. FOR RIS% = STP% TO TOCH% * STP%
  16.     FUNCZ# = LAGRANGE#(XXX#(), YYY#(), TOCH%, CDBL(RIS%))
  17.     PSET (RIS%, 240 - FUNCZ#), 15
  18.     IF RIS% MOD STP% = 0 THEN
  19.         CIRCLE (RIS%, 240 - YYY#(RIS% \ STP%)), 3, 12
  20.         PAINT (RIS%, 240 - YYY#(RIS% \ STP%)), 14, 12
  21.     END IF
  22. NEXT
  23. LOCATE 25, 26: COLOR 10: PRINT "ENTER - ANOTHER     ESC - EXIT"
  24. DO
  25.     K$ = INKEY$
  26.     IF K$ = CHR$(13) GOTO SNOVA
  27. LOOP WHILE (K$ <> CHR$(27))
  28.  
  29. FUNCTION LAGRANGE# (X() AS DOUBLE, Y() AS DOUBLE, N AS INTEGER, ARGX AS DOUBLE)
  30. DIM C AS DOUBLE, S AS DOUBLE
  31. S = 0
  32. FOR I = 0 TO N
  33.     C = 1
  34.     FOR J = 0 TO N
  35.         IF (I <> J) THEN C = C * (ARGX - X(J)) / (X(I) - X(J))
  36.     NEXT
  37.     S = S + C * Y(I)
  38. NEXT
  39. LAGRANGE = S
  40. END FUNCTION

Рисунок 1 – Исходный текст интерполяции

Рисунок 1 – Исходный текст интерполяции

Рисунок 2 – Результат построения интерполяции

Рисунок 2 – Результат построения интерполяции

Спасибо за прочтение этой статьи.

 

Прикрепленные файлы:

< Предыдущая статья
Рисование мышкой
Следующая статья >
Построение фрактала Джоса Лейса

Выделите опечатку и нажмите Ctrl + Enter, чтобы отправить сообщение об ошибке.