Модераторы: volvo877, Snowy, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Метод Зейделя для системы нелинейных уравнений, Помогите найти ошибку... 
:(
    Опции темы
norman
Дата 17.4.2006, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 17.4.2006

Репутация: нет
Всего: нет



При запуске выдаёт ошибку "Floating point operation"...хотя, я никаких немыслимых вычисленей здесь не проводил...
Если кто-нить работал с этим методом или чё-нить про него знает, помогите плиз...

Код
program metod_zaidelya;
uses crt;
var
x,y,x0,y0,e:real;

function f1 (x,y:real):real;
begin
f1:=(sin(x+y)/cos(x+y))-sqr(x)+0.1;
end;

function f2 (x,y:real):real;
begin
f2:=0.6*sqr(x)+2*sqr(y)-1;
end;

procedure solve (x0,y0,e:real); {ОШИБКА, КАК МНЕ КАЖЕТСЯ, ВОЗНИКАЕТ ВОТ В ЭТОЙ ПРОЦЕДУРЕ}
var x1,y1:real;
const k1=0.001; k2=-0.001;
begin
repeat
x1:=x0+k1*f1(x0,y0);
y1:=y0+k2*f2(x1,y0);
x0:=x1;
y0:=y1;
until abs(f1(x0,y0))+abs(f2(x0,y0))<e; {е=0.0000001}
x:=x0;
y:=y0;
end;

begin
clrscr;
write('Введите начальное приближение корня x0:');
read(x0);
write('Введите начальное приближение корня y0:');
read(y0);
write('Задайте точность вычислений e:');
read(e);
writeln;
solve (x0,y0,e);
writeln('|     x    |     y    |    e     |    f1(x,y)     |     f2(x,y)    |');
writeln('|',x:2:10,'|',y:2:10,'|',e:2:10,'|',f1(x,y):2:10,'|',f2(x,y):2:10,'|');
end.
     

Это сообщение отредактировал(а) norman - 17.4.2006, 23:13
PM MAIL   Вверх
Ozzя
Дата 18.4.2006, 08:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 86
Регистрация: 19.7.2004

Репутация: нет
Всего: 1



1. Попробуй заменить  real на extended
2. Оттрассируй программу 
PM MAIL   Вверх
bsa
Дата 1.5.2006, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: нет
Всего: 196



В функции f1 ты производишь деление на cos(x+y).
Ты уверен, что x+y <> PI/2 + PI*n (где n - целое)?
Проще говоря, возможно в какой-то момент cos(x+y) становится равным нулю. А деление на ноль - это всегда ошибка.  
Если не можешь отладить пошагово, воткни везде что-то типа writeln('f1:', x, ', ', y). Тогда будешь знать, при каких значениях x и y происходит ошибка и в какой функции. 

Это сообщение отредактировал(а) bsa - 1.5.2006, 16:31
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi"
THandle
Rrader
volvo877

Запрещается!

1. Обсуждать и делится взломанными компонентами или программным обеспечением

2. Публиковать ссылки на варез

3. Оффтопить

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, THandle, Rrader, volvo877.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Object Pascal: кроссплатформенные технологии | Следующая тема »


 




[ Время генерации скрипта: 0.0407 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.