Работа с комплексными числами.
не получается заполнить массив комплексными числами значений амплитуды в 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;
}
|
что то в этом роде:
Код:
U1[i].real = ...;
U1[i].image = ...;
U2[i].real = ...;
U2[i].image = ...;
|
не работает:
Код:
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'
Для выполнения данного преобразования нет доступного оператора преобразования, определенного пользователем, или вызов оператора невозможен
|
Код:
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;
|
у комплекса нет конструктора, который строит его из 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
|
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)
выдает массив, где все значения одинаковы. В чем причина?
ааааа все сам понял, просто затупил:))
|
кто знает есть ли хэд для работы с матрицами?
|
в похожих темах нет нечего полнзного.
|
Время: 12:48.
© OSzone.net 2001-