Exemplo n.º 1
0
            public static double?PartialDerivative(FunctionHandler f, LimSign xSign, uint index = 1, double precision = 1E-3, params double[] points)  //返回一个多元函数在某点的指定趋向方向的偏导数值;index指示要求偏微分的自变量序号,从1开始;precision过大会引入较大误差,precision过小会导致数值结果不稳定
            {
                if (f == null)
                {
                    throw new ArgumentNullException("Function Null");
                }
                if ((points == null) || (points.Length == 0))
                {
                    throw new ArgumentNullException("Variable Null");
                }
                double res = 0;

                if (index-- == 0)
                {
                    index = 0;
                }
                precision = Math.Abs(precision);
                try
                {
                    if (xSign == LimSign.Negative)
                    {
                        precision = -precision;
                    }
                    double[][] fi = new double[5][];
                    for (int i = 0; i < 5; i++)
                    {
                        fi[i]         = (double[])points.Clone();
                        fi[i][index] += i * precision;
                    }
                    res = (-25 * f(fi[0]) + 48 * f(fi[1]) - 36 * f(fi[2]) + 16 * f(fi[3]) - 3 * f(fi[4])) / (12 * precision); //五点公式
                }
                catch (Exception)                                                                                             //导数不存在或其他错误
                {
                    //MessageBox
                    return(null);
                }
                return(res);
            }
Exemplo n.º 2
0
 public LimVariable(double _p, LimSign _s)
 {
     this.Value = _p;
     this.Sign  = _s;
 }