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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 5.00
Senarist
36 / 36 / 10
Регистрация: 14.03.2014
Сообщений: 549
#1

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

17.07.2014, 21:09. Просмотров 1896. Ответов 37
Метки нет (Все метки)

Написать программу для вычисления корня квадратного из комплексного числа z=x+iy. Такая операция на множестве комплексных чисел, как известно, имеет два решения z1=http://www.cyberforum.ru/cgi-bin/latex.cgi?sqrt(|z|)exp(i\varphi/2) и http://www.cyberforum.ru/cgi-bin/latex.cgi?sqrt(|z|)exp(i\varphi/2+ipi), где |z|=http://www.cyberforum.ru/cgi-bin/latex.cgi?sqrt(x^2+y^2) есть модуль комплексного числа z, а http://www.cyberforum.ru/cgi-bin/latex.cgi?\varphi - его аргумент. Вычислить действительную и мнимую части чисел z1 и z2. параметры 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(0,"");
    double x,y,phi,z,z1,z2,i,pi=3.14,X1,Y1,X2,Y2;
    cout<<"Введите x=";
    cin>>x;
    cout<<"Введите y=";
    cin>>y;
    phi=atan2(y,x);
    z=sqrt(x*x+y*y);
    cout<<"z1="<<sqrt(z)<<"*exp("<<phi/2<<"*i)""\n";
    cout<<"z2="<<sqrt(z)<<"*exp("<<phi/2<<"*i+i*"<<pi<<")\n";
    X1=z1*cos(phi);
    Y1=z1*sin(phi);
    X2=z2*cos(phi);
    Y2=z2*sin(phi);
    cout<<"X1=   "<<X1<<"Y1=   "<<Y1<<endl;
    cout<<"X2=   "<<X1<<"Y2=   "<<Y1<<endl;
    system("pause");
    return 0;
}
В ответах одни нули. Где мой косяк?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.07.2014, 21:09     Вычисление корня квадратного из комплексного числа
Посмотрите здесь:

C++ алгоритм для вычисления квадратного корня x из вещественного числа y.
Многопоточность (вычисление корня квадратного уравнения, используя несколько независимых потоков) C++
Вычисление по двум введенным вещественным числам коэффициентов приведенного квадратного уравнения, корнями которого являются эти числа C++
C++ Разработать алгоритм вычисления корня n-ой степени из комплексного числа
C++ Вычисление корня квадратного из комплексного числа
Вычисление квадратного корня из числа C++
C++ извлечения квадратного корня из комплексного числа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
S_el
2075 / 1582 / 303
Регистрация: 15.12.2013
Сообщений: 6,284
18.07.2014, 16:34     Вычисление корня квадратного из комплексного числа #21
Цитата Сообщение от B@R_LOG Посмотреть сообщение
S_el, не согласен с Вами.
Так а я что написал?Сравните то что у меня и то что у вас.
Сами ведь ссылку приводите,что первый аргумент делится на второй.
-=ЮрА=-
Заблокирован
Автор FAQ
18.07.2014, 16:51     Вычисление корня квадратного из комплексного числа #22
Senarist, касательно твоей ошибки, запиши вот так
Цитата Сообщение от Senarist Посмотреть сообщение
phi=atan2(y,x);
* * z=sqrt(x*x+y*y);
* * cout<<"z1="<<Z1 = sqrt(z)<<"*exp("<<phi/2<<"*i)""\n";
* * cout<<"z2="<<Z2 = sqrt(z)<<"*exp("<<phi/2<<"*i+i*"<<pi<<")\n";
-=ЮрА=-
18.07.2014, 16:55
  #23

Не по теме:

Цитата Сообщение от B@R_LOG Посмотреть сообщение
phi = atan2(x, y);* * * r = sqrt(x*x + y*y);
- касательно этого, напомню всем как выглядит подсказка для этой функции(см скриншот). Первым действительно стоит аргумент а не функция, другое дело что систем координат могла рассматриватсья не Декартова со сдвигом аккурат в 90 градусов против часовой стрелки. Так что каждый из споривших по поводу атана2 в прав, с той лишь поправкой что для декартовой системы координат первым аргументов в функцию должен идти у а не х.

B@R_LOG
18 / 18 / 0
Регистрация: 03.07.2013
Сообщений: 49
18.07.2014, 18:04     Вычисление корня квадратного из комплексного числа #24
S_el,
Я посчитал, что строка из моего кода, поэтому и не заметил, что действительно допустил опечатку.
в 13 строчке надо аргументы поменять местами:
C++
1
phi = atan2(y, x);
Senarist
36 / 36 / 10
Регистрация: 14.03.2014
Сообщений: 549
18.07.2014, 21:09  [ТС]     Вычисление корня квадратного из комплексного числа #25
Нашел точно такую же тему: Вычисление корня квадратного из комплексного числа
Ответа только два почему то. Хотя в задании сказано что нужно вычислить действительную и мнимую части чисел z1 и z2. Значит ответа должно быть 4. А уж если они каким то образом одинаковы, хотя бы 2 из них то это какая то магия)). После этого я еще больше засомневался в правильности своего решения. Сейчас попробую получше вспомнить комплексные числа.
S_el
2075 / 1582 / 303
Регистрация: 15.12.2013
Сообщений: 6,284
18.07.2014, 21:17     Вычисление корня квадратного из комплексного числа #26
Senarist, какой степени корень столько и чисел.
Senarist
36 / 36 / 10
Регистрация: 14.03.2014
Сообщений: 549
18.07.2014, 21:23  [ТС]     Вычисление корня квадратного из комплексного числа #27
S_el корень квадратный из условия. Решения имеется два z1 и z2 это тоже из условия. Из каждого этого решения нужно выделить действительную и мнимую часть, и того 4
S_el
2075 / 1582 / 303
Регистрация: 15.12.2013
Сообщений: 6,284
18.07.2014, 21:34     Вычисление корня квадратного из комплексного числа #28
Senarist, нажимайте на ник тогда прийдет уведомление.

Цитата Сообщение от Senarist Посмотреть сообщение
Из каждого этого решения нужно выделить действительную и мнимую часть, и того 4
И в чем проблема?У любого комплексного числа есть действительная и мнимая части.Но это одно комплексное число,а не 2.
Senarist
36 / 36 / 10
Регистрация: 14.03.2014
Сообщений: 549
18.07.2014, 22:13  [ТС]     Вычисление корня квадратного из комплексного числа #29
В общем сделал все проще:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    setlocale(0,"");
    double x,y,phi,z,Z;
    cout<<"Введите x=";
    cin>>x;
    cout<<"Введите y=";
    cin>>y;
    phi=atan2(y,x);
    z=sqrt(x*x+y*y);
    cout<<"Z= "<<sqrt(z)*(cos(phi/2)+sin(phi/2))<<"j\n";
    cout<<"Действительная часть:"<<cos(phi/2)<<"\n";
    cout<<"Мнимая часть:"<<sin(phi/2);
    system("pause");
    return 0;
}
По крайне мере хотя бы понятно что происходит.
S_el
2075 / 1582 / 303
Регистрация: 15.12.2013
Сообщений: 6,284
18.07.2014, 22:18     Вычисление корня квадратного из комплексного числа #30
Senarist, это не корень из комплексного числа, а непонятно что(корень из комплексного числа тоже должен быть комплексным).При выводе отдельных частей не забывайте умножать на модуль.
Кстати как вы хотите 2 корень искать?
Senarist
36 / 36 / 10
Регистрация: 14.03.2014
Сообщений: 549
18.07.2014, 22:28  [ТС]     Вычисление корня квадратного из комплексного числа #31
S_el Почему непонятно что? Считал по формуле)) http://www.cyberforum.ru/cgi-bin/latex.cgi?sqrt(|z|)*(cos(\varphi /n)+isin(\varphi /n)) n=2
Про модуль да, совсем забыл.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include<iostream>
#include<cmath>
using namespace std;
int main()
{
    setlocale(0,"");
    double x,y,phi,z,Z;
    cout<<"Введите x=";
    cin>>x;
    cout<<"Введите y=";
    cin>>y;
    phi=atan2(y,x);
    z=sqrt(x*x+y*y);
    cout<<"Z= "<<sqrt(z)*(cos(phi/2)+sin(phi/2))<<"j\n";
    cout<<"Действительная часть:"<<sqrt(z)*cos(phi/2)<<"\n";
    cout<<"Мнимая часть:"<<sqrt(z)*sin(phi/2);
    system("pause");
    return 0;
}
какой такой второй корень?)
S_el
2075 / 1582 / 303
Регистрация: 15.12.2013
Сообщений: 6,284
18.07.2014, 22:37     Вычисление корня квадратного из комплексного числа #32
Senarist, рекомендую ознакомится с теорией комплексных чисел,прежде чем писать программы с ними связанные.Или воспользоваться готовой реализацией и не парится.

Еще раз повторюсь,комплексное число это двухкомпонентное число,состоящее из мнимой и действительной части,как вы хотите его поместить в double?
Теперь по поводу количества корней.Какой степени корень столько и корней.Второй -> 2 числа,третьей -> 3 и.т.д.
Senarist
36 / 36 / 10
Регистрация: 14.03.2014
Сообщений: 549
18.07.2014, 22:57  [ТС]     Вычисление корня квадратного из комплексного числа #33
Вот на скорую руку написал вычисления степени:
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>
using namespace std;
int main()
{
    setlocale(0,"");
    double x,y,X,Y,r,phi,R,Phi;
    int n;
    cout<<"Действительная часть x= ";
    cin>>x;
    cout<<"Мнимая y= ";
    cin>>y;
    cout<<"Степень n= ";
    cin>>n;
    phi=atan2(y,x);
    r=sqrt(x*x+y*y);
    R=pow(r,n);
    Phi=n*phi;
    X=R*cos(phi);
    Y=R*sin(Phi);
    cout<<"X= "<<X<<"\n";
    cout<<"Y= "<<Y<<"\n";
    system("PAUSE");
    return 0;
}
Скажите мне что неправильно и я возможно пойму в чем ошибаюсь.
S_el
2075 / 1582 / 303
Регистрация: 15.12.2013
Сообщений: 6,284
19.07.2014, 08:56     Вычисление корня квадратного из комплексного числа #34
Senarist, вот с возведением в степень вы справились
Senarist
36 / 36 / 10
Регистрация: 14.03.2014
Сообщений: 549
25.07.2014, 15:43  [ТС]     Вычисление корня квадратного из комплексного числа #35
S_el
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
setlocale( LC_ALL,"Russian" );
const double  PI = 3.1416;
double x,y,phi,z,X,Y;
cout<<"Введите действительную часть x=";
cin>>x;
cout<<"Введите мнимую часть y=";
cin>>y;
phi=atan2(y,x);
z=sqrt(x*x+y*y);
X=sqrt(z)*cos((phi+2*PI)/2);
cout<<"X="<<X<<endl;
Y=sqrt(z)*sin((phi+2*PI)/2);
cout<<"Y="<<Y<<endl;
system("pause");
return 0;
}
S_el
2075 / 1582 / 303
Регистрация: 15.12.2013
Сообщений: 6,284
25.07.2014, 15:50     Вычисление корня квадратного из комплексного числа #36
Senarist, осталось найти 2-ой корень и задание будет выполнено.
Senarist
36 / 36 / 10
Регистрация: 14.03.2014
Сообщений: 549
25.07.2014, 16:03  [ТС]     Вычисление корня квадратного из комплексного числа #37
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cmath>
using namespace std;
int main()
{
setlocale( LC_ALL,"Russian" );
const double  PI = 3.1416;
double x,y,phi,z,X,Y,X1,Y1;
cout<<"Ââåäèòå äåéñòâèòåëüГ*ГіГѕ Г·Г*Г±ГІГј x=";
cin>>x;
cout<<"Ââåäèòå Г¬Г*èìóþ Г·Г*Г±ГІГј y=";
cin>>y;
phi=atan2(y,x);
z=sqrt(x*x+y*y);
X=sqrt(z)*cos((phi+2*PI)/2);
Y=sqrt(z)*sin((phi+2*PI)/2);
cout<<"X="<<X<<"\t" "Y="<<Y<<endl;
X1=sqrt(z)*cos(phi/2);
Y1=sqrt(z)*sin(phi/2);
cout<<"X1="<<X1<<"\t" "Y1="<<Y1<<endl;
system("pause");
return 0;
}
Вот так?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.07.2014, 16:50     Вычисление корня квадратного из комплексного числа
Еще ссылки по теме:

Составить программу извлечения точного квадратного корня из n-разрядного числа (n > 40) C++
C++ Вычисление квадратного корня из числа (без использования стандартных математических функций)
C++ Вычисление квадратного корня четных элементов массива
Нахождение квадратного корня C++
C++ Вычисление корня квадратного функции f(x)

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

Или воспользуйтесь поиском по форуму:
S_el
2075 / 1582 / 303
Регистрация: 15.12.2013
Сообщений: 6,284
25.07.2014, 16:50     Вычисление корня квадратного из комплексного числа #38
Senarist, да.
Yandex
Объявления
25.07.2014, 16:50     Вычисление корня квадратного из комплексного числа
Ответ Создать тему
Опции темы

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