Применение формулы Виета для решения кубических уравнений - C#

Узнай цену своей работы

Формулировка задачи:

Ребята, всем привет. И не знаю, что делать. Мне нужно написать программу, которая находит корни кубического уравнения, я находил методы решения. Вита, Кардано и т.д., но все-таки ближе всего как мне кажется метод Виета. Причем, почему-то на разных сайтах, метод "переделанный". Больше всего интересует то, что в онлайн калькуляторах просят ввести значения a, b, c, d. В методе Виета, само выражение выглядит так: , но в решении задания по этой формуле, применяются только значения a, b, c, куда делось d?: . Я где-то читал, что первое значение x^3, попросту равняется единице! Но мне нужно написать калькулятор, где требовалось бы задавать значения всем переменным (a, b, c, d), и тут я наткнулся на один сайт, где есть то, что мне нужно, точнее само выражение (чуть отличается, чем на Википедии, хоть это и тоже метод Виета), в нем первое значение не единица по умолчанию, а число, которое я задам в переменной, и присутствует элемент d, но снова в самой формуле, я не нашел его применения.

В общем нужна ваши догадки, аргументы и т.д. Буду очень благодарен за вашу помощь!

Коды, которые я писал, ориентируясь на эти сайты:

С Википедии:

Листинг программы
  1. static void Main(string[] args)
  2. {
  3. Console.Write("Введите А ");
  4. int a = Int32.Parse(Console.ReadLine());
  5. Console.Write("Введите В ");
  6. int b = Int32.Parse(Console.ReadLine());
  7. Console.Write("Введите C ");
  8. int c = Int32.Parse(Console.ReadLine());
  9. double Q = (Math.Pow(a, 2) - 3 * b) / 9;
  10. double R = (2 * Math.Pow(a, 3) - 9 * a * b + 27 * c) / 54;
  11. double S = Math.Pow(Q, 3) - Math.Pow(R, 2);
  12. double fi;
  13. double x1;
  14. double x2;
  15. double x3;
  16. //double x23;
  17. double i = Math.Sqrt(-1);
  18. double v1 = -2 * Math.Sign(R) * Math.Sqrt(Q) - a / 3;
  19. double v2 = Math.Sign(R) * Math.Sqrt(Q) - a / 3;
  20. {
  21. if (S > 0)
  22. {
  23. fi = 1 / 3 * Math.Acos(R / Math.Sqrt(Math.Pow(Q, 3)));
  24. x1 = -2 * Math.Sqrt(Q) * Math.Cos(fi) - a / 3;
  25. x2 = -2 * Math.Sqrt(Q) * Math.Cos(fi + 2 / 3 * Math.PI) - a / 3;
  26. x3 = -2 * Math.Sqrt(Q) * Math.Cos(fi - 2 / 3 * Math.PI) - a / 3;
  27. Console.WriteLine(x1);
  28. Console.WriteLine(x2);
  29. Console.WriteLine(x3);
  30. }
  31. else
  32. {
  33. if (Q > 0)
  34. {
  35. fi = 1 / 3 * Math.Log(Math.Abs(R) / Math.Sqrt(Math.Pow(Q, 3))) + Math.Sqrt(Math.Pow(Math.Abs(R) / Math.Sqrt(Math.Pow(Q, 3)), 2) - 1);
  36. x1 = -2 * Math.Sign(R) * Math.Sqrt(Q) * 2 / (Math.Exp(fi) - Math.Exp(-fi)) - a / 3;
  37. //x23 = Math.Sign(R) * Math.Sqrt(Q) * 2 / (Math.Exp(fi) - Math.Exp(-fi)) - a / 3 + -i * Math.Sqrt(3) * Math.Sqrt(Q) * 2 / (Math.Exp(fi) + Math.Exp(-fi));
  38. Console.WriteLine("Действительный корень x1= " + x1);
  39. //Console.WriteLine("Пара комплексных корней (x2,3)" + x23);
  40. }
  41. else
  42. {
  43. fi = 1 / 3 * Math.Log(Math.Abs(R) / Math.Sqrt(Math.Abs(Q)), 3);
  44. x1 = -2 * Math.Sign(R) * Math.Sqrt(Math.Abs(Q)) * 2 / (Math.Exp(fi) + Math.Exp(-fi)) - a / 3;
  45. //x23 = Math.Sign(R) * Math.Sqrt(Math.Abs(Q)) * 2 / (Math.Exp(fi) + Math.Exp(-fi)) - a / 3 + -i * Math.Sqrt(3) * Math.Sqrt(Math.Abs(Q)) * 2 / (Math.Exp(fi) - Math.Exp(-fi));
  46. Console.WriteLine("Действительный корень x1=" + x1);
  47. //Console.WriteLine("Пара комплексных корней (x2,3)" + x23);
  48. }
  49. }
  50. }
  51. if (S == 0)
  52. {
  53. x1 = v1 = -2 * Math.Pow(Math.Sqrt(R), 3) - a / 3;
  54. x2 = v2 = Math.Pow(Math.Sqrt(R), 3) - a / 3;
  55. Console.WriteLine(x1);
  56. Console.WriteLine(x2);
  57. }
  58. //else
  59. //{ Console.Write("Система не имеет решений"); }
  60. Console.ReadKey();
  61. }

С Calc.ru:

Листинг программы
  1. static void Main(string[] args)
  2. {
  3. double a, b, c, fi, x1, x2, x3;
  4. Console.Write("Введите А ");
  5. a = Double.Parse(Console.ReadLine());
  6. Console.Write("Введите B ");
  7. b = Double.Parse(Console.ReadLine());
  8. Console.Write("Введите C ");
  9. c = Double.Parse(Console.ReadLine());
  10. double Q = (Math.Pow(a, 2)) / 9;
  11. double R = (2 * Math.Pow(a, 3) - 9 * a * b + 27 * c) / 54;
  12. double S = Math.Pow(Q, 3) - Math.Pow(R, 3);
  13. if (S > 0)
  14. {
  15. fi = (Math.Acos(R / Math.Pow(Q, 3 / 2))) / 3;
  16. x1 = -2 * Math.Pow(Q, 1 / 2) * Math.Cos(fi) - a / 3;
  17. x2 = -Math.Pow(Q, 1 / 2) * Math.Cos(fi + (2 * Math.PI) / 3);
  18. x3 = -Math.Pow(Q, 1 / 2) * Math.Cos(fi - (2 * Math.PI) / 3);
  19. Console.WriteLine("Уравнение имеет 3 вещественных корня:" + " x1= " + x1 + " x2= " + x2 + " x3= " + x3);
  20. }
  21. else if(S < 0)
  22. {
  23. fi = (Math.Log((Math.Abs(R) / Math.Pow(Math.Abs(Q), 3 / 2) / 3) + Math.Pow((Math.Pow((Math.Abs(R) / Math.Pow(Math.Abs(Q), 3 / 2) / 3), 2) - 1), 1 / 2), Math.E)) / 3;
  24. x1 = -2 * Math.Sign(R) * Math.Pow(Math.Abs(Q), 1 / 2) * (Math.Exp((Math.Abs(R) / Math.Pow(Math.Abs(Q), 3 / 2) / 3)) + Math.Exp(-(Math.Abs(R) / Math.Pow(Math.Abs(Q), 3 / 2) / 3)) / 2) - a / 3;
  25. Console.WriteLine("Уравнение имеет 1 вещественный корень:" + " x1= " + x1);
  26. }
  27. else if (S == 0)
  28. {
  29. x1 = -2 * Math.Pow(R, 1 / 3) - a / 3;
  30. x2 = x3 = Math.Pow(R, 1 / 3) - a / 3;
  31. Console.WriteLine("Уравнение имеет 2 вещественных корня:" + " x1= " + x1 + " x2= " + x2);
  32. }
  33. Console.ReadKey();
  34. }

Решение задачи: «Применение формулы Виета для решения кубических уравнений»

textual
Листинг программы
  1.             Console.Write("Введите А ");
  2.             double firstCoef = Double.Parse(Console.ReadLine()); // здесь и ниже заменил double на int
  3.             Console.Write("Введите В ");
  4.             double a = Double.Parse(Console.ReadLine()) / firstCoef;
  5.             Console.Write("Введите C ");
  6.             double b = Double.Parse(Console.ReadLine()) / firstCoef;
  7.             Console.Write("Введите D ");
  8.             double c = Double.Parse(Console.ReadLine()) / firstCoef;

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.8 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы