Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.63/41: Рейтинг темы: голосов - 41, средняя оценка - 4.63
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 905
1

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

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

Author24 — интернет-сервис помощи студентам
Написать программу для вычисления корня квадратного из комплексного числа z=x+iy. Такая операция на множестве комплексных чисел, как известно, имеет два решения z1=https://www.cyberforum.ru/cgi-bin/latex.cgi?sqrt(|z|)exp(i\varphi/2) и https://www.cyberforum.ru/cgi-bin/latex.cgi?sqrt(|z|)exp(i\varphi/2+ipi), где |z|=https://www.cyberforum.ru/cgi-bin/latex.cgi?sqrt(x^2+y^2) есть модуль комплексного числа z, а https://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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.07.2014, 21:09
Ответы с готовыми решениями:

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

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

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

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

37
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32835 / 21172 / 8148
Регистрация: 22.10.2011
Сообщений: 36,432
Записей в блоге: 8
17.07.2014, 21:41 2
Цитата Сообщение от Senarist Посмотреть сообщение
Где мой косяк?
Начинается с того, что переменным z1 и z2 никогда и ничего не присваивается, они как были нулями, так и остались. Соответственно, и результат умножения - ноль...
0
Эксперт PHP
3106 / 2591 / 1219
Регистрация: 14.05.2014
Сообщений: 7,236
Записей в блоге: 1
17.07.2014, 21:47 3
Цитата Сообщение от UI Посмотреть сообщение
z1 и z2 никогда и ничего не присваивается, они как были нулями
Ну почему ж нулями - мусором всяким.
0
619 / 218 / 51
Регистрация: 22.11.2010
Сообщений: 1,781
Записей в блоге: 3
17.07.2014, 21:54 4
все выводится, никаких нулей. Единственное, что смущает 2 строка:
C++
1
2
    cout<<"X1=   "<<X1<<"Y1=   "<<Y1<<endl;
    cout<<"X2=   "<<X1<<"Y2=   "<<Y1<<endl;
там x2 и y2 не должно выводиться?
0
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 905
17.07.2014, 21:56  [ТС] 5
понял! спасибо, буду исправлять

Добавлено через 1 минуту
Supernatural что у Вас выводится?
0
619 / 218 / 51
Регистрация: 22.11.2010
Сообщений: 1,781
Записей в блоге: 3
17.07.2014, 22:00 6
ничего не менял
в окне сообщений, как и говорил, переменным x2 y2 ты присваиваешь значения, но не выводишь
Миниатюры
Вычисление корня квадратного из комплексного числа  
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
17.07.2014, 22:03 7
Кроме этого вы и корень вычисляете неверно.
Посмотрите на формулу для корня комплексного числа внимательнее,раз ищите в тригонометрической форме
0
18 / 18 / 5
Регистрация: 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;
}
0
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 905
17.07.2014, 23:04  [ТС] 9
B@R_LOG цикл использовать нельзя
0
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 905
17.07.2014, 23:15  [ТС] 10
S_el, материал из вики
Я вроде как так и делал
Миниатюры
Вычисление корня квадратного из комплексного числа  
0
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 905
17.07.2014, 23:20  [ТС] 11
Supernatural да в 21 строке просто опечатка.
0
18 / 18 / 5
Регистрация: 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"й степени реализовывать.
По проверке на примерах вроде сходится.
Миниатюры
Вычисление корня квадратного из комплексного числа  
0
58 / 62 / 34
Регистрация: 14.03.2014
Сообщений: 905
17.07.2014, 23:44  [ТС] 13
B@R_LOG, спасибо за данное решение, по проверке и правда похоже на правду, но данная задача находится до раздела "циклы". Данные которые получаются у меня и supernatural при одинаковых введенных значениях х и у не сходятся.
0
Master of Orion
Эксперт .NET
6098 / 4954 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
17.07.2014, 23:47 14
Senarist, какая разница, до параграфа "циклы" или после. ВО-первых это не rocket science, а во-вторых они тут просто для примера. Можно просто 2 строчки написать. Хотя 2 строчки и я бы не стал писать в циклы...
0
2443 / 1841 / 406
Регистрация: 15.12.2013
Сообщений: 8,238
18.07.2014, 08:02 15
Senarist, я разве написал,что вы неправильно используете тригонометрическое представление?Только про неверное нахождение корня.

B@R_LOG, в 13 строчке надо аргументы поменять местами:
C++
1
phi = atan2(y, x);
Все-таки за x обычно принимают действительную часть,а y - мнимой.
0
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,718
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
18 / 18 / 5
Регистрация: 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
18.07.2014, 14:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.07.2014, 14:03
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru