Форум программистов, компьютерный форум CyberForum.ru

Функция для решения кубического уравнения с комплексными коэффициентами - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
MB94
Сообщений: n/a
02.06.2013, 23:15     Функция для решения кубического уравнения с комплексными коэффициентами #1
Помогите пожалуйста написать функцию для решения кубического уравнения a*z^3+b*z^2+c*z+d=0 с комплексными коэффициентами. Подстановской z=y-(b/(3*a)) получается каноническое уравнение y^3+p*y+q=0, где p=-(b/(3*a^2))+c/a, q=(2b)/(27*a^3)-(b*c)/3*a^2+d/a. Каноническое уравнение решается по формулам Кардано. Очень нужно. Заранее спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.06.2013, 23:15     Функция для решения кубического уравнения с комплексными коэффициентами
Посмотрите здесь:

Заданы три корня кубического уравнения: a, b, c. C++
Код решения кубического уравнения C++
Найти действительный корень кубического уравнения C++
Написать программу решения кубического уравнения C++
C++ Функция для вычисления корней кубического уравнения
C++ Найти корни кубического уравнения
Найти все целые корни кубического уравнения C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MB94
Сообщений: n/a
05.06.2013, 21:23     Функция для решения кубического уравнения с комплексными коэффициентами #2
Мое решение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
#include "stdafx.h"
 
 
#pragma once
 
#include "targetver.h"
 
#include <stdio.h>
#include <tchar.h>
#include <iostream>
#include <math.h>
#include <cmath>
#include "UnComplex.h"
using namespace std;
 
 
int main()
{
setlocale (LC_ALL,"Russian");
const double eps = 0.1E-4;
double x,y;
cout<<"Решаем приведённое квадратное уравнение \n"
"az^3 + bz^2 + cz+ d = 0 \n";
cout<<"z = y - b/3a"<<endl;
cout<<"p = -b^2/3a^2 + c/a "<<" q = 2b^3/27a - bc/a^2 + d/a"<<endl;
cout<<"Уравнение принимает вид: \n"
"y^3 + py + q=0"<<endl;
cout<<"Введите действительную и мнимую часть a (a != 0): ";
cin>>x>>y;
if(x==0)
{
cout<<"a!=0 !!!";
exit(1);
}
Complex a(x,y);
cout<<"Введите действительную и мнимую часть b: ";
cin>>x>>y;
Complex b(x,y);
cout<<"Введите действительную и мнимую часть c: ";
cin>>x>>y;
Complex c(x,y);
cout<<"Введите действительную и мнимую часть d: ";
cin>>x>>y;
Complex d(x,y);
Complex Y[3]; //массив под значения y
Complex Z[3]; //массив под значения z
Complex p=-b*b/3*a*a + c/a;
Complex q=2*b*b*b/27*a - b*c/a*a + d/a;
Complex inner[2];
Complex root3_1[3], root3_2[3];
Complex D = q*q/4 + p*p*p/27;
D.Roots(2, inner);
Complex D1 = (-0.5)*q + inner[0];
Complex D2 = (-0.5)*q - inner[0];
D1.Roots(3, root3_1);
D2.Roots(3, root3_2);
Complex p3 = -p/3;
Complex prod;
Complex *YY = new Complex[3];
Complex *ZZ = new Complex[3];
int ij=0;
for(int i = 0; i<3;i++)
{
for(int j = 0; j<3; j++)
{
prod=root3_1[i]*root3_2[j];
double err = (prod-p3).Abs();
if(err<eps){
YY[ij]=root3_1[i]+root3_2[j];
ij++;
}
}
if(ij==3)
break;
}
Complex k = b/3*a;
for(int i = 0; i<ij;i++)
ZZ[i]=YY[i]-k;
cout<<"Корни уравнения: \n";
for(int i = 0; i<ij;i++)
ZZ[i].Print();
return 0;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
//Файл UnComplex.h
#ifndef UnComplexH
#define UnComplexH
#include <math.h>
class Complex
{
  double re,im; //Действительная и мнимая части комплексного числа
public:
 
  Complex() //Конструктор по умолчанию
  { re = 0; im = 0; }
 
  Complex(double x )      //Конструктор с одним аргументом
  { re = x; im = 0; }
 
  Complex(double x, double y) //Конструктор с двумя аргументами
  { re = x; im = y; }
 
 
  double Arg();         // Аргумент комплексного числа
 
  double Abs();         //Модуль комплексного числа
 
  Complex& operator+=(Complex z) //Сложение с присваиванием
  {
    re += z.re; im += z.im;
    return *this;
  }
 
  Complex& operator-=(Complex z) //Вычитание с присваиванием
  {
    re -= z.re; im -= z.im;
    return *this;
  }
 
  Complex operator*(Complex);    //Перемножение комплексных чисел
  Complex operator*(double);     //Умножение комплексного на вещественное
 
  Complex operator/(Complex);    //Деление комплексных чисел
  Complex operator-();           //Унарный минус, противоположное по знаку
  void Roots(int m, Complex rts[]);       //Извлечение корней степени m
  void Print();
 
};
 
  Complex operator+(Complex z, Complex t); // Сложение
  Complex operator-(Complex z, Complex t); // Вычитание
  Complex operator*(double a, Complex z);  //Умножение вещественного на комплексное
  //Получение комплексного числа по его модулю и аргументу
  Complex Polar(double mod, double arg);
  Complex Pow(Complex z, int m);  //Возведение комплексного числа в степень m
#endif
VeryWell
0 / 0 / 0
Регистрация: 01.04.2014
Сообщений: 5
18.11.2015, 13:04     Функция для решения кубического уравнения с комплексными коэффициентами #3
решение комплексного кубического уравнения онлайн

http://www.abakbot.ru/online-16/348-complex-3
Yandex
Объявления
18.11.2015, 13:04     Функция для решения кубического уравнения с комплексными коэффициентами
Ответ Создать тему
Опции темы

Текущее время: 11:35. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru