Задания по вычислительной математике для заочников
Задания оформляются в отдельной тетради, на обложке которой кроме фамилии и номера группы должны быть указаны следующие данные:
= , = , = , = , = , = .
Здесь - номер института, – год поступления, и – две последние цифры номера группы, и – две цифры номера студента по списку.
Так, у пятого студента группы 729111 7 = 9, = 1, = 1, = 0, = 5.
В тетради должно быть записано условие задания и его подробное решение. Если в задании предполагается использовать интегрированные среды (Eureka, Scilab), то в тетради необходимо записать содержимое окон соответствующей среды (Edit, Solution – для Eureka и Editor, Scilab Command Window – для Scilab). Тексты программ на алгоритмическом языке (Pascal, Scilab) вместе с результатом решения задач в интегрированной среде (Turbo Pascal, Scilab) также следует записать в тетрадь.
Задание 1
Методом деления отрезка пополам и методом касательных (Ньютона) уточнить корень уравнения с погрешностью = 0.1
0.25( x3 – 2x2 + 2.3x – Nст = 0
Это же уравнение решить с помощью интегрированных сред Eureka и Scilab.
Пример выполнения задания 1: (вариант а, номер студента Nст = 55),
уравнение, которое нужно решить: 65 – ln x – x = 0
Решение уравнения приближенными методами состоит из двух этапов. Первый этап – отделение корня. Отделить корень уравнения f(x) = 0 – значит найти такой отрезок a b на котором содержится только один корень уравнения. Отделить корень можно графически и аналитически. Чтобы отделить корень аналитически, достаточно найти такой отрезок a b на котором выполняются три условия:
1) f(a)f(b)<0,
2) f(x) – непрерывная на отрезке a b функция,
3) f(x) – монотонная на отрезке a b функция.
Эти условия – достаточные для того, чтобы на отрезке a b был отделен корень уравнения f(x) = 0.
Чтобы найти отрезок a b, на котором выполняется первое из условий, можно протабулировать функцию f(x) = 65 – ln x – x c некоторым шагом h до тех пор, пока функция не сменит знак. Это можно сделать с помощью ИС Eureka (Scilab).
Чтобы протабулировать функцию с помощью ИС Eureka, надо подать команду Graph Function, ввести с клавиатуры функцию f(x) = 65 – ln(x) – x, подать команду List, указать первое значение аргумента (First point), например, 40, шаг (приращение аргумента) (Increment), например, 1 и количество значений аргумента (Number of value), например, 30. В результате откроется окно с таблицей значений функции в указанном интервале. Это окно можно «распахнуть» на весь экран клавишей F5. Из приведенного листинга функции видно, что смена знака происходит на отрезке 60 61:
f(60) = 65 – ln 60 – 60 0.906, f(61) = 65 – ln 61 – 61 – 0.111.
f(x) = 65 – ln x – x – непрерывная функция для любых x > 0, в том числе она непрерывна и на отрезке 60 61.
Чтобы проверить монотонность функции f(x) = 65 – ln x – x на этом отрезке, найдем ее производную f(x) = – 1/x – 1. Очевидно, что для любого x > 0 y < 0, следовательно, функция f(x) = 65 – ln x – x монотонно убывает на отрезке 60 61. Вывод: поскольку на отрезке 60 61 выполняются условия 1 – 3, корень на нем отделен.
Второй этап решения – это уточнения корня уравнения заданным методом (в нашем случае – методом деления отрезка пополам и методом касательных) с заданной погрешностью (в нашем случае = 0.1). Рассмотрим сначала метод деления отрезка пополам.
Согласно этому методу отрезок, на котором отделен корень уравнения, делят пополам и выбирают для дальнейших вычислений ту половину, на концах которой функция принимает значения разных знаков.
Составим следующую таблицу:
№ итерации |
a |
|
b |
f(a) |
f(x) |
f(b) |
|
1 |
60 |
60.5 |
61 |
0.91 |
0.40 |
–0.11 |
0.5 |
2 |
60.5 |
60.75 |
61 |
0.40 |
0.14 |
–0.11 |
0.25 |
3 |
60.75 |
60.88 |
61 |
0.14 |
0.01 |
–0.11 |
0.13 |
4 |
60.88 |
60.94 |
61 |
|
|
|
0.06 |
Все расчеты в таблице приведены с двумя знаками после запятой.
Пояснения к таблице.
В первой строке таблицы a = 60, b = 61 – исходный (начальный) отрезок, – его середина, f(a), f(b), f(x) – значения нашей функции f(x) = 65 – ln x -- x в указанных точках. Если в качестве корня взять значение x = 60.5, то погрешность, с которой мы его уточнили, равна 1 = 0.5, то есть корень уравнения = 60.50.5. Поскольку 1 > = 0.1, делаем вторую итерацию. Следующий отрезок, который мы будем делить пополам, – это либо a, x, либо x, b. В нашем случае это отрезок x, b, так как f(x)f(b)<0, тогда как f(a)f(x)>0. И т.д.
После четвертой итерации погрешность 1 = 0.06 < , поэтому можно сделать вывод о том, что корень уравнения 65 – ln x – x = 0 равен = 60.940.06.
Ответ: = 60.94 0.06
Рассмотрим теперь метод касательных. При его использовании для уточнения корня уравнения приближенное значение корня на каждой итерации вычисляют по формуле Ньютона
В качестве начального приближения выбирают тот конец отрезка [a, b], в котором выполняется условие
.
В нашем случае , и, следовательно, , но (см. выше) f(a)>0, f(b)<0, следовательно, =a. Тогда, полагая в формуле Ньютона n=1, получим
Для оценки погрешности полученного значения корня можно воспользоваться формулой
Получим Продолжая вычисления по формуле Ньютона при n=2, на второй итерации будем иметь
Так как то вычисления прекращаем. Задание выполнено.
Ответ: = 60.8909 0.0001
Чтобы решить уравнение 65 – ln x – x = 0 на отрезке [60, 61] в ИС Eureka, достаточно в окне Edit набрать следующие строки:
65 – ln(x) – x = 0
60<= x <=61
после чего с помощью клавиши Esc войти в основное меню и выполнить команду Solve. В окне Solution появится ответ:
x = 60.890916
Maximum error is 4.4764192e-13
Последняя строка означает, что если подставить полученное значение x в уравнение, то получится число, отличающееся от нуля по модулю на 4.476419210-13.
Ответ: = 60.890916
Напоминаем, что содержимое окон Edit и Solution во всех заданиях нужно переписывать в тетрадь.
Покажем, как выполнить задание 1 с помощью интегрированной среды Scilab (основные принципы работы с Scilab изложены на с.23 – 38; на с.39 приведен краткий перечень некоторых математических функций Scilab, используемых при выполнении заданий).
Для решения уравнений, в том числе трансцендентных, в Scilab применяют функцию fsolve(x0,f), где x0 - начальное приближение, f - функция, описывающая левую часть уравнения f(x)=0.
Для нахождения отрезка [a, b], на котором отделен корень данного уравнения, построим график функции y=65-lnx-x.
Откроем окно редактора системы Scilab SciPad командой scipad();(или выполнив пункт меню Editor, или нажав пиктограмму с изображением чистого листа) и наберем в нем следующие строки:
clc
xbasc()
function y=f(x)
// определение функции, входящей в уравнение
y= 65-log(x)-x;
endfunction
x=50:0.1:70; plot(x, f(x)); xgrid()
После запуска программы (Execute/Load into Scilab) откроется графическое окно системы (Scilab Graphic(0)) с графиком функции y=65 – ln x – x на отрезке [50, 70], из которого видно, что корень нашего уравнения лежит на отрезке [60, 70]. Для уточнения значения корня наберем в командном окне системы Scilab строку
-->x0=60;x1= fsolve(x0,f)
и нажмем Enter. В итоге в командном окне появится искомый результат
x1 =
60.890916
Ответ: = 60.8909
Содержимое окна редактора и командного окна системы Scilab необходимо переписать в тетрадь.