Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2010.08.27;
Скачать: CL | DM;

Вниз

Ошибка деления на ноль, комплексные функции   Найти похожие ветки 

 
Эренка ©   (2010-04-22 11:36) [0]

Здравствуйте, так вышло, что для диплома пишу программу на Delphi, но его не понимаю,
процедура:
s:=0.5; Ta:=1000; n2=100;
Код:
[CODE]
procedure calc_v0;
 var
   a,b,c,lam,i,a1,a2,a3:variant;
   j:integer;
 begin
 a:=VarComplexCreate;
 a1:=VarComplexCreate;
 a2:=VarComplexCreate;
 a3:=VarComplexCreate;
 b:=VarComplexCreate;
 c:=VarComplexCreate;
 i:=VarComplexCreate;
 i.Imaginary:=1;
 i.real:=0;
 lam:=VarComplexCreate;
 lam:=sqrt(sqrt(0.25*Ta))*(1+i);
 for j:=0 to n2 do
   begin
     a1:={Sech(2*lam)*(}lam*lam+2*exp(s*(1+j*dz))*s*lam*lam+exp(2*s)*(s*s-lam*lam){)*cosh(2*lam)};
     a2:=2*((1+2*s)*lam*lam+exp(2*s)*(s*s-lam*lam))*Cosh(lam-j*dz*lam)/(exp(2*lam)+exp(-2*lam));
     a3:=Sech(2*lam)*s*((exp(2*s)*s*cosh((1+j*dz)*lam)-(exp(s*(1+j*dz))-1)*lam*sinh(2*lam)-
        exp(2*s)*s*(1+2*lam*sinh((1+j*dz)*lam))));
     a:=(a1+a2+a3)/s/s;
      b:=a/lam/(s*s-lam*lam);
      c:=b/(2*lam-tanh(2*lam));
     u0[j]:=c.real;
     v0[j]:=c.imaginary;
   end; [/CODE]
Уже и разбила выражение на кусочки. Ругается на строке с a2: Project Project1.exe raised exception class EZeroDivide with message "Division by zero". Process stoped.
На строке с а1 тоже ругался, пока не убрала часть выражения в скобки {} (сокращается).
Почитала, что дело может быть в переполнении, но что делать с этим..


 
12 ©   (2010-04-22 11:38) [1]

http://translate.google.ru/#en|ru|Project%20Project1.exe%20raised%20exception%20class%20EZeroDivide%20with%20message%20%27Division%20by%20zero%27.%20Process%20stoped.


 
12 ©   (2010-04-22 11:41) [2]

ноль в знаменателе


> для диплома пишу программу на Delphi, но его не понимаю,
>  

кого, диплом или D?
или обоих? :)


 
Эренка ©   (2010-04-22 11:47) [3]

перевести я могу. как ноль? (exp(2*lam)+exp(-2*lam)) - не ноль же?
> кого, диплом или D? или обоих? :)

обоих не понимаю, защититься бы и забыть.


 
12 ©   (2010-04-22 12:05) [4]

не факт, что не 0..
отладчик что кажет?

с комплексными не работал типами..
вот написано
i:=VarComplexCreate;
i.Imaginary:=1;
i.real:=0;
это понятно

lam:=VarComplexCreate;
lam:=sqrt(sqrt(0.25*Ta))*(1+i);
это не понятно
ожидается наверное lam.Imaginary, lam.real ..


 
Плохиш ©   (2010-04-22 12:43) [5]

Интересно, это спорт такой у поколенияидиотикус высшии образования коллекционировать?


 
Игорь Шевченко ©   (2010-04-22 12:52) [6]


> защититься бы и забыть.


ну и защищайся и забывай, мы-то тут причем ?


 
Эренка ©   (2010-04-22 12:53) [7]


> ожидается наверное lam.Imaginary, lam.real ..
не думаю что так, но на всякий случай попробовала-не помогло.

> Плохиш ©   (22.04.10 12:43) [5]
> Интересно, это спорт такой у поколенияидиотикус высшии образования
> коллекционировать?
я учусь. а Ваше сообщение не решает мою проблему и не сделает меня умнее, следовательно зачем оно здесь? может есть что по существу?


 
Игорь Шевченко ©   (2010-04-22 12:54) [8]

Эренка ©   (22.04.10 12:53) [7]


> я учусь


Чему ? Защищаться и забывать или клянчить на форумах ?


 
И. Павел ©   (2010-04-22 13:03) [9]

> Уже и разбила выражение на кусочки.

Плохо разбирали. Разберите на самые маленькие части и выведите их в memo (раз отладчиком пользоваться не умеете). А потом вручную соедините эти части и посмотрите - где делится на ноль.


 
12 ©   (2010-04-22 13:53) [10]


> > ожидается наверное lam.Imaginary, lam.real ..
> не думаю что так, но на всякий случай попробовала-не помогло.

не надо думать, надо знать
lam - что такое? это комплексное число или как? Что про него в дипломе сказано?


 
Эренка ©   (2010-04-22 14:09) [11]


> lam - что такое? это комплексное число или как? Что про
> него в дипломе сказано?

вот же оно: lam:=sqrt(sqrt(0.25*Ta))*(1+i); - комплексное.
разобрала по кусочкам, пошла по шагам.. один раз цикл выполняется, при j=0. далее, j=1, идет ошибка, строка: a211:=lam*lam*Cosh(lam-j*dz*lam)*sech(2*lam);


 
12 ©   (2010-04-22 14:19) [12]


> Cosh(lam-j*dz*lam)*sech(2*lam)

а чему равен sin и cos
lam-j*dz*lam
2*lam
?


 
Эренка ©   (2010-04-22 14:28) [13]

они равны Inaccessible value :-(


 
12 ©   (2010-04-22 14:39) [14]

dz - кто такой, где определен?

зы
Cosh = sin/cos или наоборот, не важно. Видимо кто-то из них = 0.
из-за своего аргумента, ес-но


 
Эренка ©   (2010-04-22 14:48) [15]

dz=1/n2=0.01 - это шаг

> Cosh = sin/cos
Cosh(X) - это гиперболический косинус, (exp(x)+exp(-x))/2, как видите - не ноль.
и тут  экспоненте передают комплексный аргумент, может тут что то не так


 
Омлет ©   (2010-04-22 14:56) [16]

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


 
Эренка ©   (2010-04-22 16:01) [17]

Проблема решается сносом Delphi 6 и установкой Delphi 7, может как-то и по другому, всем спасибо :-)


 
Эренка ©   (2010-04-22 16:01) [18]

Проблема решается сносом Delphi 6 и установкой Delphi 7, может как-то и по другому, всем спасибо :-)



Страницы: 1 вся ветка

Текущий архив: 2010.08.27;
Скачать: CL | DM;

Наверх




Память: 0.51 MB
Время: 0.048 c
15-1274781377
boriskb
2010-05-25 13:56
2010.08.27
В игрушку с таким интерфейсом даже я поиграл бы


2-1270520076
Delphist2
2010-04-06 06:14
2010.08.27
как отменить выполнение обработчика?


2-1272191721
koshkin
2010-04-25 14:35
2010.08.27
Как указать путь к модулю


15-1273571571
AK-47
2010-05-11 13:52
2010.08.27
Сопоставление текста и отсканированного текста


4-1235583465
Wiktop
2009-02-25 20:37
2010.08.27
Журнал Windows