Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.92
isaak
108 / 45 / 19
Регистрация: 17.10.2010
Сообщений: 695
#1

Вычисление корня квадратного из комплексного числа - C++

15.09.2012, 21:15. Просмотров 5184. Ответов 12
Метки нет (Все метки)

Всем доброго время суток. Вычислить корень квадратный из комплексного числа z = x + i*y. такая операция на множестве комплексных чисел, как известно, имеет два решения:
http://www.cyberforum.ru/cgi-bin/latex.cgi?{z}_{1}= \sqrt{|z|}*exp(\frac{i*\varphi }{2})
и
http://www.cyberforum.ru/cgi-bin/latex.cgi?{z}_{2}= \sqrt{|z|}*exp(\frac{i*\varphi }{2} + i*\pi ), где

http://www.cyberforum.ru/cgi-bin/latex.cgi?|z| = \sqrt{{x}^{2} + {y}^{2}} есть модуль комплексного числа z, а http://www.cyberforum.ru/cgi-bin/latex.cgi?\varphi - его аргумент. Вычислить действительную и мнимую части чисел
http://www.cyberforum.ru/cgi-bin/latex.cgi?{z}_{1} и http://www.cyberforum.ru/cgi-bin/latex.cgi?{z}_{2}. Параметры x и y вводятся пользователем с клавиатуры. Вот код:
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
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
setlocale( LC_ALL,"Russian" );
 double x, y, X, Y; 
 double r, phi, R, Phi;
 cout << "Введите действительную часть x: ";
 cin >> x;
 cout << "Введите мнимую часть y: ";
 cin >> y;   
phi = atan2(y,x);
r = sqrt(x*x + y*y);
R = sqrt(r);  
Phi = (1/2) * phi;
X = R * cos(Phi);
Y = R * sin(Phi);
cout << "Результат равен: \n "; 
cout << "Действительная часть  "<<X<<"\n ";
cout << "Мнимая часть  "<<Y<<"\n ";   
system("pause");
return 0;
}
Проверьте пожалуйста правильность работы программы. Похоже где то вот здесь
C++
1
2
R = sqrt(r);  
Phi = (1/2) * phi;
И почему берется арктангенс двойного угла
C++
1
phi = atan2(y,x);
, а не просто арктангенс???? Заранее огромное спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
15.09.2012, 21:15
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вычисление корня квадратного из комплексного числа (C++):

Вычисление корня квадратного из комплексного числа
Написать программу для вычисления корня квадратного из комплексного числа...

Извлечение квадратного корня из комплексного числа
Всем доброго времени суток. такая проблема, не могу посчитать квадратный...

Вычисление квадратного корня из числа
Здравствуйте. Помогите пожалуйста написать код вычисления квадратного корня из...

Вычисление квадратного корня из числа (без использования стандартных математических функций)
Напишите программу, вычисляющую квадратный корень из числа (не пользуясь...

Вычисление корня квадратного функции f(x)
Программа на вычисление корня квадратного функции f(x) в пределе &lt;a, b&gt; методом...

Вычисление квадратного корня с применением рекурсии
Здравствуйте. Помогите, пожалуйста, задача такая: Вычислить значение x =...

12
Герц
524 / 341 / 12
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
15.09.2012, 22:01 #2
Цитата Сообщение от isaak Посмотреть сообщение
И почему берется арктангенс двойного угла
Код C++
1
phi = atan2(y,x);
, а не просто арктангенс???? Заранее огромное спасибо.
Во-первых, это просто название функции, а не "арктангенс двойного угла", во-вторых - арктангенс это функция не от угла :-)
1
isaak
108 / 45 / 19
Регистрация: 17.10.2010
Сообщений: 695
15.09.2012, 22:37  [ТС] #3
А программа сама правильная?
0
-=ЮрА=-
Заблокирован
Автор FAQ
15.09.2012, 22:43 #4
Цитата Сообщение от isaak Посмотреть сообщение
И почему берется арктангенс двойного угла
Код C++
1
phi = atan2(y,x);
, а не просто арктангенс????
- какой двойной угол?
Почитай что это за функция http://www.cplusplus.com/reference/clibrary/cmath/atan2/

С кодом всё ОК только вконце к радианам надо прибавлять Пи (посмотри свою же формулу для корня http://www.cyberforum.ru/cgi-bin/latex.cgi?{z}_{2}= \sqrt{|z|}*exp(\frac{i*\varphi }{2} + i*\pi ))
Цитата Сообщение от isaak Посмотреть сообщение
Phi = (1/2) * phi;
- но этого не делаем и поэтому ответ выходит неверным
1
isaak
108 / 45 / 19
Регистрация: 17.10.2010
Сообщений: 695
15.09.2012, 22:52  [ТС] #5
-=ЮрА=- спасибо за ответ. На сколько я понял прибавить Пи к радианам:
C++
1
phi = atan2(y,x) * 180 / PI;
И программа получается:
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
#include <iostream>
#include <cmath>
#define PI 3.1416
using namespace std;
int main()
{
setlocale( LC_ALL,"Russian" );
 double x, y, X, Y; 
 double r, phi, R, Phi;
 cout << "Введите действительную часть x: ";
 cin >> x;
 cout << "Введите мнимую часть y: ";
 cin >> y;   
phi = atan2(y,x) * 180 / PI;
r = sqrt(x*x + y*y);
R = sqrt(r);  
Phi = (1/2) * phi;
X = R * cos(Phi);
Y = R * sin(Phi);
cout << "Результат равен: \n "; 
cout << "Действительная часть  "<<X<<"\n ";
cout << "Мнимая часть  "<<Y<<"\n ";   
system("pause");
return 0;
}
Правильно да????
0
-=ЮрА=-
Заблокирован
Автор FAQ
15.09.2012, 22:56 #6
Цитата Сообщение от isaak Посмотреть сообщение
я понял прибавить Пи к радианам:
Код C++
1
phi = atan2(y,x) * 180 / PI;
- какое же это прибавление
Вот прибавление
C++
1
 phi = atan2(y,x) + PI;
1
isaak
108 / 45 / 19
Регистрация: 17.10.2010
Сообщений: 695
15.09.2012, 23:11  [ТС] #7
Спасибо огромное -=ЮрА=-

Добавлено через 4 минуты
-=ЮрА=- подскажи пожалуйста какое нужно взять -=ЮрА=-, чтобы результат мнимой части был не нулевой. Заранее огромное спасибо.
0
-=ЮрА=-
15.09.2012, 23:43
  #8

Не по теме:

Цитата Сообщение от isaak Посмотреть сообщение
-=ЮрА=- подскажи пожалуйста какое нужно взять -=ЮрА=-
- честно не понял, меня под корень не надо

0
isaak
108 / 45 / 19
Регистрация: 17.10.2010
Сообщений: 695
16.09.2012, 11:21  [ТС] #9
-=ЮрА=- извиняюсь за опечатку, хотел спросить какое нужно взять значение мнимой части y, чтобы результат мнимой части было ненулевое число, а то у меня при всех значениях y, в ответе мнимая часть равна 0. Еще раз приношу извинения за свой предыдущий ляп. Заранее огромное спасибо.
0
-=ЮрА=-
Заблокирован
Автор FAQ
16.09.2012, 12:46 #10
isaak, я вчера просмотрел - убери перевод в радианы
Цитата Сообщение от isaak Посмотреть сообщение
phi = atan2(y,x) * 180 / PI;
, здесь он совершенно не нужен при вычислениях.
0
-=ЮрА=-
Заблокирован
Автор FAQ
16.09.2012, 14:12 #11
isaak, вот твой алгоритм
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <cmath>
#include <iostream>
using namespace std;
 
int main()
{
    double x, y, z, phi;
    cout<<"x = ";cin>>x;
    cout<<"y = ";cin>>y;
    z = sqrt(x*x + y*y);
    phi = atan2(y, x);
    cout<<"Input complex : "<<z<<"*exp("<<phi<<"*j)"<<endl;
    cout<<"\tSQRT\n";
    cout<<"z1 = "<<sqrt(z)<<"*exp("<<phi/2<<"*j) = "
        <<sqrt(z)*cos(phi/2)<<" + "<<sqrt(z)*sin(phi/2)<<"*j"<<endl;
    cout<<"z2 = "<<sqrt(z)<<"*exp("<<phi/2 + asin(1.0)<<"*j) = "
        <<sqrt(z)*cos(phi/2 + asin(1.0))<<" + "<<sqrt(z)*sin(phi/2 + asin(1.0))<<"*j"<<endl;
    return 0;
}
Проверка в маткаде (правда маткад выдаёт только первый корень(он совпадает с отработкой программы), второй(тот что на Пи отстоит) считает уже наш алгоритм)
1
Миниатюры
Вычисление корня квадратного из комплексного числа  
isaak
108 / 45 / 19
Регистрация: 17.10.2010
Сообщений: 695
16.09.2012, 20:52  [ТС] #12
-=ЮрА=- спасибо огромное за ответ посмотри пожалуйста, а этот код правильный:
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
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
const double  PI = 3.1416;
setlocale( LC_ALL,"Russian" );
 
 double x, y, X, Y; 
 double r, phi, R, Phi;
 cout << "Введите действительную часть x: ";
 cin >> x;
 cout << "Введите мнимую часть y: ";
 cin >> y;   
phi = atan2(y,x) + PI;
r = sqrt(x*x + y*y);
R = sqrt(r);  
Phi = (1/2) * phi;
X = R * cos(Phi);
Y = R * sin(Phi);
cout << "Результат равен: \n "; 
cout << "Действительная часть  "<<X<<"\n ";
cout << "Мнимая часть  "<<Y<<"\n ";   
system("pause");
return 0;
}
0
-=ЮрА=-
18.09.2012, 09:56     Вычисление корня квадратного из комплексного числа
  #13

Не по теме:

isaak, да всё гуд, ты получаешь значение 2-го корня, тот что отстоит на Пи

1
18.09.2012, 09:56
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2012, 09:56
Привет! Вот еще темы с ответами:

Вычисление квадратного корня без cmath
Всем привет. Сделал простенький калькулятор без cmath, &quot;+,-,*,/,степень и...

Вычисление квадратного корня четных элементов массива
помогите улучшить код #include &lt;iostream&gt; #include &lt;conio.h&gt; #include...

Разработать алгоритм вычисления корня n-ой степени из комплексного числа
В общем нужно на любом языке накатать программу: Разработать алгоритм...

Многопоточность (вычисление корня квадратного уравнения, используя несколько независимых потоков)
Уважаемые программисты! Сможет ли кто-нибудь хотя бы примерно объяснить, как...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru