Beispiel #1
0
 private static void FormOutput(MathNet.Numerics.LinearAlgebra.Vector <double> solution, Equations.Nonlinear.NonlinearEquationDescription system, ref List <string> outputList)
 {
     for (int i = 0; i < solution.Count; i++)
     {
         outputList.Add(system.VariableNames[i] + " = " + solution[i].ToString());
     }
     double[] x = solution.ToArray();
     for (int i = 0; i < system.Equations.Count; i++)
     {
         outputList.Add($"F{i}(X) = {system.Equations[i].Execute(x)}");
     }
 }
Beispiel #2
0
        internal void RunNonlinearEquationsTest(MainWindow window)
        {
            FileTabItem tab = null;

            window.Dispatcher.Invoke(() =>
            {
                tab = window.FileTab.SelectedItem as FileTabItem;
            });
            if (tab == null)
            {
                return;
            }
            List <ErrorMessage> errorList = new List <ErrorMessage>();

            window.Dispatcher.Invoke(() =>
            {
                window.FileTab.Focus();
                window.StatusText = "Расчёт";
            });
            //Thread.Sleep(4000); //Test of UI
            List <string> outputList = new List <string>();

            try
            {
                string text = "";
                window.Dispatcher.Invoke(() => { text = tab.Document.Text; });
                Equations.Nonlinear.Compiler compiler = new Equations.Nonlinear.Compiler();
                Equations.Nonlinear.NonlinearEquationDescription compiledEquation = compiler.CompileEquations(text);
                MathUtils.NonlinearSystemSymbolicAnalytic        system           = new MathUtils.NonlinearSystemSymbolicAnalytic(compiledEquation);
                //calc solution
                MathNet.Numerics.LinearAlgebra.Vector <double> solution = MathUtils.NewtonRaphsonSolver.Solve(
                    system,
                    MathNet.Numerics.LinearAlgebra.Vector <double> .Build.DenseOfArray(compiledEquation.InitialValues),
                    20,
                    0.01,
                    1.0
                    );
                outputList.Add("Упрощённое представление");
                outputList.Add(compiledEquation.PrintEquations());
                outputList.Add("Решение");
                FormOutput(solution, compiledEquation, ref outputList);
            }
            catch (Equations.CompilerException exc)
            {
                outputList.Add(exc.Message);
                var errors = exc.Errors;
                foreach (var error in errors)
                {
                    errorList.Add(error);
                }
            }
            catch (Exception exc)
            {
                window.Dispatcher.Invoke(() =>
                {
                    window.OutputText += exc.Message;
                    window.OutputText += "\n";
                    window.OutputText += exc.StackTrace;
                });
                return;
            }
            try
            {
                window.Dispatcher.Invoke(() =>
                {
                    foreach (ErrorMessage error in errorList)
                    {
                        window.errors.Add(error);
                    }
                    foreach (var output in outputList)
                    {
                        window.OutputText += output;
                        window.OutputText += "\n";
                    }
                    window.StatusText = "Готово";
                }
                                         );
            }
            catch (Exception exc)
            {
                Console.Write(exc.Message);
            }
            return;
        }
Beispiel #3
0
        internal void RunNonlinearExpressionTest(MainWindow window)
        {
            FileTabItem tab = null;

            window.Dispatcher.Invoke(() =>
            {
                tab = window.FileTab.SelectedItem as FileTabItem;
            });
            if (tab == null)
            {
                return;
            }
            List <ErrorMessage> errorList = new List <ErrorMessage>();

            window.Dispatcher.Invoke(() =>
            {
                window.FileTab.Focus();
                window.StatusText = "Расчёт";
            });
            //Thread.Sleep(4000); //Test of UI
            List <string> outputList = new List <string>();

            try
            {
                string text = "";
                window.Dispatcher.Invoke(() => { text = tab.Document.Text; });
                Equations.Nonlinear.Compiler compiler = new Equations.Nonlinear.Compiler();
                Equations.Nonlinear.NonlinearEquationDescription compiledEquation = compiler.CompileEquations(text);
                outputList.Add("Variables:");
                outputList.Add(compiledEquation.PrintVariables());
                outputList.Add(compiledEquation.PrintEquations());
                outputList.Add(compiledEquation.PrintJacobiMatrix(false));
            }
            catch (Equations.CompilerException exc)
            {
                outputList.Add(exc.Message);
                var errors = exc.Errors;
                foreach (var error in errors)
                {
                    errorList.Add(error);
                }
            }
            catch (Exception exc)
            {
                window.Dispatcher.Invoke(() =>
                {
                    window.OutputText += exc.Message;
                    window.OutputText += "\n";
                    window.OutputText += exc.StackTrace;
                });
                return;
            }
            try
            {
                window.Dispatcher.Invoke(() =>
                {
                    foreach (ErrorMessage error in errorList)
                    {
                        window.errors.Add(error);
                    }
                    foreach (var output in outputList)
                    {
                        window.OutputText += output;
                        window.OutputText += "\n";
                    }
                    window.StatusText = "Готово";
                }
                                         );
            }
            catch (Exception exc)
            {
                Console.Write(exc.Message);
            }
            return;
        }