ТОЧНОСТ НА МАТЕМАТИЧЕСКИ ИЗЧИСЛЕНИЯ В КЛАСИЧЕСКИТЕ ЕЗИЦИ ЗА ПРОГРАМИРАНЕ - Международен журнал

Грешката в резултатите при използване на математически изчисления може да се разглежда като следствие от грешка в данните, закръгляване или съкращаване. По същия начин грешките в изчисленията с помощта на библиотечни процедури могат да бъдат резултат от тези грешки. Проблемът за анализиране на грешката на числените резултати е един от основните в проблема за изчислителната надеждност [3].

За получаване на предвидими и точни резултати са важни следните фактори: неточност на вътрешното представяне, неравномерно разпределение на реалните числа, изваждане. По време на операциите за добавяне и изваждане могат да възникнат такива грешки като: загуба на значими цифри на мантисата на по-малкото от числата при подравняване на поръчки, загуба на най-дясната значима цифра на резултата при добавяне или изваждане на мантиси, излизане извън допустимия диапазон на стойността на един или друг реален тип при нормализиране на резултата, големи и малки числа.

За да се получи резултатът от косвено измерване, се извършват математически операции, след което резултатът се закръгля. Очевидно не е необходимо да извършвате математически операции с резултатите от директни измервания, както при точните числа, но трябва да ги ограничите, като получите определен брой цифри в резултата. Това улеснява работата, но при такива изчисления са възможни допълнителни грешки. За да изчислителните грешки не внасят изкривявания в крайния резултат, е необходимо да ги вземете с порядък по-малък от грешките на косвените измервания. Следователно всички изчисления трябва да се извършват с брой значими цифри, който е поне с една повече от броя на значимите цифри на резултатите от измерването.

Тъй като компютърният хардуер позволява използването само на ограничено подмножество от числа, е разумно да се следват редица правила [1], присъщи на аритметичните операции. Тези правила са повечеса по-важни от изискването да се гарантира, че полученият резултат е възможно най-близо до точния резултат от дадена операция. Голям брой итеративни алгоритми не изискват твърде висока точност на операциите, но се оказват неприложими, ако описаните по-горе правила са нарушени.

В момента има два начина за извършване на изчисления с по-голяма точност. Първият начин - точните стойности се заменят с приблизителни и се извършва оценка на грешката на първоначалните данни и закръгляването. Този метод има редица съществени недостатъци. Вторият начин е интервален анализ.

Интервалното изчисление е доста развита област. Численият алгоритъм е написан на езици за програмиране, специално проектирани да отговарят на изискванията на интервалната аритметика. Такива езици се наричат ​​​​SC-езици - от английската фраза "Scientific Computations", тоест "Scientific Computing". За 70-90-те години. беше разработено цяло семейство от такива езици: PASCAL-SC и -XSC, FORTRAN-SC и -XSC, OBERON-XSC, MODULA-SC [4]. С помощта на SC-езици са разработени различни пакети от числени методи и програми, написани на тези езици, се използват за решаване на научни и технически проблеми.

Освен това има няколко експертни системи за математически изчисления с помощта на компютър. Едно от тях е приложението Mathcad на PTC за математически и инженерни изчисления. Когато извършва числени изчисления (за разлика от символните изчисления), Mathcad използва хардуерно базираните аритметични инструменти на самия компютър, работещи с 64-битови числа с плаваща запетая. От тук произтичат всички особености и недостатъци на числените изчисления, които на пръв поглед може да изглеждат следствие от несъвършенството на самата програма [2].

Анализ на точността на изчисленията върху примери от изчислителната математика

Този раздел разглежда няколко примера за математически изчисления, които илюстрират качеството на резултатите от изчисленията в класически системи за програмиране ("Turbo Pascal", "Free Pascal" и "Fortran G95"). Нека анализираме точността на извършените изчисления, като ги сравним с експертната система MathCAD.

Изчисления с помощта на системата MathCAD

Векторите и матриците се разглеждат в системата Mathcad като едномерни и двумерни масиви от данни.

Пример 1: A е матрица 2x3, B е матрица 3x3.

Пример 2: C е матрица 3x4, D е матрица 4x2.

Пример 3: E е матрица 7x5, F е матрица 5x6.

математически

Пример 4: Нека са дадени 5*5 матрица T и 5*5 матрица Q. Нека елементите на матриците са дробни числа с точност до 6 знака след десетичната запетая. Изборът на шест значещи цифри след десетичната запетая е оправдан от достатъчна точност за повечето реално получени експериментални данни.

Резултатът от умножението на матрицата обаче се представя като таблица с числа с 12 изходни цифри.

Изчисления с помощта на програмни системи Pascal и Fortran

За да се сравни намаляването на точността на изчисленията с голям брой аритметични операции, бяха написани програми, които изпълняват матрично умножение.

При въвеждане на матрични елементи от горните примери 1-3, получените матрици съвпадат с матриците, получени в системата MathCad.

Сравнявайки резултатите от изчислението на пример 4 с резултата, получен чрез умножаване на тези матрици в програмата MathCAD, можем да направим следните заключения:

1) При умножаване на матриците T и Q с помощта на компилатора Turbo Pascal в случай, че елементите на матриците са дробни числаединичен тип, в получената матрица точността на елементите е 4 знака след десетичната запетая;

2) Резултатът от умножаването на матриците T и Q с помощта на компилатора Turbo Pascal (елементите на матрицата са дробни числа от реален тип. Изходът е извършен с точност до 11 знака след десетичната запетая):

Вижда се, че осмият знак след точката вече е заоблен. За матрици с размери по-малки от 2*3 и 3*3, получената изходна матрица има 9 знака след десетичната запетая. Въпреки това, за матрици със същите размери, но с елементи с голям брой десетични знаци, елементите на получената матрица се закръглят до деветия знак след десетичната запетая;

3) При умножаване на матриците T и Q с помощта на компилатора Turbo Pascal, в случай че елементите на матриците са дробни числа от двоен тип, в получената матрица точността на получените елементи е 8 знака след десетичната запетая.

4) Резултатът от умножаването на матриците T и Q с помощта на компилатора Turbo Pascal (елементите на матрицата са дробни числа от разширен тип. Изходът се извършва с точност до 11 знака след десетичната запетая):

Единадесетият знак е закръглен!

5) Резултатът от умножаването на матриците T и Q с помощта на компилатора Free Pascal (елементите на матрицата са дробни числа от реален тип, изходът се извършва с точност до 11 знака след десетичната запетая) е подобен на резултата от умножаването на матриците T и Q с помощта на компилатора Turbo Pascal, когато се използва разширен тип данни за матрични елементи. Когато се използват матрични елементи от тип extended, резултатът не се променя.

Може да се заключи, че когато се използват дробни числа от разширен тип или когато се използва компилаторът Free Pascal, а не Turbo Pascal, точността на изчислението на получената матрица се увеличава.

6) Резултатът от умножаването на матриците T и Q при използване на компилатора Fortran G95 (матрични елементи -дробни числа като реални*4 - 4 байта):

Вижда се, че 5-6-ти знак след десетичната запетая е закръглен.

7) Резултатът от умножаването на матриците T и Q с помощта на компилатора Fortran G95 (елементите на матрицата са дробни числа от типа real*8 - 8 байта):

Елементът на получената матрица е число с точност до осем знака след десетичната запетая. Деветият символ е заоблен.

8) Резултатът от умножаването на матриците T и Q с помощта на компилатора Fortran G95 (елементите на матрицата са дробни числа от типа real*10 - 10 байта):

Елементът на получената матрица е число с точност до четиринадесет знака след десетичната запетая.

Така могат да се направят следните изводи:

– В експертната система MathCad резултатът се извежда с точност до 12 знака след десетичната запетая без грешки и закръгляния;

– Компилаторът Turbo Pascal закръгля реалните числа от реалния тип в осмия знак след десетичната запетая;

– В резултат на умножение на две матрици с разширени елементи с помощта на компилатора Turbo Pascal, закръгляването се извършва на единадесетия знак след десетичната запетая;

– При използване на компилатора Free Pascal елементите на получената матрица се закръглят до единадесетия знак след десетичната запетая, независимо от вида на елементите на оригиналните матрици – реални или разширени. Точността не зависи от типа данни, т.к във Free Pascal реалният тип отнема 8 байта вместо 6, както е в Turbo Pascal. (Free Pascal използва математически копроцесор (или емулация) за всички изчисления с плаваща запетая. Размерът на стандартния тип Real зависи от процесора и е единичен или двоен);

– В резултат на умножение на две матрици с елементи от типа Real*4 с помощта на програма, написана на езика Fortran, закръгляването се извършва в петия или шестия знак след десетичната запетая;

- Използвайкикомпилатор Fortran G95 в резултат на умножение на две матрици с елементи от тип Real*8 закръгляването става в деветия знак след десетичната запетая;

– Когато използвате Fortran G95, умножението на две Real*10 матрици не води до закръгляване до петнадесетия знак след десетичната запетая.

Метод на най-малките квадрати

OLS е един от основните методи за регресионен анализ за оценка на неизвестни параметри на регресионни модели от извадкови данни. Методът се основава на минимизиране на сумата от квадратите на регресионните остатъци.

Разгледайте следния проблем: да апроксимирате набор от осем експериментални точки чрез степенен полином (таблица).