Exemplo n.º 1
0
        public RationalNumber[][] GetLinEqSetMatrixOrd()
        {
            long m = EquationsCount;
            long n = VarsCount;

            RationalNumber[][] A       = AppHelper.CreateAmnMatrix <RationalNumber>(m, n + 1);
            RationalNumber[][] A_local = A;

            for (int i = 0; i < m; i++)
            {
                for (int j = 0; j < n + 1; j++)
                {
                    A[i][j] = new RationalNumber(0, 1);
                }
            }

            Equations.ForEach(r1 => r1.Value.ForEach(
                                  r2 =>
            {
                A_local[r1.Key][r2.Key] = new RationalNumber(r2.Value);
            }));

            VectorB.ForEach(r =>
            {
                A_local[r.Key][n] = new RationalNumber(r.Value.Value);
            });

            return(A);
        }
Exemplo n.º 2
0
        public (long[][], long[][]) GetLinEqSetMatrixFast()
        {
            long m = EquationsCount;
            long n = VarsCount;

            long[][] A_p = AppHelper.CreateAmnMatrix <long>(m, n + 1);
            long[][] A_q = AppHelper.CreateAmnMatrix <long>(m, n + 1);

            for (int i = 0; i < m; i++)
            {
                for (int j = 0; j < n + 1; j++)
                {
                    A_p[i][j] = 0;
                    A_q[i][j] = 1;
                }
            }

            Equations.ForEach(r1 => r1.Value.ForEach(
                                  r2 => {
                A_p[r1.Key][r2.Key] = r2.Value.ToLong();
                A_q[r1.Key][r2.Key] = 1;
            }));

            VectorB.ForEach(r =>
            {
                A_p[r.Key][n] = r.Value.Value.ToLong();
                A_q[r.Key][n] = 1;
            });

            return(A_p, A_q);
        }
Exemplo n.º 3
0
        public SparseMatrix GetLinEqSetSparseMatrix()
        {
            long m = EquationsCount;
            long n = VarsCount;

            SparseMatrix A = new(m, n + 1);

            Equations.ForEach(r1 => r1.Value.ForEach(
                                  r2 =>
            {
                A.Set(r1.Key, r2.Key, new RationalNumber(r2.Value));
            }));

            VectorB.ForEach(r =>
            {
                A.Set(r.Key, n, new RationalNumber(r.Value.Value));
            });

            return(A);
        }
Exemplo n.º 4
0
        private void ReorderCashFlowGroup(BudgetCalculatorEquation itemToReorder, int placeAtIndex)
        {
            //var itemsCopy = Equations.ToList();
            var itemToReorderIndex = Equations.IndexOf(itemToReorder);

            if (itemToReorderIndex < 0 || itemToReorderIndex == placeAtIndex)
            {
                return;
            }
            Equations.IsNotifying = false;
            SuppressEvent         = true;

            Equations.Insert(placeAtIndex, itemToReorder);
            if (placeAtIndex > itemToReorderIndex)
            {
                Equations.RemoveAt(itemToReorderIndex);
            }
            else
            {
                Equations.RemoveAt(itemToReorderIndex + 1);
            }
            int position = 1;

            Equations.ForEach(x => x.Position = position++);
            using (var tx = Database.GetTransaction())
            {
                Database.SaveAll(Equations);
                tx.Complete();
            }
            Equations.IsNotifying = true;

            Equations.Refresh();
            NotifyOfPropertyChange(() => AvaiableEquations);
            CachedService.Clear(CachedServiceKeys.AllEquations);
            SuppressEvent = false;
        }