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

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

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

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

17.07.2014, 21:09. Просмотров 2142. Ответов 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;
}
В ответах одни нули. Где мой косяк?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.07.2014, 21:09
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Вычисление корня квадратного из комплексного числа (C++):

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

извлечения квадратного корня из комплексного числа - 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 ) в качестве...

37
zss
Модератор
Эксперт С++
6400 / 5966 / 1943
Регистрация: 18.12.2011
Сообщений: 15,357
Завершенные тесты: 1
18.07.2014, 12:15 #16
C++
1
2
3
4
5
phi = atan2(y, x);// угол
z = sqrt(x*x + y*y); // модуль 
cout<<"z="<<x<<'+'<<y<<'i'<<endl; // вывод обычного представления
cout<<"modul="<<z<<" phi="<<phi<<endl; // вывод модуля и угла
 cout << "z=" <<z<< "*exp(i*" << phi <<")"<<endl; // вывод экспоненциального представления
0
B@R_LOG
18 / 18 / 0
Регистрация: 03.07.2013
Сообщений: 49
18.07.2014, 12:20 #17
S_el, не согласен с Вами.

http://www.cplusplus.com/reference/cmath/atan2/
0
Миниатюры
Вычисление корня квадратного из комплексного числа  
Ilot
18.07.2014, 12:24
  #18

Не по теме:

Цитата Сообщение от B@R_LOG Посмотреть сообщение
S_el, не согласен с Вами.
И будете правы ибо мы не арабы и пишем предложения слева на право, а дроби начиная с числителя.

0
CheshireCat
18.07.2014, 13:05
  #19

Не по теме:

Senarist, это учебное упражнение у тебя такое? Потому что если нет, имей в виду, что стандартная библиотечная функция sqrt отлично умеет работать с комплексными числами: http://www.cplusplus.com/reference/complex/sqrt/

0
-=ЮрА=-
Заблокирован
Автор FAQ
18.07.2014, 14:03 #20
Корень квадратный - возвести число в степень 1/2, переводим число в показательную форму, после чего возвели в нужную степень a*eb, потом возвращаем его в алгебраическую.
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
#include <cmath>
#include <iostream>
using namespace std;
 
class CComplex
{
protected:
    bool bExp;
    double re;
    double im;
public:
    CComplex();
    double Abs ();
    double Angle();
    void ToExp();
    void ToAlg();
    void power(float p);
    void print();
 
    double &Re(){return re;}
    double &Im(){return im;}
};
 
CComplex::CComplex(){
    re = 0;
    im = 0;
    bExp = 0;
}
 
double CComplex::Abs(){
    if( bExp )
        return re;
    else
        return sqrt(re*re + im*im);
}
 
double CComplex::Angle(){
    if( bExp )
        return im;
    else
        return atan2(im, re);
}
 
void CComplex::ToExp(){
    if( !bExp ) {
        float abs = Abs();
        float phi = Angle();
        re = abs;
        im = phi;
        bExp = 1;
    }
}
 
void CComplex::ToAlg(){
    if( bExp )  {
    float abs = re;
    float phi = im;
    re = abs*cos(phi);
    im = abs*sin(phi);
    bExp = 0;
    }
}
 
void CComplex::power(float p){
    if( bExp )
    {
        re = pow(re, p);
        im = im*p;
    }
    else
    {
        ToExp();
        power(p);
        ToAlg();
    }
}
 
void CComplex::print(){
    if( bExp )
        cout<<"EXP FORM : "<<re<<"*exp(j*"<<im<<")"<<endl;
    else
        cout<<"ALG FORM : "<<re<<" + j*("<<im<<")"<<endl;
}
 
 
 
int main()
{
    CComplex val;
    val.Re() =  25;
    val.Im() = -63;
    val.print();
    cout<<"SQRT : "<<endl;
    val.power(0.5);
    val.print();
    val.ToExp();
    val.print();
    cin.get();
    return 0;
}
http://codepad.org/0RqUtHUx
ALG FORM : 25 + j*(-63)
SQRT :
ALG FORM : 6.81099 + j*(-4.62488)
EXP FORM : 8.2328*exp(j*-0.596515)
0
Миниатюры
Вычисление корня квадратного из комплексного числа  
S_el
2106 / 1625 / 308
Регистрация: 15.12.2013
Сообщений: 6,484
18.07.2014, 16:34 #21
Цитата Сообщение от B@R_LOG Посмотреть сообщение
S_el, не согласен с Вами.
Так а я что написал?Сравните то что у меня и то что у вас.
Сами ведь ссылку приводите,что первый аргумент делится на второй.
1
-=ЮрА=-
Заблокирован
Автор 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";
0
-=ЮрА=-
18.07.2014, 16:55
  #23

Не по теме:

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

0
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);
0
Senarist
47 / 51 / 14
Регистрация: 14.03.2014
Сообщений: 617
18.07.2014, 21:09  [ТС] #25
Нашел точно такую же тему: Вычисление корня квадратного из комплексного числа
Ответа только два почему то. Хотя в задании сказано что нужно вычислить действительную и мнимую части чисел z1 и z2. Значит ответа должно быть 4. А уж если они каким то образом одинаковы, хотя бы 2 из них то это какая то магия)). После этого я еще больше засомневался в правильности своего решения. Сейчас попробую получше вспомнить комплексные числа.
0
S_el
2106 / 1625 / 308
Регистрация: 15.12.2013
Сообщений: 6,484
18.07.2014, 21:17 #26
Senarist, какой степени корень столько и чисел.
0
Senarist
47 / 51 / 14
Регистрация: 14.03.2014
Сообщений: 617
18.07.2014, 21:23  [ТС] #27
S_el корень квадратный из условия. Решения имеется два z1 и z2 это тоже из условия. Из каждого этого решения нужно выделить действительную и мнимую часть, и того 4
0
S_el
2106 / 1625 / 308
Регистрация: 15.12.2013
Сообщений: 6,484
18.07.2014, 21:34 #28
Senarist, нажимайте на ник тогда прийдет уведомление.

Цитата Сообщение от Senarist Посмотреть сообщение
Из каждого этого решения нужно выделить действительную и мнимую часть, и того 4
И в чем проблема?У любого комплексного числа есть действительная и мнимая части.Но это одно комплексное число,а не 2.
0
Senarist
47 / 51 / 14
Регистрация: 14.03.2014
Сообщений: 617
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;
}
По крайне мере хотя бы понятно что происходит.
0
S_el
2106 / 1625 / 308
Регистрация: 15.12.2013
Сообщений: 6,484
18.07.2014, 22:18 #30
Senarist, это не корень из комплексного числа, а непонятно что(корень из комплексного числа тоже должен быть комплексным).При выводе отдельных частей не забывайте умножать на модуль.
Кстати как вы хотите 2 корень искать?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2014, 22:18
Привет! Вот еще темы с ответами:

Вычисление квадратного корня четных элементов массива - 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. Примечание. Вычисление квадратного корня...


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

Или воспользуйтесь поиском по форуму:
30
Yandex
Объявления
18.07.2014, 22:18
Ответ Создать тему
Опции темы

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