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

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

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

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

17.07.2014, 21:09. Просмотров 1991. Ответов 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++ Вычисление корня квадратного из комплексного числа
C++ извлечения квадратного корня из комплексного числа
Вычисление квадратного корня из числа C++
C++ Вычисление квадратного корня из числа (без использования стандартных математических функций)
C++ Вычисление корня квадратного функции f(x)
Вычисление квадратного корня с применением рекурсии C++
C++ Вычисление квадратного корня четных элементов массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
22869 / 15011 / 4319
Регистрация: 22.10.2011
Сообщений: 26,616
Записей в блоге: 4
17.07.2014, 21:41     Вычисление корня квадратного из комплексного числа #2
Цитата Сообщение от Senarist Посмотреть сообщение
Где мой косяк?
Начинается с того, что переменным z1 и z2 никогда и ничего не присваивается, они как были нулями, так и остались. Соответственно, и результат умножения - ноль...
Kerry_Jr
Модератор
Эксперт PHP
2168 / 1964 / 685
Регистрация: 14.05.2014
Сообщений: 5,747
Записей в блоге: 1
Завершенные тесты: 5
17.07.2014, 21:47     Вычисление корня квадратного из комплексного числа #3
Цитата Сообщение от UI Посмотреть сообщение
z1 и z2 никогда и ничего не присваивается, они как были нулями
Ну почему ж нулями - мусором всяким.
Supernatural
287 / 143 / 28
Регистрация: 22.11.2010
Сообщений: 1,495
17.07.2014, 21:54     Вычисление корня квадратного из комплексного числа #4
все выводится, никаких нулей. Единственное, что смущает 2 строка:
C++
1
2
    cout<<"X1=   "<<X1<<"Y1=   "<<Y1<<endl;
    cout<<"X2=   "<<X1<<"Y2=   "<<Y1<<endl;
там x2 и y2 не должно выводиться?
Senarist
38 / 38 / 12
Регистрация: 14.03.2014
Сообщений: 579
17.07.2014, 21:56  [ТС]     Вычисление корня квадратного из комплексного числа #5
понял! спасибо, буду исправлять

Добавлено через 1 минуту
Supernatural что у Вас выводится?
Supernatural
287 / 143 / 28
Регистрация: 22.11.2010
Сообщений: 1,495
17.07.2014, 22:00     Вычисление корня квадратного из комплексного числа #6
ничего не менял
в окне сообщений, как и говорил, переменным x2 y2 ты присваиваешь значения, но не выводишь
Миниатюры
Вычисление корня квадратного из комплексного числа  
S_el
2092 / 1599 / 306
Регистрация: 15.12.2013
Сообщений: 6,420
17.07.2014, 22:03     Вычисление корня квадратного из комплексного числа #7
Кроме этого вы и корень вычисляете неверно.
Посмотрите на формулу для корня комплексного числа внимательнее,раз ищите в тригонометрической форме
B@R_LOG
18 / 18 / 0
Регистрация: 03.07.2013
Сообщений: 49
17.07.2014, 22:34     Вычисление корня квадратного из комплексного числа #8
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include<iostream>
using namespace std;
int main()
{
    setlocale(0, "");
    double x, y, phi, z;
    cout << "Введите x=";   cin >> x;
    cout << "Введите y=";   cin >> y;
    phi = atan2(y, x);      z = sqrt(x*x + y*y);
    
    for (int k = 0; k <= 1; k++)
        cout << "z" << k + 1 << "=" << sqrt(z) << "*exp(" << phi / 2 << "+" << 2*k << "*pi)" << endl;
    
    system("pause");
    return 0;
}
Senarist
38 / 38 / 12
Регистрация: 14.03.2014
Сообщений: 579
17.07.2014, 23:04  [ТС]     Вычисление корня квадратного из комплексного числа #9
B@R_LOG цикл использовать нельзя
Senarist
38 / 38 / 12
Регистрация: 14.03.2014
Сообщений: 579
17.07.2014, 23:15  [ТС]     Вычисление корня квадратного из комплексного числа #10
S_el, материал из вики
Я вроде как так и делал
Миниатюры
Вычисление корня квадратного из комплексного числа  
Senarist
38 / 38 / 12
Регистрация: 14.03.2014
Сообщений: 579
17.07.2014, 23:20  [ТС]     Вычисление корня квадратного из комплексного числа #11
Supernatural да в 21 строке просто опечатка.
B@R_LOG
18 / 18 / 0
Регистрация: 03.07.2013
Сообщений: 49
17.07.2014, 23:23     Вычисление корня квадратного из комплексного числа #12
Senarist,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include "stdafx.h" // for Visual Studio
#include <iostream>
#include <cmath>  
using namespace std;
#define PI 3.14159265
 
int main()
{
    setlocale(0, "");
    double x, y, phi, r;
    cout << "Введите x=";   cin >> x;
    cout << "Введите y=";   cin >> y;
    phi = atan2(x, y);      r = sqrt(x*x + y*y);
    
    for (int k = 0; k <= 1; k++)
        cout << "z" << k + 1 << "=" << r << "*exp ^ i(" << phi / 2 << "+" << k*PI << ")\n";
    
    system("pause");
    return 0;
}
Разницы никакой, можешь вручную переписать. Просто проще сразу для "n"й степени реализовывать.
По проверке на примерах вроде сходится.
Миниатюры
Вычисление корня квадратного из комплексного числа  
Senarist
38 / 38 / 12
Регистрация: 14.03.2014
Сообщений: 579
17.07.2014, 23:44  [ТС]     Вычисление корня квадратного из комплексного числа #13
B@R_LOG, спасибо за данное решение, по проверке и правда похоже на правду, но данная задача находится до раздела "циклы". Данные которые получаются у меня и supernatural при одинаковых введенных значениях х и у не сходятся.
Psilon
Master of Orion
Эксперт .NET
5851 / 4748 / 628
Регистрация: 10.07.2011
Сообщений: 14,298
Записей в блоге: 5
Завершенные тесты: 4
17.07.2014, 23:47     Вычисление корня квадратного из комплексного числа #14
Senarist, какая разница, до параграфа "циклы" или после. ВО-первых это не rocket science, а во-вторых они тут просто для примера. Можно просто 2 строчки написать. Хотя 2 строчки и я бы не стал писать в циклы...
S_el
2092 / 1599 / 306
Регистрация: 15.12.2013
Сообщений: 6,420
18.07.2014, 08:02     Вычисление корня квадратного из комплексного числа #15
Senarist, я разве написал,что вы неправильно используете тригонометрическое представление?Только про неверное нахождение корня.

B@R_LOG, в 13 строчке надо аргументы поменять местами:
C++
1
phi = atan2(y, x);
Все-таки за x обычно принимают действительную часть,а y - мнимой.
zss
Модератор
Эксперт С++
6287 / 5890 / 1910
Регистрация: 18.12.2011
Сообщений: 15,123
Завершенные тесты: 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; // вывод экспоненциального представления
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/
Миниатюры
Вычисление корня квадратного из комплексного числа  
Ilot
18.07.2014, 12:24
  #18

Не по теме:

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

CheshireCat
18.07.2014, 13:05
  #19

Не по теме:

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

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.07.2014, 14:03     Вычисление корня квадратного из комплексного числа
Еще ссылки по теме:
C++ Разработать алгоритм вычисления корня n-ой степени из комплексного числа
Многопоточность (вычисление корня квадратного уравнения, используя несколько независимых потоков) C++
C++ алгоритм для вычисления квадратного корня x из вещественного числа y.
Составить программу извлечения точного квадратного корня из n-разрядного числа (n > 40) C++
Вычисление по двум введенным вещественным числам коэффициентов приведенного квадратного уравнения, корнями которого являются эти числа C++

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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор 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)
Миниатюры
Вычисление корня квадратного из комплексного числа  
Yandex
Объявления
18.07.2014, 14:03     Вычисление корня квадратного из комплексного числа
Ответ Создать тему
Опции темы

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