Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.92
isaak
105 / 42 / 9
Регистрация: 17.10.2010
Сообщений: 678
#1

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

15.09.2012, 21:15. Просмотров 4968. Ответов 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++):

Вычисление корня квадратного из комплексного числа - C++
Написать программу для вычисления корня квадратного из комплексного числа z=x+iy. Такая операция на множестве комплексных чисел, как...

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

Вычисление квадратного корня из числа - C++
Здравствуйте. Помогите пожалуйста написать код вычисления квадратного корня из числа. Среда программирования Dev-C++ #include...

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

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

Вычисление квадратного корня с применением рекурсии - C++
Здравствуйте. Помогите, пожалуйста, задача такая: Вычислить значение x = корень(а), используя формулу , xn=1/2(xn-1+a/xn-1 ) в качестве...

12
Герц
524 / 341 / 4
Регистрация: 05.11.2010
Сообщений: 1,077
Записей в блоге: 1
15.09.2012, 22:01 #2
Цитата Сообщение от isaak Посмотреть сообщение
И почему берется арктангенс двойного угла
Код C++
1
phi = atan2(y,x);
, а не просто арктангенс???? Заранее огромное спасибо.
Во-первых, это просто название функции, а не "арктангенс двойного угла", во-вторых - арктангенс это функция не от угла :-)
1
isaak
105 / 42 / 9
Регистрация: 17.10.2010
Сообщений: 678
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
105 / 42 / 9
Регистрация: 17.10.2010
Сообщений: 678
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
105 / 42 / 9
Регистрация: 17.10.2010
Сообщений: 678
15.09.2012, 23:11  [ТС] #7
Спасибо огромное -=ЮрА=-

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

Не по теме:

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

0
isaak
105 / 42 / 9
Регистрация: 17.10.2010
Сообщений: 678
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
105 / 42 / 9
Регистрация: 17.10.2010
Сообщений: 678
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
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.09.2012, 09:56
Привет! Вот еще темы с ответами:

Вычисление квадратного корня четных элементов массива - C++
помогите улучшить код #include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt; using namespace std; class Kvadrat { ...

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

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

Алгоритм для извлечения квадратного корня x из вещественного числа y - C++
Составить блок-схему алгоритма для вычисления квадратного корня x из вещественного числа y. Примечание. Вычисление квадратного корня...


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

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

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