Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Работа с комплексными числами.

Ответить
Настройки темы
C/C++ - Работа с комплексными числами.

Аватара для котвася

Пользователь


Сообщения: 147
Благодарности: 5

Профиль | Отправить PM | Цитировать


Изменения
Автор: котвася
Дата: 07-06-2010
не получается заполнить массив комплексными числами значений амплитуды в 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;
}

Отправлено: 23:07, 06-06-2010

 

Аватара для ganselo

Старожил


Сообщения: 232
Благодарности: 90

Профиль | Сайт | Отправить PM | Цитировать


что то в этом роде:
Код: Выделить весь код
U1[i].real = ...;
U1[i].image = ...;
U2[i].real = ...;
U2[i].image = ...;

-------
К величайшему сожалению "история учит нас тому, что она ничему не учит".


Последний раз редактировалось ganselo, 07-06-2010 в 15:51.


Отправлено: 11:53, 07-06-2010 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для котвася

Пользователь


Сообщения: 147
Благодарности: 5

Профиль | Отправить PM | Цитировать


Попробуем

Отправлено: 21:24, 08-06-2010 | #3


Аватара для котвася

Пользователь


Сообщения: 147
Благодарности: 5

Профиль | Отправить PM | Цитировать


не работает:
Код: Выделить весь код
 
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'
        Для выполнения данного преобразования нет доступного оператора преобразования, определенного пользователем, или вызов оператора невозможен

Отправлено: 23:02, 09-06-2010 | #4


Аватара для ganselo

Старожил


Сообщения: 232
Благодарности: 90

Профиль | Сайт | Отправить PM | Цитировать


Код: Выделить весь код
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;

-------
К величайшему сожалению "история учит нас тому, что она ничему не учит".

Это сообщение посчитали полезным следующие участники:

Отправлено: 00:34, 10-06-2010 | #5

pva pva вне форума

Аватара для pva

Ветеран


Сообщения: 1180
Благодарности: 279

Профиль | Отправить PM | Цитировать


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

Отправлено: 10:17, 12-06-2010 | #6


Аватара для котвася

Пользователь


Сообщения: 147
Благодарности: 5

Профиль | Отправить PM | Цитировать


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

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

Последний раз редактировалось котвася, 17-06-2010 в 01:26.


Отправлено: 01:13, 17-06-2010 | #7


Аватара для котвася

Пользователь


Сообщения: 147
Благодарности: 5

Профиль | Отправить PM | Цитировать


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

Отправлено: 21:23, 19-06-2010 | #8


Аватара для котвася

Пользователь


Сообщения: 147
Благодарности: 5

Профиль | Отправить PM | Цитировать


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

Отправлено: 23:34, 19-06-2010 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Программирование и базы данных » C/C++ - Работа с комплексными числами.

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Получение массива из строки с числами malev AutoIt 3 11-09-2009 00:08
C/C++ - операции с 12-разрядными числами .::.DIMA.::. Программирование и базы данных 14 17-03-2009 17:50
Работа с файлами ramo Программирование в *nix 5 23-04-2007 12:33
Работа БП Surround Хочу все знать 5 05-03-2006 21:40
Работа ХР с CD LamerOK Microsoft Windows 2000/XP 8 17-04-2004 23:51




 
Переход