Войти

Показать полную графическую версию : Работа с комплексными числами.


котвася
06-06-2010, 23:07
не получается заполнить массив комплексными числами значений амплитуды в 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
07-06-2010, 11:53
что то в этом роде:

U1[i].real = ...;
U1[i].image = ...;
U2[i].real = ...;
U2[i].image = ...;

котвася
08-06-2010, 21:24
Попробуем

котвася
09-06-2010, 23:02
не работает:

for(int i=0; i<=9; i++)
{
U1[i].imag(exp(j*pi*frequencyOne));
U2[i].real(exp(j*pi*frequencyOne));
}


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

ganselo
10-06-2010, 00:34
for(int i=0; i<=9; i++)
{
U1[i].imag(exp(j.imag()*pi*frequencyOne));
U2[i].real(exp(j.real()*pi*frequencyOne));
}


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

pi=3,1415926535897932384;

pva
12-06-2010, 10:17
у комплекса нет конструктора, который строит его из 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;
}

замечания компилятора:

andrey@pva-hp:~/Документы$ g++ 1.cpp
1.cpp:18:5: warning: integer constant is too large for its type
1.cpp:18: warning: integer constant is too large for ‘long’ type

котвася
17-06-2010, 01:13
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)
выдает массив, где все значения одинаковы. В чем причина?

ааааа все сам понял, просто затупил:))

котвася
19-06-2010, 21:23
кто знает есть ли хэд для работы с матрицами?

котвася
19-06-2010, 23:34
в похожих темах нет нечего полнзного.




© OSzone.net 2001-2012