Лекция 7.
Вычисление бесконечных сумм.
Вычисление многих элементарных функций в ЭВМ осуществляется суммированием бесконечных рядов(последовательностей). Чем больше членов ряда участвует в сложении, тем более точным получается искомое значение.
Вычислить:
Вычисления прекратить, когда очередное слагаемое /rn/<=eps.
program sumr;
var
x,r, s, eps: real;
n,zn: integer;
begin
writeln('x=,eps=');
readln(x,eps);
s:=0;
r:=1;
n=1;
zn:=1;
while abs(r)>eps do
begin
s:=s+r*zn;
n:=n+1;
zn:=-zn;
r:=1/(n*n);
end;
writeln (' s=', s);
end.
Пример.
Вычислить:
Вычисления прекратить, когда очередное слагаемое /rn/<eps.
При вычислении следует помнить, что если n входит в показатель степени или под знак !, то необходима рекуррентная формула при вычислении слагаемого.
c=rn/rn-1
rn= rn-1*c
c= - x2/n;
r0=1
program sumr;
var
x, x2, r, s, eps : real;
n: integer;
begin
writeln ('x=, eps=');
readln(x, eps);
x2:=x*x;
s:=0;
r:=1;
n:=0;
while abs(r)>eps do
begin
s:=s+r;
n:=n+1;
r:=-r*x2/n;
end;
writeln(' s=', s);
end.
Пример.
Вычислить:
Вычисления прекратить, когда очередное слагаемое /rn/<eps.
c=rn/rn-1
rn= rn-1*c
c=x2/(2n)(2n-1);
r=x
s=0
program sumr;
var
x, x2, r, s, eps : real;
n: integer;
begin
writeln ('x=,eps=');
readln(x,eps);
x2:=x*x;
s:=0;
r:=x;
n:=0;
repeat
s:=s+r;
n:=n+1;
r:=-r*x2/(2*n*(2*n+1));
until abs (r)= eps;
writeln(' s=', s);
end.
При вычислении следует помнить, что если n входит в показатель степени или под знак !, то необходима рекуррентная формула при вычислении слагаемого.
Численные методы решения математических задач.
Решение алгебраических и трансцендентных уравнений.
Часто приходится решать уравнения вида f(x)=0, где функция f(x) определена и непрерывна на интервале a<x<b.
Если функция представляет собой многочлен, то уравнение называется алгебраическим, если же в функцию входят тригонометрические, показательные, логарифмические функции, то оно называется трансцендентным.
Всякое x, обращающее функцию в 0 называется корнем уравнения, а способ нахождения этого x – решением f(x)=0.
Найти корни уравнения удается лишь в частных случаях, поэтому разработаны приближенные методы.
Пример.
Методом итераций решить уравнение x3+x=1 при начальном приближении x0=0.9
Каждое следующее приближение ищется через предыдущее xn= f(xn-1)
Вычисления прекращаются, когда /xn-xn-1/<=eps.
Приводим уравнение к виду x=f(x) Затем уточняется значение корня с помощью выражений вида: x1=f(x0), x2=f(x1)…. xn=f(xn-1)). Этот процесс продолжается пока /xn-xn-1/<=eps. Следует учесть, что этот метод имеет решение, при условии, что /f’(x)/<1 на участке между корнем и начальном приближением.
Для организации вычислений достаточно иметь две переменные:
x0 – предыдущее приближение и
x – последующее(текущее) приближение(начальное приближение вводится в x=0.9).
В цикле каждый раз вычислять x=f(x0). Если условие abs(x-x0) не выполняется, то перед следующей итерацией нужно вычисленное последующее приближение x поместить на место предыдущего x0 и повторно выполнить цикл и т. д.
program iter;
var
x, x0, eps: real;
begin
readln(eps,x);
repeat
x0:=x;
x:=exp(1/3*ln(1-x0));
until abs(x-x0)>eps;
writeln (' x=', x);
end.
Это же уравнение решить методом Ньютона.
Решение находится последовательным приближением по формуле:
xn = xn-1-f(xn-1)/f’(xn-1)
Вычисления прекращаются, когда /xn-xn-1/<=eps.
f(x)= x3+x-1
f’(x)=3x2-1
program nuiton;
var
x,x0,eps: real;
begin
readln(eps,x0);
x=x0 - (x0*x0*x0- x0 -1)/(3*x0*x0-1);
while abs(x-x0)>eps do
begin
x0:=x;
x:=x0-(x0*x0*x0-x0-1)/(3*x0*x0-1);
end;
writeln (' x=', x, );
end.