/// <summary> /// Checks stability of polynom /// </summary> /// <param name="polynom">Polynom</param> /// <returns>True if stable and false otherwise</returns> public static bool IsStablePolynom(double[] polynom) { if (polynom.Length == 1) { return(true); } if (polynom.Length == 2) { return((polynom[0] * polynom[1]) > 0); } double[,] a = GetGurvitzMatrix(polynom); double det = RealMatrix.Det(a); if (det <= 0) { return(false); } for (int i = 1; i < a.GetLength(0); i++) { double[,] b = RealMatrix.GetMainMinor(a, i); det = RealMatrix.Det(b); if (det <= 0) { return(false); } } return(true); }
public RealMatrixDetailPage(RealMatrix current_matrix) { //Matrix at top //Number of rows //Number of columns //Row reduced form //Transpose //Rank //Nullity //Determinant //Inverse (if it exists) //Characteristic polynomial StackLayout s = new StackLayout { Spacing = 20, BackgroundColor = Color.FromHex("046875") }; Label num_rows = new Label { Text = current_matrix.NumRows().ToString() + " rows", TextColor = Color.WhiteSmoke, HorizontalOptions = LayoutOptions.Center, FontSize = 16 }; s.Children.Add(num_rows); Label num_columns = new Label { Text = current_matrix.NumColumns().ToString() + " columns", TextColor = Color.WhiteSmoke, HorizontalOptions = LayoutOptions.Center, FontSize = 16 }; s.Children.Add(num_columns); Label rref = new Label { Text = "Row-Reduced Echelon Form:", TextColor = Color.WhiteSmoke, HorizontalOptions = LayoutOptions.Center, FontSize = 16 }; s.Children.Add(rref); Label rref_matrix = new Label { Text = current_matrix.Rref().ToString(), TextColor = Color.WhiteSmoke, HorizontalOptions = LayoutOptions.Center, FontSize = 16 }; s.Children.Add(rref_matrix); Label tranpose = new Label { Text = "Transpose(" + current_matrix.name + ") :", TextColor = Color.WhiteSmoke, HorizontalOptions = LayoutOptions.Center, FontSize = 16 }; s.Children.Add(tranpose); Label transpose_matrix = new Label { Text = current_matrix.Transpose().ToString(), TextColor = Color.WhiteSmoke, HorizontalOptions = LayoutOptions.Center, FontSize = 16 }; s.Children.Add(transpose_matrix); // Condition for matrix to have an inverse (must be square with non-zero determinant) if (current_matrix.NumRows() == current_matrix.NumColumns() && current_matrix.Det() != 0) { Label inv = new Label { Text = "Inverse", TextColor = Color.WhiteSmoke, HorizontalOptions = LayoutOptions.Center, FontSize = 16 }; Label inverse_matrix = new Label { Text = current_matrix.Rref().ToString(), TextColor = Color.WhiteSmoke, HorizontalOptions = LayoutOptions.Center, FontSize = 16 }; s.Children.Add(inv); s.Children.Add(inverse_matrix); } else { Label no_inv = new Label { Text = "The matrix has 0 determinant so has no inverse", TextColor = Color.WhiteSmoke, HorizontalOptions = LayoutOptions.Center, FontSize = 16 }; s.Children.Add(no_inv); } Label rank = new Label { Text = "Rank(" + current_matrix.name + ") = " + current_matrix.Rank().ToString(), TextColor = Color.WhiteSmoke, HorizontalOptions = LayoutOptions.Center, FontSize = 16 }; s.Children.Add(rank); Label nullity = new Label { Text = "Nullity(" + current_matrix.name + ") = " + current_matrix.Nullity().ToString(), TextColor = Color.WhiteSmoke, HorizontalOptions = LayoutOptions.Center, FontSize = 16 }; s.Children.Add(nullity); if (current_matrix.NumRows() == current_matrix.NumColumns()) { Label det = new Label { Text = "det(" + current_matrix.name + ") = " + current_matrix.Det().ToString(), TextColor = Color.WhiteSmoke, HorizontalOptions = LayoutOptions.Center, FontSize = 16 }; s.Children.Add(det); Label characteristic_polynomial = new Label { Text = "Characteristic(" + current_matrix.name + ") = " + current_matrix.CharPolynomial().ToString(), TextColor = Color.WhiteSmoke, HorizontalOptions = LayoutOptions.Center, FontSize = 16 }; s.Children.Add(characteristic_polynomial); } else { Label no_det = new Label { Text = "The matrix is not square so has no characteristic polynomial", TextColor = Color.WhiteSmoke, HorizontalOptions = LayoutOptions.Center, FontSize = 16 }; s.Children.Add(no_det); Label no_char = new Label { Text = "The matrix is not square so has no characteristic polynomial", TextColor = Color.WhiteSmoke, HorizontalOptions = LayoutOptions.Center, FontSize = 16 }; s.Children.Add(no_char); } ScrollView scroll = new ScrollView { Content = s }; Content = scroll; }