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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2010, 14:15   #1
Brabus
Пользователь
 
Регистрация: 25.09.2009
Сообщений: 81
По умолчанию sinh в комплексных числах

Вообщем мне нужно найти sinh от некоторого выражения, но написать функцию, которая бы мне его находила никак не получается
Вот мой модуль с функциями
Код:
unit UComplex;

interface

uses SysUtils;

type
  TComplex = record
    re, im: Real;
  end;

  procedure C_Init  (var z : TComplex; a, b : real);
  procedure C_Input (var z : TComplex);
  procedure C_Print (z : TComplex);
  function  C_Add (z1, z2 : TComplex) : TComplex;
  function  C_Sub (z1, z2 : TComplex) : TComplex;
  function  C_Mult (z1, z2 : TComplex) : TComplex;
  function  C_DivByNumber (z1 : TComplex; a: real) : TComplex;
  function  C_Abs (z : TComplex) : real;
  function  C_Sin (z : TComplex; Eps : real) : TComplex;
  function  ComplexToStr (z : TComplex) : string;



implementation

procedure C_Init  (var z : TComplex; a, b: Real);
begin
  z.re:=a;
  z.im:=b;
end;

procedure C_Input (var z : TComplex);
begin
  writeln('Введите вещественную часть');
  readln(z.re);
  writeln('Введите мнимую часть');
  readln(z.im)
end;

procedure C_Print (z : TComplex);
begin
  writeln(z.re:2:2,'+', z.im:2:2,'*i');
end;

function  ComplexToStr (z : TComplex): String;
begin
  Result:=FormatFloat ('0.00', z.re)+'+'+FormatFloat('0.00', z.im)+'*i'
end;


function  C_Add (z1, z2 : TComplex): TComplex;
begin
  with Result do
    begin
      Re:=z1.re+z2.re;
      Im:=z1.im+z2.im;
    end;
end;

function  C_Sub (z1, z2 : TComplex): TComplex;
begin
  with Result do
    begin
      Re:=z1.re-z2.re;
      Im:=z1.im-z2.im;
    end;
end;

function  C_Mult (z1, z2 : TComplex): TComplex;
begin
  with Result do
    begin
      Re:=z1.re*z2.re-z1.im*z2.im;
      Im:=z1.re*z2.im+z1.im*z2.re;
    end;
end;

function  C_DivByNumber (z1 : TComplex; a: real): TComplex;
begin
  with Result do
    begin
      Re:=z1.re/a;
      Im:=z1.im/a;
    end;
end;

function  C_Abs (z : TComplex): Real;
begin
  Result:=sqrt(sqr(z.re)+sqr(z.im))
end;

function  C_Sin (z : TComplex; Eps : real): TComplex;
var
  Sum, a, z_2: TComplex;
  i: Integer;
begin
  z_2:=C_Mult(z,z);
  C_Init(Sum, 0, 0);
  a:=z;
  i:=0;
  while C_Abs(a)>Eps do
    begin
      Sum:=C_Add(Sum, a);     // Sum:=Sum+a
      i:=i+1;
      a:=C_Mult(a, z_2);      // a:=a*sqr(x)
      a:=C_DivByNumber(a, (-1)*2*i*(2*i+1));
    end;
  Result:=Sum;
end;

end.
Писал его не сам,подумываю о том как получить из C_Sin - C_SinH. Но что то никак не получается... Помогите пожалуйста
Brabus вне форума Ответить с цитированием
Старый 23.01.2010, 15:38   #2
Brabus
Пользователь
 
Регистрация: 25.09.2009
Сообщений: 81
По умолчанию

Подскажите пожалуйста в чём здесь ошибка
Код:
function C_Exp (z : TComplex): Real;
begin
  Result:=Exp(z.re)+z.im;
end;

function  C_SinH (z : TComplex; Eps : real): TComplex;
begin
  Result:=C_Exp(z)-C_Exp(-z);
end;
Ошибка: Operator not applicable to this operand type

Последний раз редактировалось Brabus; 23.01.2010 в 15:41.
Brabus вне форума Ответить с цитированием
Старый 23.01.2010, 17:11   #3
val_nnm
Форумчанин
 
Регистрация: 18.10.2009
Сообщений: 185
По умолчанию

не получается у тебя по тому что у тебя не определенны опирации для знака "-" (помоему в паскале их вообще невозможно определить для своего типа). И вообще ты както нетак считаеш.

sh(z) = ((e^z)-(e^-z))/2

e^z = e^z.re * (cos(z.im)+i*sin(z.im))

поэтому у тебя должно быть примерно так

Код:
function C_Exp (z : TComplex): TComplex;
begin
  Result.re := Exp(z.re)*cos(z.im);
  Result.im := Exp(z.re)*sin(z.im);
end;

function  C_SinH (z : TComplex; Eps : real): TComplex;
begin
  Result := C_DivByNumber (C_Sub(C_Exp(z),C_Exp(C_DivByNumber(z,-1))), 2);
end;
p.s. писал без проверки. Если где ошибки поправь сам.
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает."

Последний раз редактировалось val_nnm; 23.01.2010 в 17:14.
val_nnm вне форума Ответить с цитированием
Старый 23.01.2010, 17:21   #4
Brabus
Пользователь
 
Регистрация: 25.09.2009
Сообщений: 81
По умолчанию

val_nnm, исправил на запятую
Код:
 Result := C_DivByNumber (C_Exp(z)-C_Exp(C_DivByNumber(z,-1))) , 2);
но почему то не работает пишет Operator not applicable to this operand type на строчке
Код:
Result := C_DivByNumber (C_Exp(z)-C_Exp(C_DivByNumber(z,-1))) , 2);
Brabus вне форума Ответить с цитированием
Старый 23.01.2010, 17:22   #5
val_nnm
Форумчанин
 
Регистрация: 18.10.2009
Сообщений: 185
По умолчанию

загляни в отредактированныйвариент

и ещё кстати можеш викинуть Eps : real (забыл убрать)
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает."
val_nnm вне форума Ответить с цитированием
Старый 23.01.2010, 17:28   #6
Brabus
Пользователь
 
Регистрация: 25.09.2009
Сообщений: 81
По умолчанию

Спасибо большое-большое всё работает
Brabus вне форума Ответить с цитированием
Старый 23.01.2010, 17:38   #7
Brabus
Пользователь
 
Регистрация: 25.09.2009
Сообщений: 81
По умолчанию

а подскажите еще пожалуйста как этот C_SinH расчитать с точностью Eps
Brabus вне форума Ответить с цитированием
Старый 23.01.2010, 17:50   #8
val_nnm
Форумчанин
 
Регистрация: 18.10.2009
Сообщений: 185
По умолчанию

А тебе нужно именно с точьностью?
Можно конечно в ряд разложить

Код:
function  C_SinH (z : TComplex; Eps : real): TComplex;
var
  Sum, a, z_2: TComplex;
  i: Integer;
begin
  z_2:=C_Mult(z,z);
  C_Init(Sum, 0, 0);
  a:=z;
  i:=0;
  while C_Abs(a)>Eps do
    begin
      Sum:=C_Add(Sum, a);     // Sum:=Sum+a
      i:=i+1;
      a:=C_Mult(a, z_2);      // a:=a*sqr(x)
      a:=C_DivByNumber(a, 2*i*(2*i+1));
    end;
  Result:=Sum;
end;
тоже перепроверь.

но имхо первый вариант лучше потомучто точнее.
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает."
val_nnm вне форума Ответить с цитированием
Старый 23.01.2010, 18:27   #9
Brabus
Пользователь
 
Регистрация: 25.09.2009
Сообщений: 81
По умолчанию

точнее, но у меня такая задача расчитать с точностью eps спасибо большое
Brabus вне форума Ответить с цитированием
Старый 23.01.2010, 18:34   #10
QuadroX
323787261
Пользователь
 
Аватар для QuadroX
 
Регистрация: 19.12.2008
Сообщений: 49
По умолчанию

Уже есть готовая программа вычисления SinH комплексного числа с точностью Eps. За 100р предоставлю исходники. Все оформлено с твоими функциями. Могу пояснить как работает и добавить комментарии.
Вложения
Тип файла: rar Task8v1Project.rar (171.4 Кб, 11 просмотров)
ICQ: 323787261
Email: pschegolevatykh@gmail.com
QuadroX вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
МАКРОС_ДОБАВЛЕНИЕ В ЧИСЛАХ НУЛЕЙ, ПОСЛЕ ЗАПЯТОЙ Окоча Юра Microsoft Office Word 4 04.02.2010 12:43
Pascal.Умножние комплексных чисел.Рекурсия starlet Помощь студентам 9 19.04.2009 18:36
Дата в числах Titan123 Общие вопросы Delphi 6 25.12.2008 13:22
Как убрать пробелы в числах!! vavany22 Microsoft Office Excel 27 11.11.2008 11:23