C/C++ - Работа с комплексными числами.

Ответить
Аватара пользователя
котвася

C/C++ - Работа с комплексными числами.

Сообщение котвася »

не получается заполнить массив комплексными числами значений амплитуды в i-тые моменты времени. подскажите или натолкните на МЫСЛЮИзображение !

Код: Выделить всё

//---------------------------------------------------------
#include <iostream>
#include <math.h>
#include <complex>
//---------------------------------------------------------
int main()
{
	setlocale(LC_ALL,"rus");
	std::cout<<"Введите значения углов в радианах: "<<std::endl;
	double tetaOne, tetaTwo, frequencyOne, frequencyTwo;
	double pi;
	pi=3,1415926535897932384;
	std::complex <double> j(0,1);
	std::cin>>tetaOne>>tetaTwo;
	frequencyOne=sin(tetaOne);
	frequencyTwo=sin(tetaTwo);
	std::complex <double> U1[10],U2[10];
	for(int i=0; i<=9; i++)
	{
		U1[i]=exp(j*pi*i*frequencyOne);
		U2[i]=exp(j*pi*i*frequencyTwo);
	}
	system("pause");
	return 0;
}
Аватара пользователя
ganselo

Re: C/C++ - Работа с комплексными числами.

Сообщение ganselo »

что то в этом роде:



Код:

Код: Выделить всё

U1[i].real = ...;
U1[i].image = ...;
U2[i].real = ...;
U2[i].image = ...;
Аватара пользователя
котвася

Re: C/C++ - Работа с комплексными числами.

Сообщение котвася »

не работает:



Код:

Код: Выделить всё

 
for(int i=0; i



Код:

Код: Выделить всё

Компиляция...
adapt.cpp
.\adapt.cpp(23) : error C2664: double std::_Complex_base::imag(const _Ty &): невозможно преобразовать параметр 1 из 'std::complex' в 'const double &'
        with
        [
            _Ty=double,
            _Valbase=std::_Dcomplex_value
        ]
        Причина: невозможно преобразовать 'std::complex' в 'const double'
        Для выполнения данного преобразования нет доступного оператора преобразования, определенного пользователем, или вызов оператора невозможен
.\adapt.cpp(24) : error C2664: double std::_Complex_base::real(const _Ty &): невозможно преобразовать параметр 1 из 'std::complex' в 'const double &'
        with
        [
            _Ty=double,
            _Valbase=std::_Dcomplex_value
        ]
        Причина: невозможно преобразовать 'std::complex' в 'const double'
        Для выполнения данного преобразования нет доступного оператора преобразования, определенного пользователем, или вызов оператора невозможен
Аватара пользователя
ganselo

Re: C/C++ - Работа с комплексными числами.

Сообщение ganselo »

Код:

Код: Выделить всё

for(int i=0; i

В math.h есть макрос M_PI. Проще использовать его, чем писать:



Код:

Код: Выделить всё

pi=3,1415926535897932384;
Аватара пользователя
pva

Re: C/C++ - Работа с комплексными числами.

Сообщение pva »

у комплекса нет конструктора, который строит его из double.

вот так у меня собралось:

Код: Выделить всё

//---------------------------------------------------------
#include <iostream>
#include <math.h>
#include <complex>
using std::complex;
using std::cout;
using std::cin;
//---------------------------------------------------------
int main()
{
//	setlocale(LC_ALL,"rus");
	cout<<"Введите значения углов в радианах: "<<std::endl;
	double tetaOne, tetaTwo, frequencyOne, frequencyTwo;
	double pi;
	pi=31415926535897932384;
	complex <double> j(0,1);
	cin>>tetaOne>>tetaTwo;
	frequencyOne=sin(tetaOne);
	frequencyTwo=sin(tetaTwo);
	complex <double> U1[10],U2[10];
	for(int i=0; i<=9; i++)
	{
		U1[i]=exp(j*complex<double>(pi*i*frequencyOne, 0.));
		U2[i]=exp(j*complex<double>(pi*i*frequencyTwo, 0.));
              // хотя тут, я понимаю, правильней было бы:
		// U1[i]=exp(complex<double>(0, pi*i*frequencyOne));
		// U2[i]=exp(complex<double>(0, pi*i*frequencyTwo));
	}
//	system("pause");
	return 0;
}
Аватара пользователя
котвася

Re: C/C++ - Работа с комплексными числами.

Сообщение котвася »

ganselo скомилировалось, но надо еще будет проверить правильность работы.



напислал для проверки код:



Код:

Код: Выделить всё

//---------------------------------------------------------
#include <iostream>
#include <math.h>
#include <complex>
//---------------------------------------------------------
int main()
{
	setlocale(LC_ALL,"rus");
	std::cout<<"Введите значения углов в радианах: "<<std::endl;
	double tetaOne, tetaTwo, frequencyOne, frequencyTwo;
	double pi;
	pi=3,1415926535897932384;
	std::complex <double> j(0,1);
	std::cin>>tetaOne>>tetaTwo;
	frequencyOne=sin(tetaOne);
	frequencyTwo=sin(tetaTwo);
	std::complex <double> U1[10],U2[10];
	double U3[10];
	for(int i=0; i<=9; i++)
	{
		U1[i].imag(exp(j.imag()*pi*frequencyOne));
		U2[i].real(exp(j.real()*pi*frequencyOne));
	}
	for(int i=0; i<=9;i++)
	{
		U3[i]=sqrt(U1[i].imag()*U1[i].imag()+U2[i].real()*U2[i].real());
		std::cout<<U3[i]<<"\n";
	}
	system("pause");
	return 0;
}

написано исходя из abs=sqrt(real^2+imag^2)

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



ааааа все сам понял, просто затупилИзображение)
Аватара пользователя
котвася

Re: C/C++ - Работа с комплексными числами.

Сообщение котвася »

кто знает есть ли хэд для работы с матрицами?
Аватара пользователя
котвася

Re: C/C++ - Работа с комплексными числами.

Сообщение котвася »

в похожих темах нет нечего полнзного.
Ответить

Вернуться в «Программирование и базы данных»