Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "lab8.h"
- #include <cmath>
- #include <iostream>
- #include <ctime>
- // Ðåøåíèå óð-ÿ f(x) = 0 ìåòîäîì êàñàòåëüíûõ ñ òî÷íîñòüþ eps
- double Newton(double x, func f, double eps)
- {
- double temp{x};
- do
- {
- temp = x;
- x = temp - (f(temp)/deriveFunc(temp, f, eps,true));
- } while(!(std::abs(temp - x) < eps));
- return x;
- }
- // ×èñëåííîå èíòåãðèðîâàíèå f(x) â çàäàííîì èíòåðâàëå [a, b]
- // ñ òî÷íîñòüþ â n òî÷åê ìåòîäîì Ìîíòå Êàðëî
- // (áîëüøå òî÷åê - áîëüøå òî÷íîñòü)
- double MonteCarloIntegration(func f, double a, double b, long n)
- {
- double fs, u, r, x;
- srand(time(NULL));
- fs = 0.0;
- for(int i = 1; i <= n; ++i)
- {
- u = (double)rand()/(RAND_MAX+1);
- x = a + (b - a)*u;
- fs += f(x);
- }
- r = fs*(b-a)/n;
- return r;
- }
- // Ïðîèçâîäíàÿ ôóíêöèè (ëåâàÿ è ïðàâàÿ)
- double deriveFunc(double x,func f,double eps,bool isRight){
- auto h{ (x!=0)? x/10 : 1};
- h = (isRight)? h : -h; // Èä¸ì ê íóëþ ëèáî ñïðàâà ëèáî ñëåâà
- auto F{(f(x+h) - f(x))/h};
- auto F1{0.0};
- bool fin{false};
- do
- {
- h/=10;
- F1 = (f(x+h) - f(x))/h;
- fin = std::abs(F1-F) <= eps;
- F = F1;
- } while(!fin);
- return F;
- }
- // Êîðíè êâàäðàòíîãî òð¸õ÷ëåíà
- sqrTrinResult sqrTrinSolution(func f){
- double C = f(0);
- double B = deriveFunc(0,f,0.000001f,true);
- double A = f(1) - B - C;
- double Discrim { (B*B) - 4*A*C };
- double sqrtDiscrim{std::sqrt(Discrim)};
- sqrTrinResult result;
- result.X1 = (-B + sqrtDiscrim) / 2*A;
- result.X2 = (-B - sqrtDiscrim) / 2*A;
- return result;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement