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

II. Методические указания к решению задач

1. Вычислить абсолютную и относительную погрешности функции при следующих значениях аргумента: ; ; .

Решение. Абсолютная погрешность функции с одной переменной оценивается по формуле (1). Для применения этой формулы следует найти производную данной функции: . Далее в формулу (1) подставляем значения: x1=1,2, Δx1=0,03; x2=8,7, Δx2=0,02; x3=4,43, Δx3=0.007. Программа на языке Turbo Pascal имеет вид:

program task1;

var x, dx: array[1..3] of real; y,dy,eps: real; i: integer;

begin

x[1]:=1.2; dx[1]:=0.03; x[2]:=8.7; dx[2]:=0.02; x[3]:=4.43; dx[3]:=0.007;

for i:=1 to 3 do

begin

y:=5*x[i]*cos(3*x[i]);dy:=abs(5*cos(3*x[i])-15*x[i]*sin(3*x[i]))*dx[i];

eps:=dy/abs(y)*100;writeln (‘dy[’,i,‘]=’,dy:1:3,‘ eps[’,I,‘]=’,eps:1:1,‘%’ )

end

end.

Комментарии к программе. Так как значения аргумента функции и их погрешностей изменяются не по определенному правилу, удобнее запомнить их в виде элементов массива. С этой целью в программе описаны и используются два одномерных массива x и dx. Искомые величины можно вычислять в цикле for. Его тело записано в виде составного оператора (в операторных скобках begin end), так как многократно должны выполниться четыре действия: вычисление приближенного значения y функции, его абсолютной погрешности dy, относительной погрешности eps в процентах и вывод результата на экран компьютера.

2. Вычислить абсолютную и относительную погрешности значения данной функции при следующих значениях аргументов: ; ; …; .

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

program task2;

var u,du, dx:real; i,n:integer;

begin

write(‘введите число переменных’); readln(n); u:=0; du:=0; dx:=0.1;

for i:=1 to n do

begin u:=u+i*i; du:=du+2*i*dx; dx:=dx/10 end;

writeln(‘du=’,2*du:1:6,’ eps=’,du/u*100:1:2)

end.

Комментарии к программе. Здесь переменная u хранит текущее значение функции, переменная du хранит текущее значение u, переменная dx – текущую степень числа 10, i – параметр цикла, используется при вычислениях значений аргументов xi и их погрешностей. Очередное слагаемое . В цикле вычисляются значения сумм u, du и степени числа 10 dx. Начальные значения сумм u и du равны 0, а начальное значение dx равно 0,1. Так как n - число слагаемых суммы – известно заранее, в программе использован оператор цикла for. Тело этого цикла записано в виде составного оператора в операторных скобках begin end, так как алгоритм решения задачи предполагает многократное повторение трех действий. Относительная погрешность в процентах вычисляется непосредственно при выводе и в выходной строке обозначена через eps. Вычисленное значение абсолютной погрешности выводится на экран с шестью знаками после десятичной точки, а значение относительной погрешности – с двумя.

  1. Протабулировать функцию y=sin x на заданном отрезке [a,b] c заданным шагом h. Для полученной табличной функции построить интерполяционный полином Лагранжа и найти его значение в заданной точке.

Решение. Для вычислений используем формулу (16). Входные данные: a и b – левый и правый концы отрезка табулирования (поэтому a<b), h – шаг табулирования (причем (b-a)/h – целое число), z – точка, в которой требуется найти значение полинома Лагранжа. Выходные данные: одно число – вычисленное значение интерполяционного полинома.

Программа на языке Turbo Pascal имеет вид:

Program task3;

const m=50;

var x, y: array[0..m] of real; a,b,h:real; z, L, P:real; i,j,n:integer;

begin

readln(a,b,h); readln(z); x[0]:=a; i:=0;

while x[i]<=b do

begin y[i]:=sin(x[i]); i:=i+1; x[i]:=x[i-1]+h end; n:=i-1;

L:=0;

for i:=0 to n do

begin P:=1;

for j:=0 to n do if i<>j then P:=P*(z-x[j])/(x[i]-x[j]);

L:=L+P*y[i]

end;

writeln(‘L(’,z, ‘)=’, L:1:6)

end.

Комментарии к программе. В программе описаны следующие переменные для промежуточных данных: n - количество строк в таблице, массив x – значения аргумента, а массив y – значения функции из таблицы. В разделе операторов вводятся исходные данные. В цикле while заполняются массивы x и y. После завершения цикла while значение переменной i оказывается на 1 больше строк в полученной таблице. Поэтому n:=i-1. Так как формула полинома Лагранжа представляет собой сумму произведений, то основную часть программы составляет структура «цикл в цикле». Во внутреннем цикле по параметру j вычисляются произведения

.

Значения этих произведений хранит переменная P. Ее начальное значение равно 1. Оно присваивается переменной P внутри внешнего цикла, так как независимо друг от друга вычисляются n+1 значений переменной P.

Во внешнем цикле по параметру i вычисляется значение суммы, которая накапливается в переменной L. Начальное значение L равно 0, и присваивается оно один раз до начала всех циклов, так как вычисляется только одно значение суммы. По этой же причине вывод результата происходит после завершения всех циклов.

4a. Найти определенный интеграл

(54)

по формуле левых прямоугольников, если число n точек разбиения отрезка интегрирования задано.

Решение. Для нахождения приближенного значения определенного интеграла по формуле левых прямоугольников следует разделить отрезок интегрирования [a,b] на n частей; в каждой точке деления, кроме правого конца отрезка, найти значения подынтегральной функции; вычислить их сумму и умножить ее на . Входные данные: a – левый конец отрезка интегрирования, b - правый конец отрезка интегрирования, n – число делений отрезка интегрирования. Выходные данные: одно число – значение определенного интеграла s. Программа на языке Turbo Pascal имеет вид:

Program task4a;

var a, b, x, y, h, s: real; i,n:integer;

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

for i:=0 to n-1 do

begin y:=5*sqr(sin(x*x))+sqrt(x*x+1); s:=s+y; x:=x+h; end;

s:=h*s; writeln(‘I=’,s:1:6)

end.

4b. Найти определенный интеграл (54) по формуле трапеций, если число n точек разбиения отрезка интегрирования задано.

Решение. Эта задача решается аналогично предыдущей, отличие лишь в том, что поскольку первое и последнее слагаемые в формуле трапеций (24) входят с коэффициентом 0.5, они вычисляются отдельно вне цикла, суммирование остальных слагаемых происходит в цикле. Программа имеет вид:

Program task4b;

var a, b, x, h, s: real; i, n:integer;

function f(x:real):real;

begin f:=5*sqr(sin(x*x))+sqrt(x*x+1); end;

begin

readln(a, b); readln(n);

h:=(b-a)/n; s:=0.5*(f(a)+f(b)); x:=a+h;

for i:=1 to n-1 do

begin s:=s+f(x); x:=x+h; end;

s:=h*s; writeln(‘I=’,s:1:6)

end.

Комментарии к программе. Так как в этой программе вычисление значения подынтегральной функции приходится записывать не один раз, как это было в предыдущей программе, целесообразно описать функцию для вычисления значения подынтегральной функции. Эта функция с аргументом и результатом вещественного типа real в программе получила имя f и в разделе операторов трижды вызывается с фактическими параметрами a, b, x.

4с. Найти определенный интеграл (54) по формуле Симпсона, если число n точек разбиения отрезка интегрирования задано.

Программа реализует формулу (25) и имеет вид:

Program task4b;

var a, b, x, h, s: real; i, n:integer;

function f(x:real):real;

begin f:=5*sqr(sin(x*x))+sqrt(x*x+1); end;

begin readln(a, b);{Ввод концов отрезка интегрирования}

readln(n);{Ввод числа разбиений - четное}

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

for i:=1 to (n-1) div 2 do

begin s:=s+4*f(x)+2*f(x+h); x:=x+2*h; end;

s:=h/3*(s+4*f(b-h)); writeln(‘I=’,s:1:6)

end.

5. Решить задачу Коши для уравнения , y(0)=0,4 методом Эйлера на отрезке [0, 1] с шагом h=0.01.

Решение. Для вычислений используем формулу (29). Входные данные: концы заданного отрезка a, b, шаг h, значение искомой функции на левом конце отрезка y0. Выходные данные: значения искомой функции y в узлах сетки. Программа на языке Turbo Pascal имеет вид:

program task5;

var a,b,x,y,h,y0:real;

begin readln(a, b, h, y0); x:=a; y:=y0;

while x<=b do begin writeln(‘x=’,x:1:2,’ y=’,y:1:3)

y:=y+h*(0.35*cos(x*y)-1.32); x:=x+h;

end;

end.

Комментарии к программе. Тело цикла while начинается с оператора вывода на экран, так как при входе в цикл первые значения x и y (начальное приближение) уже сформированы. Впоследствии очередное значение y вычисляется с помощью предыдущего значения x, поэтому следует сначала вычислить y, затем увеличить x, и только после этого выводить их на экран.