Елементарна нумеричка интеграција May 29, 2008
Posted by admin in Информатика, Математика.Tags: Математика, анализа, интеграл, интеграција, интерполација, калкулус
add a comment
Често се среќаваме со функции кои се многу тешки за аналитичко интегрирање или чиј неопределен интеграл не може да се изрази преку елементарните функции (пример ). Функциите кои се интегрираат аналитички се исклучок, а не правило. Постојат повеќе алгоритми кои нумерички ги пресметуваат интегралите, меѓутоа овој запис ќе зборува само за дел од нив. Денес, ваквите пресметки се прават со помош на компјутер, па со секој метод приложена е и функција во програмскиот јазик C која ја нумерички ја интегрира функцијата со прототип
float f(float x);
на истиот интервал. Да претпоставиме дека имаме функција која сакаме да ја интегрираме на интервалот
, односно сме заинтересирани за
. Главната логика на алгоритмите е
- да се раздели интервалот
на повеќе субинтервали
- да се пресмета плоштината на секој од овие интервали (помеѓу x-оската и функцијата)
- да се соберат сите плоштини
Во оваа статија интервалот ќе го делиме на
еднакви субинтервали од големина
,
. Плоштината на секој субинтервал ја пресметуваме со приближување на функцијата со некоја друга која е лесно интеграбилна. Дел од алгоритмите кои користат линеарно приближување се:
- Правило на правоаголник

Плоштината на секој сегмент ја пресметуваме со помош на правоаголник со ширина
и висина
, односно
.
float i_pravoagolnik(float a, float b, unsigned int n) {
/**
* Ја интегрира f(x) на интервалот [a,b] a<b
* користејќи n интервали
*/
float p=0f, h=(b-a)/n;
int i;
for(i=0; i<n; i++) {
/* не е оптимизирано за кодот да е појасен */
p += f((a+i*h+a*(i+1)*h)/2)*h
}
return p;
}
Нешто попрецизен метод е:
- Правило на трапез

Како што налага името и сликата – за плоштините на субинтервалите се користи формула на трапез (основи паралелни на y-оската со должина и
и висина
). Односно
float i_trapez(float a, float b, unsigned int n) {
/**
* Ја интегрира f(x) на интервалот [a,b] a<b
* користејќи n интервали
*/
float p=0f, h=(b-a)/n;
int i;
for(i=0; i<n; i++) {
/* не е оптимизирано за кодот да е појасен */
p += ((f(a+i*h)+f(a+(i+1)*h))/2)*h
}
return p;
}
Следен чекор е собирање на сите овие интервали, односно .
Ова се само најелементарните алгоритми за нумеричка интеграција на функции од една променлива кои користат линеарна интерполација. Понапредните алгоритми користат полиномна интерполација и интервалот не го делат на овој начин. Сликите се преземени од Википедија, каде што можете да прочитате повеќе за проблематиката.
Кулите од Ханои May 28, 2008
Posted by admin in Математика.Tags: Математика, дискретна математика, индукција, кулите од ханои
add a comment
Првиот пост на овој блог ќе биде посветен за еден многу познат проблем од доменот на дискретната математика. Се работи за проблемот познат како Tower of Hanoi. Значи, на еден стап имаме различни по големина дискови и треба да ги префрлиме на друг стап со минимален број на операции, а имаме уште еден помошен стап. Или, како што се гледа на сликата:
![]()
Со го бележиме минималниот број операции за да се префрлат
дискови. Јасно е дека
и
:
- горниот диск го префрламе на помошниот стап
- долниот диск го префрламе на вториот стап
- горниот диск го префрламе од помошниот на вториот стап
За случајот , постапката е слична:
- ги префрламе сите дискови освен последниот на помошниот стап =
чекори
- го префлраме најголемиот диск на вториот стап = 1 чекор
- ги префрламе дисковите од помошниот стап на вториот стап =
чекори
Односно, , аналогно
,
, а тоа воопштено е
. Се забележува дека
. По пат на индукција (ќе го презентирам само последниот чекор):
Се надевам дека првиот запис ви се допадна. Слободно напишете коментар доколку сакате да придонесете содржина на блогот или доколку сакате да споделите мислење во врска со проблемот.
