コード例 #1
0
ファイル: TrapezoidalRule.cs プロジェクト: adduxa/compMath
 public CalculationResult Calculate(Func func, double begin, double end, double accuracy)
 {
     var sign = Math.Sign(end - begin);
     double[] temp = {Math.Min(begin, end), Math.Max(begin, end)};
     begin = temp[0];
     end = temp[1];
     var segments = InitialSegments/2;
     var res = double.PositiveInfinity;
     double prevRes;
     do {
         prevRes = res;
         segments *= 2;
         var h = (end - begin)/segments;
         res = (func.Calculate(begin) + func.Calculate(end))/2;
         for(var i = 1; i <= segments - 1; i++) {
             res += func.Calculate(begin + h*i);
         }
         res *= h;
     } while((Math.Abs(res - prevRes))/3 > accuracy);
     var acc = (Math.Abs(res - prevRes)) / 3;
     res *= sign;
     return new CalculationResult(res, segments, acc);
 }
コード例 #2
0
ファイル: Func.cs プロジェクト: adduxa/compMath
 public Func(string mathNotation, Func<double, double> function)
 {
     _mathNotation = mathNotation;
     _function = function;
 }