47 lines
926 B
Matlab
47 lines
926 B
Matlab
tic;
|
|
samples = 10000000;
|
|
xBounds = LinearBounds(0,20);
|
|
yBounds = LinearBounds(-10,150000);
|
|
bounds = Bounds(xBounds,yBounds);
|
|
pointsInside = 0;
|
|
realValue = realIntegral(bounds.x);
|
|
|
|
for i = 0:samples
|
|
toTestPoint = bounds.getRandomPoint;
|
|
if getIsInside(toTestPoint)
|
|
pointsInside = pointsInside+1;
|
|
end
|
|
end
|
|
|
|
|
|
format longG
|
|
integral = (pointsInside/samples)*bounds.area
|
|
realValue
|
|
error = abs(realValue-integral)
|
|
samples
|
|
toc
|
|
|
|
|
|
|
|
function out = mainFunction(x)
|
|
out = x^4-4*x^3+18*x^2-12*x-69;
|
|
end
|
|
|
|
function out = indefiniteIntegral(x)
|
|
out = (1/5)* x^5 - x^4 + 6* x^3 - 6*x^2 - 69*x;
|
|
end
|
|
|
|
function out = getIsInside(p)
|
|
arguments
|
|
p Point
|
|
end
|
|
y_0 = mainFunction(p.x);
|
|
out = abs(y_0) > abs(p.y) && y_0 * p.y >= 0;
|
|
end
|
|
|
|
function out = realIntegral(bounds)
|
|
arguments
|
|
bounds LinearBounds
|
|
end
|
|
out = indefiniteIntegral(bounds.higher) - indefiniteIntegral(bounds.lower);
|
|
end |