Форум программистов, компьютерный форум, киберфорум
Pascal (Паскаль)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.52/25: Рейтинг темы: голосов - 25, средняя оценка - 4.52
1 / 1 / 0
Регистрация: 25.01.2010
Сообщений: 73
1

Составить программу для нахождения корня уравнения методом итерации

27.04.2015, 03:47. Показов 4660. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Составить программу для нахождения корня уравнения методом итерации с точностью ε=0,001.
https://www.cyberforum.ru/cgi-bin/latex.cgi?{x}^{4}-4.1{x}^{3}+{x}^{2}-5.1x+4.1=0
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.04.2015, 03:47
Ответы с готовыми решениями:

Написать программу для решения уравнения методом итерации
Для уравнения приведенного ниже, написать программу в pascal для решения методом итерации,...

Проверить программу нахождения корня уравнения
Народ нужна проверка по И-циклам. Буду очень признателен const a=0; b=0.8; // начало и...

Найти ошибки в программе для нахождения корня уравнения
Помогите пожалуйста, не пойму в чём ошибки: 2)Составить программу для нахождения корня уравнения...

Составить программу для решения уравнения f(x)=0 на отрезке [A,B} с точностью Е методом деления отрезка попола
Помогите подставить в исходник математическое уравнение Сам исходник я благо нашел на просторах...

3
Модератор
10004 / 5361 / 3338
Регистрация: 17.08.2012
Сообщений: 16,337
27.04.2015, 13:11 2
Цитата Сообщение от Neocosmo Посмотреть сообщение
для нахождения корня
Который из корней найти: x=0.68233 или x=4.1?
0
1 / 1 / 0
Регистрация: 25.01.2010
Сообщений: 73
27.04.2015, 14:21  [ТС] 3
Написано что надо найти корень.А так не известно.Мне хотя бы литературу по этой теме прочитать.Когда элементарную математику "переводят" в паскаль я то ещё понимаю, а когда итерации, интегралы и прочее-уже плыву.
0
Модератор
10004 / 5361 / 3338
Регистрация: 17.08.2012
Сообщений: 16,337
27.04.2015, 21:03 4
А чё тут плыть-то? Вот теория: Википедия - Метод простой итерации.

Зададимся интервалом грубого поиска корней. Пусть будет -10 <= x <= 10.

Зададимся шагом грубого поиска корней. Шаг должен быть таким, чтобы он не захватывал сразу несколько корней. Примем для удобства h=1.

Пробежимся по интервалу с шагом h, вычисляя значение функции в точках xi и xi+h. Если знаки функции в этих точках противоположны, значит, на подинтервале xi<=x<=xi+h есть корень.

Так как задан метод простой итерации, в качестве сжимающего отображения будем использовать постоянную. В качестве таковой прямо-таки просится использовать число, обратное тангенсу наклона прямой, проходящей через крайние точки подинтервала: (xi, f(xi)) и (xi+h, f(xi+h)). И у нас получится:

тангенс угла наклона прямой (помним, у нас h=1)

https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
k = \frac{f(xi+h)-f(xi)}{xi+h-xi}=\frac{f(xi+h)-f(xi)}{h}=f(xi+h)-f(xi)<br />

сжимающее отображение

https://www.cyberforum.ru/cgi-bin/latex.cgi?<br />
\lambda _0=\frac{1}{k}=\frac{1}{f(xi+h)-f(xi)}<br />

В качестве начального приближения примем x=xi. Очередное приближение будет

https://www.cyberforum.ru/cgi-bin/latex.cgi?x1=x-\lambda _0f(x)

и, если модуль разности между соседними приближениями < eps, то очередной корень найден с точностью eps.

Ну и, пишем, чё тут писать-то, всё по Википедии...
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
function f(x: real): real;
begin
  f := (((x - 4.1) * x + 1) * x - 5.1) * x + 4.1 {функция}
end;
 
const eps = 0.001; {точность}
      d = trunc(-ln(eps) / ln(10)); {количество значащих цифр после десятичной точки}
      xs = -10; {начало интервала поиска корней}
      xe = 10 - 1; {конец интервала поиска корней минус шаг}
      {шаг интервала поиска корней примем за 1 для удобства}
 
var x, x1, lambda: real;
    xi, n: integer;
 
begin
  writeln('Roots of y=x^4-4.1x^3+x^2-5.1x+4.1, precision = ', eps:0:d);
  n := 1; {просто номер очередного корня}
  {цикл поиска корней}
  for xi := xs to xe do 
    if f(xi) * f(xi + 1) <= 0 {если разного знака, то на интервале xi..xi+1 есть корень}
      then begin
        {находим отображение (лямбда)}
        lambda := 1 / (f(xi + 1) - f(xi)); {надо ещё разделить знаменатель на шаг по x, но шаг у нас = 1}
        x1 := xi; {начальное приближение}
        {цикл уточнения корня}
        repeat
          x := x1; {запоминаем прошлое приближение}
          x1 := x - lambda * f(x) {ищем очередное приближение корня}
        until abs(x1 - x) < eps; {если разница между соседними приближениями < eps, корень найден}
        {конец цикла уточнения корня}
        {печатаем найденный корень с требуемой точностью}
        writeln('x', n, ' = ', x1:0:d);
        inc(n)
      end; 
  {конец цикла поиска корней}
  readln
end.
Насчёт функции - не пугайтесь. Это Ваша функция, просто я иксы за скобы повыносил, чтобы степени не громоздить.
Выпендрёж в виде количества цифр после десятичной точки (константа d) - можете выкинуть, хотя там всё просто: целая часть десятичного логарифма числа (положительного, естественно) равна количеству значащих разрядов минус 1 при логарифме от числа большего либо равного 1, и позиции первой значащей цифры, отличной от нуля, после десятичной точки (правда, с обратным знаком), если число меньше 1. Вот последний случай я и использовал, для того, чтобы при смене eps не приходилось выискивать в программе и менять число выводимых после десятичной токи знаков. Можете, кстати, и форматированный вывод тоже выкинуть, ну, будут числа печататься в научной нотации, что такого. Ну и, после изучения программы или перед её сдачей лишние (или вообще все) комментарии выкиньте к лешему. Ну и, может, ещё какие украшения заодно. Ну там, первый writeln, и номер корня n. Тогда лаконично получится.
0
27.04.2015, 21:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
27.04.2015, 21:03
Помогаю со студенческими работами здесь

Нахождение корня методом простой итерации
Доброе время суток всем. Помогите разобраться пожалуйста! Мне нужно получить значение переменной...

Составить программу нахождения решения линейного уравнения ах + b = 0
помогите поправить задачу.Составить программу нахождения решения линейного уравнения ах + b = 0,...

Составить программу вычисления корня с погрешностью ε=0,0001 методом половинного деления
Составить программу вычисления корня с погрешностью ε=0,0001 методом половинного деления

Найти корень уравнения методом итерации
Здравствуйте. помогите пожалуйста надо Найти корень уравнения методом итерации с точностью 0.001 ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru