Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Программирование и базы данных (http://forum.oszone.net/forumdisplay.php?f=21)
-   -   Работа с комплексными числами. (http://forum.oszone.net/showthread.php?t=177542)

котвася 06-06-2010 23:07 1428952

Работа с комплексными числами.
 
не получается заполнить массив комплексными числами значений амплитуды в 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 1429230

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

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


котвася 08-06-2010 21:24 1430251

Попробуем

котвася 09-06-2010 23:02 1431059

не работает:
Код:


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 1431146

Код:

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 1432651

у комплекса нет конструктора, который строит его из 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 1435733

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 1437605

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

котвася 19-06-2010 23:34 1437651

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


Время: 12:48.

Время: 12:48.
© OSzone.net 2001-