Форум: "Начинающим";
Текущий архив: 2010.08.27;
Скачать: [xml.tar.bz2];
ВнизОшибка деления на ноль, комплексные функции Найти похожие ветки
← →
Эренка © (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;
Скачать: [xml.tar.bz2];
Память: 0.48 MB
Время: 0.066 c