Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 22.06.2010, 20:29   #1
artem2011
 
Регистрация: 15.06.2010
Сообщений: 8
Восклицание нужна экспонена

Даны комплексное число Z (пара вещественных чисел) и вещественное
число е>0. Вычислить с точностью до е значение следующей
комплексной функции:
exp(z*z);

From artemavd: еще раз создашь тему-клон - получишь в лоб из баномета!

Последний раз редактировалось artemavd; 23.06.2010 в 02:21.
artem2011 вне форума Ответить с цитированием
Старый 22.06.2010, 20:34   #2
ex.cluz
Участник клуба
 
Аватар для ex.cluz
 
Регистрация: 15.01.2010
Сообщений: 1,325
По умолчанию

Почему две темы с одинаковым содержанием создали?

По теме:
А где ваши наработки?
Грибы - они разные. Один тебя накормит, другой тебе кино покажет...
Редактор журнала "
[ПРОграммист]"
Yan's Home Digital Lab
ex.cluz вне форума Ответить с цитированием
Старый 22.06.2010, 23:21   #3
Скарам
Дружите с Linq ;)
Форумчанин
 
Аватар для Скарам
 
Регистрация: 15.10.2008
Сообщений: 822
По умолчанию

ну думаю,что тут необходимо представить как ряд(этот ряд есть в любом учебнике по матану). Ну и считать этот ряд,пока модуль разности н-го и н+1-го члена не будет меньше заданной точности. Далее разговор можно вести,когда будут наработки.
Не давай организму поблажки, каждый день тренируй его в шашки..
Скарам вне форума Ответить с цитированием
Старый 23.06.2010, 04:31   #4
capta1n
Форумчанин
 
Аватар для capta1n
 
Регистрация: 06.12.2008
Сообщений: 613
По умолчанию

Код:
#include <cstdio>
#include <cmath>
#include <conio.h>

//

const long double eps=0.001;		//точность	
const long double xc=-0.005;		//вещественная часть числа
const long double yc=1.5;			//мнимая часть числа

//

class complex{
private:
	long double Re;					//вещественная часть комплексного числа
	long double Im;					//мнимая часть комплексного числа
public:
	complex(long double re=0, long double im=0);	//конструктор

	complex operator-(complex z);	//переопределенная операция вычитания для комплексных чисел
	void operator=(complex z);			//операция присвоения

	void InitReIm(long double re, long double im);	//инициализация полей комплексного числа
	long double RetRe();	//возвращение вещественной части числа
	long double RetIm();	//возвращение мнимой части числа
	long double Module();	//модуль комплексного числа
};

complex::complex(long double re /*=0*/, long double im /*=0*/){
	Re=re;
	Im=im;
}

complex complex::operator-(complex z){
	return (complex( (this->RetRe()-z.RetRe()), (this->RetIm()-z.RetIm()) ) );	//по правилу вычитания комплексных чисел
}

void complex::operator=(complex z){
	this->InitReIm(z.RetRe(),z.RetIm());	//по правилу приравнивания комплексных чисел
	return;
}

void complex::InitReIm(long double re, long double im){
	Re=re;
	Im=im;
	return;
}

long double complex::RetRe(){
	return Re;
}

long double complex::RetIm(){
	return Im;
}

long double complex::Module(){
	return ( sqrt(Re*Re+Im*Im) );  // по правилу взятия модуля от комплексного числа как модуль вектора
}

//-------------------------//

//вычисление факториала
unsigned long int fact(short n){
	if (n==1 || n==0){
		return 1;
	}
	else
	{
		return (n*fact(n-1));	//рекурсионный подход
	}
	return 0;
}

void main(){
	complex z(xc,yc);	//объявление комплексного числа
	
	complex expzz[2];	//две экспоненты для цикла
	complex expres;	//результат вычитания экспонент
	long double x=z.RetRe();	//возвращаем поля числа
	long double y=z.RetIm();

	//выводим на экран число Z
	printf ("Re(z)=%3.3f\tIm(z)=%3.3f\n", x, y);
	printf ("z=%3.3f", x);
	if (y<0)
	{
		printf ("-i*%3.3f", abs(y) );
	}
	else
	{
		printf ("+i*%3.5f", y );
	}
	printf ("\n\n");

	//работаем с первыми членами рядов для exp, для sin и для cos
	//здесь я использовал правила преобразования функции exp(z*z) в стандартную запись комплексного числа
	//по правилам преобразования комплексной экспоненты
	//получено, что ReEXP(Z*Z)=(exp(x*x)/exp(y*y))*cos(2*x*y) - вещественная часть
	//получено, что ImEXP(Z*Z)=(exp(x*x)/exp(y*y))*sin(2*x*y) - мнимая часть ( перед ней стоит мнимая единица "i" )
	long double _exp=1;	//первый член ряда для вещ. экспоненты
	long double _cos=1;	//первый член ряда для вещ. косинуса
	long double _sin=2*x*y;  //первый член ряда для вещ. синуса
	expzz[0].InitReIm( (_exp*_cos), (_exp*_sin) );
	expzz[1]=expzz[0];
	short k(0);	//шаги
	long double expx(1),expy(1); //это для exp(x*x) и exp(y*y)
	//в цикле работаем с последующими слагаемыми рядов для экспоненты, синуса и косинуса
	do{
		k++;
		expzz[0]=expzz[1];
		expx+=pow(pow(x,2),k)/fact(k);	//вычисление след. слагаемого
		expy+=pow(pow(y,2),k)/fact(k);	//вычисление след. слагаемого
		_exp=expx/expy;
		if (k%2==0)	//в ряде в зависимости от шага, тригонометрические функции sin и cos меняют знак, поэтому смотрим
		{
			_cos+=pow(2*x*y,2*k)/fact(2*k);
			_sin+=pow(2*x*y,2*k+1)/fact(2*k+1);
		}
		else
		{
			_cos-=pow(2*x*y,2*k)/fact(2*k);
			_sin-=pow(2*x*y,2*k+1)/fact(2*k+1);
		}
		expzz[1].InitReIm( (_exp*_cos), (_exp*_sin) );
		expres=expzz[1]-expzz[0]; //берем комплексное число невязки
		printf ("EPS[%d]=%3.5f\n", k, expres.Module());	//смотрим его норму ( модуль )
	}while(expres.Module()>eps); //норма превышает эпсилон? если да - новый цикл, если нет - комплексная функция рассчитана с точностью до eps
	//выводим ее
	printf ("\n");
	printf ("Results::\n");
	printf ("ReEXP(z*z)=%3.5f\tImEXP(z*z)=%3.5f\n", expzz[1].RetRe(), expzz[1].RetIm());
	printf ("EXP(z*z)=%3.5f", expzz[1].RetRe());
	if (expzz[1].RetIm()<0)
	{
		printf ("-i*%3.5f", abs(expzz[1].RetIm()));
	}
	else
	{
		printf ("+i*%3.5f", expzz[1].RetIm());
	}
	printf ("\n");
	_getch();
	return;
}
что-то я тут намудрил, и все иногда к черту расходится, я еще подумаю почему
скорее дело не в программировании, а в матанализе)

Последний раз редактировалось capta1n; 23.06.2010 в 04:45.
capta1n вне форума Ответить с цитированием
Старый 23.06.2010, 19:06   #5
artem2011
 
Регистрация: 15.06.2010
Сообщений: 8
По умолчанию

Ребята вот эта программа, но ОНА ПОЧЕМУ ТО НЕ РАБОТАЕТ, дополните её

program Project12of13;

{$APPTYPE CONSOLE}

uses
SysUtils;

type Complex = record a,b:real;
end;
var z1, z2:Complex;

function cf(c:Complex):complex;
begin
c.a:=exp ((z1*z2).a);
c.b:=exp ((z1*z2).b);
writeln(c.a,' + ',c.b);
end;
begin
writeln('Enter complex');
with (z1*z2) do begin
write('a= ');
readln(a);
write('b= ');
readln(b);
end;
cf(z1*z2);
readln;
end.
artem2011 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Очень нужна помощь c матрицами, макросами в Excel. Заранее благодарен(поверьте, очень-очень нужна помощь) Farridjan Помощь студентам 1 03.07.2009 12:24
Нужна помощь!!!! Bauyrzhan Паскаль, Turbo Pascal, PascalABC.NET 1 30.05.2009 08:29
Нужна электроника Zahib Свободное общение 0 04.09.2008 18:14