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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.10.2012, 09:18   #1
ИВэТэшка
Пользователь
 
Аватар для ИВэТэшка
 
Регистрация: 01.02.2009
Сообщений: 52
Восклицание Метод простой итерации, ошибка при реализации

Добрый день! Третий день бьюсь, с казалось бы простейшей задачей, подскажите, пожалуйста, незамыленным взглядом, в чем не прав
Суть в следующем:
Решаю уравнение f(x)=(18/19)*(x+2*x^2+3*x^3)*(cos(sqrt(x)))-3,3783
методом простой итерации, по методу данное уравнение необходимо заменить на эквивалентное x=f(x), заменяю:
x = 3,566/cos(sqrt(x))-2*x^2-3*x^3
в качестве отрезка можно выбрать [1; 1,1], корень точно находится там и его значение 1,064 (это решено в MathCAD, но он не показывает ход решения, также решено методом половинного деления, корень верный), можно выбрать больший отрезок, не суть.
Проверяю уравнение на сходимость, для этого нахожу производную (использую MathCAD, также находил в ручную)
значение производной при x=1, получается -7,8, казалось бы, условия сходимости "модуль производной должен быть меньше единицы" не выполняется (но в методичке нашел, что это не обязательное условие).
Когда начинаю реализовывать этот метод в Паскале, под корнем получается отрицательное число и видимо из-за этого выдает ошибку.
Уравнение имеет решение и решается этим методом, т.к. это задание выдается не первый год.

Код:
uses crt;
const
     e = 0.0001;
var
   x1,x2 :real;
begin
clrscr;
x1:=1;
x2:=x1;

repeat
      begin
      x1:=x2;
      x2:=3.566/(cos(sqrt(x1)))-2*x1*x1-3*x1*x1*x1;
      writeln(x1);
      end;
until (abs(x1-x2)<e);

writeln('The value equal to ',x2:6:4);
readln;
end.
Ошибка:
"Ошибка выполнения 205 по адресу 0000:0095"
Машины должны работать! Люди должны думать!
ИВэТэшка вне форума Ответить с цитированием
Старый 05.10.2012, 12:25   #2
JIeIIIa
Пользователь
 
Регистрация: 21.12.2011
Сообщений: 54
По умолчанию

(18/19)*(x+2*x^2+3*x^3)*(cos(sqrt(x)))-3,3783
не сжимающее отображение на [1,1.1] (напр, для х=1.05).
3,566/cos(sqrt(x))-2*x^2-3*x^3 тоже не сжимающее (хотя не понятен принцип замены)

А метод простых итераций применяется к сжимающим отображениям...
JIeIIIa вне форума Ответить с цитированием
Старый 05.10.2012, 12:44   #3
ИВэТэшка
Пользователь
 
Аватар для ИВэТэшка
 
Регистрация: 01.02.2009
Сообщений: 52
По умолчанию

отрезок можно выбрать другой, этот приведен в качестве примера.
Замена производилась, путем выражения "x", который находится
(18/19)*(x+2*x^2+3*x^3)*(cos(sqrt(x)))-3,3783
В данный момент пытаюсь выразить другой "х", посмотрим что получится
Машины должны работать! Люди должны думать!

Последний раз редактировалось ИВэТэшка; 05.10.2012 в 12:47.
ИВэТэшка вне форума Ответить с цитированием
Старый 05.10.2012, 13:23   #4
JIeIIIa
Пользователь
 
Регистрация: 21.12.2011
Сообщений: 54
По умолчанию

Отрезок выбирается такой, чтоб предполагаемый корень пренадлежал данному отрезку.
Ваша функция зависит только от икса. О каком "другом Х" речь?
JIeIIIa вне форума Ответить с цитированием
Старый 05.10.2012, 18:05   #5
ИВэТэшка
Пользователь
 
Аватар для ИВэТэшка
 
Регистрация: 01.02.2009
Сообщений: 52
По умолчанию

Насчет отрезка, я понимаю каким он должен быть, имел ввиду что можно отрезок больше взять [1;2] или [0;2] и т.д. корень ведь примерно известен и он в них во всех попадает.
Я выразил следующий "х"
(18/19)*(x+2*x^2+3*x^3)*(cos(sqrt(x)))-3,3783
и между прочим получилось, хотя с погрешностью.
Вот так всегда, как только создам тему на форуме, сразу самостоятельно все получается :-)
Машины должны работать! Люди должны думать!
ИВэТэшка вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
простой метод итерации serj-07 Помощь студентам 3 27.06.2010 19:34
Решение СЛАУ. Метод простой итерации Alexander886 Помощь студентам 5 24.03.2010 18:43
Метод простой итерации Nikolai17 Помощь студентам 4 17.11.2009 09:39
Метод простой итерации. (ЧМ) Rise Помощь студентам 2 05.11.2009 18:00
Метод простой итерации Artemm Общие вопросы C/C++ 17 31.05.2009 14:06