Постановка задачи для конкретного варианта и исходные данные:
1. Найти корень уравнения : с точностью e=10-4, корень уравнения находится на отрезке (0.4, 1), используя метод Ньютона. На печать вывести вычисленное значение корня и для сравнения точное значение корня, точное значение корня x=0.7376.
Значения :
Xо – примерное значение корня,
e - точность нахождения корня, вводятся с клавиатуры.
Должен быть предусмотрен контроль вводимых значений.
2. В программе необходимо предусмотреть подсчет и вывод на печать числа итераций, за которое удается найти значение корня с заданной точностью.
Описание и блок-схема метода решения:
Описание метода Ньютона:
Пусть уравнение имеет один корень на отрезке [a;b]. Функция F(x) непрерывна на отрезке [a; b].
Приводящее к итерационному процессу следующего вида:
Выберем на отрезке[a; b] произвольную точку х0 – нулевое приближение. Затем найдем:
x1 = x0 - ,
потом x2 = x1 - .
Таким образом, процесс нахождения корня уравнения сводится к вычислению чисел xn по формуле:
xn = xn-1 - n = 1,2,3...... .
Процесс вычисления продолжается до тех пор, пока не будет выполнено условие:
Блок-схема метода Ньютона:
true false
Текст программы.
program lab5{ вариант № 3};
uses crt;
var x0,x1,a,b,e:real;
iteraz:integer;
function fun(x:real):real;
begin
fun:=(x+sqrt(x)+exp((1/3)*(ln(x)))-2.5)/(1+1/(2*sqrt(x))+1/(3*exp((1/3)*(ln(x)))));
end;
begin
clrscr;
write('Введите приближённое значение корня X=');
readln(x1);
write('Введите точность e=');
readln(e);
iteraz:=0;
repeat
iteraz:=iteraz+1;
x0:=x1;
x1:=x0-fun(x0);
until (abs(x1-x0)<=e);
writeln('Решение уравнения:');
writeln('Точное значение корня...... ……0.7376');
writeln('Вычисленное значение корня…',x1:6:5);
writeln('Число итераций..…………......... ',iteraz);
writeln('Программа закончена, нажмите Enter.');
readln;
end.
Распечатка результатов работы программы в следующем виде:
Решение уравнения: Точное значение корня...... ……...0.7376 Вычисленное значение корня.. …0.73762 Число итераций...........………… ..3 |
Лабораторная работа № 5, вариант № 3.
Решение нелинейных уравнений методом половинного деления.
Постановка задачи для конкретного варианта и исходные данные:
1. Найти корень уравнения : с точностью e=10-4, корень уравнения находится на отрезке (0.4, 1), используя методов половинного деления. На печать вывести вычисленное значение корня и для сравнения точное значение корня, точное значение корня x=0.7376.
Значения :
(a, b) – отрезок на котором находится корень уравнения,
Xо – примерное значение корня,
e - точность нахождения корня,
вводятся с клавиатуры.
Должен быть предусмотрен контроль вводимых значений.
2. В программе необходимо предусмотреть подсчет и вывод на печать числа итераций, за которое удается найти значение корня с заданной точностью.
Описание и блок-схема метода решения:
Описание метода половинного деления:
Пусть уравнение имеет один корень на отрезке [a;b]. Функция F(x) непрерывна на отрезке [a; b].
Метод половинного деления заключается в следующем:
Сначала выбираем начальное приближение, деля отрезок пополам, т.е. х0 = (a+b)/2. Если F(x)=0, то x0 является корнем уравнения. Если F(x) 0, то выбираем тот из отрезков, на концах которого функция имеет противоположные знаки. Полученный отрезок снова делим пополам и выполняем действия сначала и т.д.
Процесс деления отрезка продолжаем до тех пор, пока длина отрезка, на концах которого функция имеет противоположные знаки, не будет меньше заданного числа e.
Блок-схема метода половинного деления:
true false
false true
Текст программы.
program lab5{ вариант № 3};
uses crt;
var x,a,b,e:real;
iteraz:integer;
function fun(x:real):real;
begin
fun:=x+sqrt(x)+exp((1/3)*(ln(x)))-2.5;
end;
begin
repeat
clrscr;
writeln('Корень уравнения находиться на интервале [a,b]');
write('Введите [a=');
readln(a);
write('Введите [b=');
readln(b);
write('Введите приближённое значение корня X=');
readln(x);
write('Введите точность e=');
readln(e);
until (b-a>e) or (x>a) or (x<b) or (a<>0);
iteraz:=0;
while (fun(x)<>0) and (abs(a-b)>e) do
begin
iteraz:=iteraz+1;
if (fun(a)*fun(x))<0
then b:=x
else a:=x;
x:=((a+b)/2);
end;
writeln('Решение уравнения:');
writeln('Точное значение корня....……..0.7376’);
writeln('Вычисленное значение корня.. ',x:6:5);
writeln('Число итераций..........…………. ',iteraz);
writeln('Программа закончена, нажмите Enter.');
readln;
end.
Распечатка результатов работы программы в следующем виде:
Решение уравнения: Точное значение корня...... ……..0.73760 Вычисленное значение корня.. …0.73764 Число итераций...........………… ..14 |
Варианты заданий.
N0 вар. | Уравнение | Отрезок, содержащий корень | Метод | Точное значение корня |
[2;3] | Итераций | 2,2985 | ||
[0;2] | Ньютона | 1,0001 | ||
[0;0,85] | Итераций | 0,2624 | ||
[1;2] | Ньютона | 1,1183 | ||
[0;8] | Половинного деления | 0,3333 | ||
[0;1] | Итераций | 0,5629 | ||
[2;4] | Ньютона | 3,2300 | ||
[1;2] | Половинного деления | 1,8756 | ||
[0;1] | Итераций | 0,7672 | ||
ex - e-x -2 = 0 | [0;1] | Ньютона | 0,8814 | |
[1;3] | Половинного деления | 1,3749 | ||
[1,2;2] | Итераций | 1,3077 | ||
[3;4] | Ньютона | 3,5265 | ||
[1;2] | Половинного деления | 1,0804 | ||
[0;1,5] | Итераций | 1,1474 | ||
[1;3] | Ньютона | 2,0692 | ||
[0;1] | Половинного деления | 0,5768 | ||
[0,5;1] | Итераций | 0,9892 | ||
[1;3] | Ньютона | 1,8832 | ||
[0;1] | Половинного деления | 0,1010 | ||
[2;3] | Итераций | 2,0267 | ||
[0,4;1] | Ньютона | 0,6533 | ||
[-1;0] | Половинного деления | -0,2877 | ||
ln x -x + 1,8 = 0 | [2;3] | Итераций | 2,8459 |
Случайные числа.
Мы не можем заранее сказать, какая сторона монеты или игрального кубика окажется сверху, какую карту мы вытащим из колоды. Говорят, что результат такого эксперимента является случайным числом. Повторяя эксперимент много раз, можно получить последовательность случайных чисел. Интересно, что невозможно предвидеть значение нового члена ряда – он не зависит от предыдущих членов.
Случайные числа широко используются в задачах, моделирующих жизненные ситуации (игры, эпидемии заболеваний и др.). В Паскале реализован датчик или генератор псевдослучайных чисел. Числа, вырабатываемые при помощи приведенных ниже функций, называют псевдослучайными («похожими» на случайные), поскольку это модель случайных чисел, иногда весьма приближенная.
Randomize – инициирует датчик.
Random – генерирует случайные действительные числа из диапазона [0;1]
Random (x) – генерирует любые случайные целые числа из диапазона [0;x].
Random (x) + random – генерирует случайное действительное число из диапазона [0;x];
Random (x) + random + y – генерирует случайное действительное число из диапазона [y; x + y];
Random (x) + random – y – генерирует случайное действительное число из диапазона [-y; x – y];
2* x* Random – x – генерирует случайное действительное число из диапазона [-x; x].