[ Nedeljko @ 14.09.2010. 11:44 ] @
Svakoj realnoj funkciji ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() Intervalna algebra omogućava da kontrolišemo, kako grešku odsecanja ili zaokrugljivanja ili računa (što je isto), tako i ukupnu grešku, koja uključuje i grešku merenja i grešku metode. Vrednost izraza izračunatog u intervalnoj algebri je interval kome garantovano pripada tačna vrednost izraza. Jedna od intervalnih biblioteka za C++ uključena je u boost. Evo primera njene primene na računanje sinusa pomoću tejlorovog razvoja. Code: #include <boost/numeric/interval.hpp> using namespace boost; using namespace numeric; using namespace interval_lib; typedef interval<double> real; real sin(double arg) { real x(arg); const real pi2(6.283185307179586, 6.2831853071795867); int factor = 1; if (x == 0) { return real(0); } if (x < 0) { factor = -1; x = -x; } real q = x / pi2; q -= floor(q.upper()); if (q.upper() > 0.5) { factor = -factor; q -= 0.5; } if (q.upper() > 0.25) { q = -q + 0.5; } x = q*pi2; real x2 = -x*x; real s(0); real f = x; int n = 1; real approximation(qMin(0.0, x.lower()), qMax(0.0, x.upper())); while (true) { s += f; n += 2; f *= x2; f /= n*(n-1); real newApproximation = s + f; newApproximation = real(qMin(newApproximation.lower(), s.lower()), qMax(newApproximation.upper(), s.upper())); newApproximation = real(qMax(newApproximation.lower(), approximation.lower()), qMin(newApproximation.upper(), approximation.upper())); if (newApproximation.lower() == approximation.lower() && newApproximation.upper() == approximation.upper()) { break; } approximation = newApproximation; } if (factor == -1) { return -approximation; } return approximation; } Dakle, za svako ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |