예제 #1
0
        public SparseDualNumber(SparseDualNumber f, double g, double g1)
        {
            value = g;

            if (g1 != 0.0 && f.variables != null)
            {
                variables = f.variables;

                int n = variables.Length;

                gradient = new double[n];
                for (int i = 0; i < n; i++)
                {
                    gradient[i] = g1 * f.gradient[i];
                }
            }
        }
예제 #2
0
        public SparseDualNumber(SparseDualNumber f1, SparseDualNumber f2, double g, double g1, double g2)
        {
            value = g;

            /*gradient = new Dictionary<int, double>();

            if (g1 != 0.0)
            {
                foreach (KeyValuePair<int, double> gr in f1.gradient)
                {
                    gradient[gr.Key] += g1 * gr.Value;
                }
            }

            if (g2 != 0.0)
            {
                foreach (KeyValuePair<int, double> gr in f1.gradient)
                {
                    gradient[gr.Key] += g2 * gr.Value;
                }
            }*/
        }
예제 #3
0
 public static SparseDualNumber Exp(SparseDualNumber f)
 {
     double c = Math.Exp(f.value);
     return new SparseDualNumber(f, c, c);
 }