/// <summary> /// Método para resolução do problema previamente digitado /// </summary> /// <param name="f"></param> /// <param name="restr"></param> /// <returns></returns> public string SolucaoOtima(FuncaoObjetivo f, List <Restricoes> restr) { if (funObj == null) { throw new InvalidOperationException("Não há função objetivo definida"); } double x, y, z, a; switch (restricoesListBox.Items.Count) { case 2: a = Matriz.MatrizDeterminanteA2x2(Matriz.DefinirMatriz(restr)); x = Matriz.MatrizDeterminanteX2x2(Matriz.DefinirMatriz(restr)) / a; y = Matriz.MatrizDeterminanteY2x2(Matriz.DefinirMatriz(restr)) / a; f.X = x < 0 ? x * -1 : x; f.Y = y < 0 ? y * -1 : y; break; case 3: a = Matriz.MatrizDeterminanteA3x3(Matriz.DefinirMatriz(restr)); x = Matriz.MatrizDeterminanteX3x3(Matriz.DefinirMatriz(restr)) / a; y = Matriz.MatrizDeterminanteY3x3(Matriz.DefinirMatriz(restr)) / a; f.X = x < 0 ? x * -1 : x; f.Y = y < 0 ? y * -1 : y; break; //case 4: // a = Matriz.MatrizDeterminanteA4x4(Matriz.DefinirMatriz(restr)); // x = Matriz.MatrizDeterminanteX4x4(Matriz.DefinirMatriz(restr)) / a; // y = Matriz.MatrizDeterminanteY4x4(Matriz.DefinirMatriz(restr)) / a; // f.X = x < 0 ? x * -1 : x; // f.Y = y < 0 ? y * -1 : y; // break; //case 5: // a = Matriz.MatrizDeterminanteA5x5(Matriz.DefinirMatriz(restr)); // x = Matriz.MatrizDeterminanteX5x5(Matriz.DefinirMatriz(restr)) / a; // y = Matriz.MatrizDeterminanteY5x5(Matriz.DefinirMatriz(restr)) / a; // f.X = x < 0 ? x * -1 : x; // f.Y = y < 0 ? y * -1 : y; // break; default: a = Matriz.MatrizDeterminanteA3x3(Matriz.DefinirMatriz(restr)); x = Matriz.MatrizDeterminanteX3x3(Matriz.DefinirMatriz(restr)) / a; y = Matriz.MatrizDeterminanteY3x3(Matriz.DefinirMatriz(restr)) / a; f.X = x < 0 ? x * -1 : x; f.Y = y < 0 ? y * -1 : y; break; } if (maximizacaoRadioButton.Checked) { f.ValidaOperacao = "maximização"; } else if (minimizacaoRadioButton.Checked) { f.ValidaOperacao = "minimização"; } else { throw new InvalidOperationException("Não há operação de otimização selecionada"); } f.ValorOtimo = f.ValorX * f.X + f.ValorY * f.Y; return(string.Format("A Solução ótima desta operação será:{6}{0:n2} {1}{6}{2:n2} {3} para {4} esta operação.{6}Total:{5:n2}", f.X, f.NomeVarX, f.Y, f.NomeVarY, f.ValidaOperacao, f.ValorOtimo, Environment.NewLine)); }