diff --git a/Mex/a622.cpp b/Mex/a622.cpp new file mode 100644 index 0000000..8d73b67 --- /dev/null +++ b/Mex/a622.cpp @@ -0,0 +1,56 @@ +#include "mex.h" +#include "matrix.h" +#include "stdlib.h" + + + +void mexFunction(int nlhs, mxArray *plhs[], // Output + int nrhs, const mxArray *prhs[]) // Input +{ + char *func_Name; + func_Name = mxArrayToString(prhs[0]); + + double a = *mxGetPr(prhs[1]); + double x1= *mxGetPr(prhs[2]); + double precision = *mxGetPr(prhs[3]); + double A=0; + + int fak = 1; + + double ya = 0; + + +//trapz + mxArray *func_Input[1]; + mxArray *func_Outputs[1]; + + for(int i = 0; a < x1; a += precision) + { + func_Input[0] = mxCreateDoubleScalar(a); + mexCallMATLAB(1, func_Outputs , 1 , func_Input , func_Name); + ya = *mxGetPr(func_Outputs[0]); + A += fak*ya; + + + if(i%2) + fak=2; + else + fak=4; + } + + func_Input[0] = mxCreateDoubleScalar(a); + mexCallMATLAB(1, func_Outputs , 1 , func_Input , func_Name); + ya = *mxGetPr(func_Outputs[0]); + + A += ya; + A = A*precision/3; + +// Output + plhs[0] = mxCreateDoubleScalar(A); + +//free allocated memory + mxDestroyArray(func_Input[0]); + mxDestroyArray(func_Outputs[0]); + + return; +} \ No newline at end of file diff --git a/Mex/a622.m b/Mex/a622.m new file mode 100644 index 0000000..92f3765 --- /dev/null +++ b/Mex/a622.m @@ -0,0 +1,7 @@ +% function accepts 1 string and 3 doubles +% a622("function", interval_start, interval_end, precision) +% +% a622 implements trapz (integral) +% +%exp.: a622("sin",0,pi/2,0.000001) +% ans = 1.0000 \ No newline at end of file diff --git a/SCE/SCE/INTEGRAL.cpp b/SCE/SCE/INTEGRAL.cpp index ec57fde..195b238 100644 --- a/SCE/SCE/INTEGRAL.cpp +++ b/SCE/SCE/INTEGRAL.cpp @@ -29,7 +29,7 @@ long double INTEGRAL::trapz(long double x0, long double x1, long double precisio long double INTEGRAL::quad(/*long double (* funk)(long double), */long double x0, long double x1, long double precision) { - long double A = 0, a = x0, b = a + precision; + long double A = 0, a = x0; int fak = 1; for (int i = 0; a < x1; a += precision, i++)