Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
inf2.doc
Скачиваний:
18
Добавлен:
15.04.2015
Размер:
603.14 Кб
Скачать

Уточнение корня уравнения

Пусть в результате отделения корней стал известен отрезок [a, b], на котором функция f(x) имеет единственный корень. Требуется уточнить его значение с погрешностью . Выберем для решения данной задачи метод хорд. Задаем начальное приближение, например, x = a. Хордой соединяем точки кривой на границах отрезка ab:

Ввод (a, b, e) [y - f(x)]/[f(b) - f(a)] =

x:= a = (x - a)/(b - a).

Пока |f(x)| > e Отсюда точка пересечения

y:= f(a); z:= f(b); хорды с осью абсцисс:

x = a - f(a)(b - a)/[f(b) - f(a)]; w:=f(x) x = a - f(a)(b - a)/[f(b) - f(a)].

y*w < 0

ДА НЕТ Это очередное приближение.

b:= x a:= x Переопределяем отрезок ab.

Вывод (x, f(x))

Применим приведенный выше алгоритм для уточнения корня с погрешностью 0,0001 на отрезке [0, 2] уравнения .

program Horda;

const

e = 0.0001;

var

n: byte;

a, b, w, x, y, z: real;

begin

writeln(‘Введите границы отрезка’);

readln(a,b);

x:= a; n:= 0;

while abs(x*x-1) > e do begin

y:= a*a-1; z:= x*x-1;

x:=a - y*(b - a)/(z - y); w:= x*x -1;

if y*w < 0 then b:= x else a:= x;

n:= n + 1 end;

writeln(‘Корень уравнения = ’, x);

writeln(‘Значение функции в этой точке = ’, x*x-1)

writeln(‘Число итераций: ’,n) end.

Контрольные вопросы

  1. Каковы правила организации цикла с предусловием?

  2. Как производят вычисление бесконечных сумм?

  3. Чему равна погрешность вычисления суммы знакопостоянного ряда?

  4. Чему равна погрешность вычисления суммы знакопеременного ряда?

  5. Как вычислить бесконечное произведение?

  6. Как уточнить корень уравнения?

  7. Можно ли в условии проверять равенство вещественных величин?

  8. Замените цикл с предусловием на цикл с постусловием.

  9. Замените цикл с предусловием на цикл с параметром.

  10. Как защитить программу от зацикливания вычислений?

Варианты задания

Вычислить значение заданной функции непосредственно и как сумму ряда с погрешностью 0,001. Значение аргумента выбрать самостоятельно.

  1. exp(x) =

  2. Arctg(x) = , | x | < 1.

  3. Cos(x) =

  4. Ln(x) = , x > ½.

  5. Sh(x) =

  6. Exp(-) =

  7. Sin(1) =

  8. Arcsin(x) = x +, arcsin(x) = arctg()

  9. Ln(1+x) = , -1 < x 1

  10. Sin(x) =

  11. Erf(x) = 2/= 2/

  12. Sin(x)/x =

  13. Cos(1) = 1+

  14. 1/e =

Интегралы Френеля:

  1. C(x)=

  2. S(x)=

Интегральные синус и косинус:

  1. Si(x)= -/2+

  2. Ci(x)=  + ln(x) + , 0,5772156649 - постоянная Эйлера-Маскерони

  3. Ln(1-x) = -, -1 x < 1

  4. Ln[(x+1)/(x-1)] = 2, | x | > 1.

  5. Ln(x) = , 0 < x < 2.

  6. Функция Бесселя

  7. Arctg(x) = , x 1.

Лабораторная работа 6

Программирование вложенных циклических вычислительных процессов

Цель работы

Изучение правил организации сложных вычислений, предполагающих циклическое изменение нескольких параметров.

Методические указания

В вычислительной математике весьма распространены задачи, связанные с выполнением повторяющихся действий внутри другого циклического процесса. Примерами таких вычислений являются: численное интегрирование с заданной погрешностью, табулирование функций нескольких переменных, расчет двойных сумм и произведений и т.п. Вычислительный процесс при решении подобных задач организован так, что структура внутреннего цикла оказывается вложенной в конструкцию внешнего цикла. При этом наиболее быстро изменяется параметр внутреннего цикла, т.к. он должен принять все свои значения при одном значении параметра внешнего цикла. Можно говорить об уровнях вложения циклов друг в друга: нулевой, первый, второй и т.д. Принципиального ограничения на глубину вложения нет, причем на любом уровне может быть использован любой из циклов. Рассмотрим организацию сложных циклических вычислений на конкретных примерах.

Пример 1. Для x, изменяющегося с шагом h = 0,1 в диапазоне [-0,5; 0,5], вычислить y = ln(1-x), если x  0, и y = ln(1 + x), если x > 0. При этом ln(1-x) вычислять как сумму ряда: .

Начало

Ввод (h)

x:= - 0.5

ДА

x  0

НЕТ s:= 0; z:= 1

y:= ln(1 + x) n:= 1(1)50

z:= z*x; s:= s + z/n y:= - s

Вывод (x, y)

x:= x + h

НЕТ

x > 0.5

ДА

Конец

В приведенной блок-схеме алгоритма s обозначает сумму ряда, а переменная z хранит значения . Реализуем данный алгоритм в системе программированияTurbo Pascal:

program Vlog_Cicl;

const

h = 0.1;

var

n: byte;

s, x, y, z: real;

begin

x:= - 0.5;

repeat {Внешний цикл}

if x <= 0 then begin

s:= 0; z:= 1;

for n:= 1 to 50 do begin

z:= z*x;

s:= s + z/n end; {for}

y:= - s end {then}

else y:= ln(1 + x);

writeln(‘x = ’, x:4:1, ‘ y = ’, y:6:4);

x:= x + h

until x > 0.5

end.

Пример 2. С погрешностью 0,001 вычислить по методу прямоугольников .

Метод прямоугольников является простейшим численным методом вычисления определенных интегралов. Подынтегральная функция f(x) заменяется полиномом нулевого порядка, который строится на заданном множестве точек. Точки могут располагаться как через равные интервалы, так и через неравные. В результате площадь под кривой f(x) (геометрическая интерпретация интеграла) заменяется при расчете суммой площадей отдельных прямоугольников. На рисунке показан интервал интегрирования ab, разбитый на равновеликие отрезки, служащие основанием таких прямоугольников.

Площадь i -го прямоугольника:

f(x) , 1  i  n.

При количестве прямоугольников n имеем:

.

a b x При h = (b - a)/n численное значение интеграла . (*)

Формула (*) позволяет вычислять интеграл с погрешностью, зависящей от числа отрезков разбиения n. Чтобы вычисление происходило с заданной погрешностью, следует организовать итерационный процесс. Он должен начинаться с вычисления значения I по формуле (*), например, при n=2. Затем удваивают n и вычисляют новое численное значение интеграла. Сравнивают разницу между двумя этими значениями интеграла с заданной погрешностью. Процесс продолжается до достижения заданной погрешности.

Метод прямоугольников имеет модификацию - метод средних. Кроме этих двух методов используют более эффективные методы: трапеций, Симпсона, Гаусса и др.

Ниже приведена структурограмма алгоритма метода прямоугольников. В ней приняты следующие обозначения: j1 - текущее значение интеграла, j2 - значение интеграла при вдвое меньшем числе прямоугольников n.

Ввод (a, b, )

n:= 2; j1:= 0

j2:= j1;

h:= (b-a)/n; x:= a; s:= 0

i:= 1(1)n

s:= s + sin(x)/x

x:= x + h

j1:= s*h; n:= n*2

до |j1 - j2| < 

Вывод (j1)

Этому алгоритму соответствует следующая программа.

program Method_Prm;

const

e = 0.001;

var

i, n: word;

a, b, j1, j2, h, s, x: real;

begin

writeln(‘Введите пределы интегрирования a и b’);

readln(a, b);

n:= 2;

j1:= 0;

repeat

j2:= j1;

h:= (b - a)/n;

x:= a; s:= 0;

for i:= 1 to n do begin

s:= s + sin(x)/x;

x:= x + h

end;

j1:= s*h;

n:= n*2

until abs(j1 - j2);

writeln(‘Интеграл = ’, j1)

end.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]