double arrow

Приближенные вычисления. Задача 1.Вычислить приближенное значение суммы

Задача 1. Вычислить приближенное значение суммы

1 + x/1! + x2/2! + x3/3! +...

Считаем, что нужное приближение получено, если вычислена сумма нескольких слагаемых, и очередное слагаемое оказалось по модулю меньше, чем данное малое положительное число e.

Для решения задачи мы должны выполнить следующие действия:

1) получить очередное слагаемое (назовем его а);

2) сравнить абсолютную величину слагаемого а с e и, в зависимости от результата сравнения, либо продолжить, либо прекратить вычисления.

Program p;

var a: real;

x: real;

e: real;

i: integer;

S: integer;

Begin

readln(x, e);

i:=1;

a:=1;

S:=0;

WHILE a>e DO

begin

S:=S+a; i:=i+1; a:=a*x/i;

end;

writeln(‘приближенное значение суммы=’,S:4:2)

end.

Задача 2. Рассмотрим часто встречающуюся задачу приближенного решения уравнения f(x)=0, где f(x) - заданная функция. Решить уравнение - значит найти такое значение х*, при котором f(x*)=0. Поиск решения осуществляется на интервале [a;b], причем f(a)<0, а f(b)>0. Используем метод деления пополам. Находим точку с=(а+b)/2 - середина отрезка. Если f(c)>0, то границу b изменяем на значение с, а если f(с)<0, то изменяем а. Процесс продолжаем, пока длина интервала не будет меньше заданной точности.

Y f(x) 0 a c b X

Пусть f(x)=x2-2, т.е. мы попытаемся найти значение квадратного корня из 2.

program popolam;

const eps=1.0E-3;

var a,b,c:real;

Function eg(x,y:real):boolean;

begin

Eg:=Abs(x-y)<eps

end;

Function F(x:real):real;

begin

F:=Sgr(x)-2

end;

BEGIN

Writeln(‘введите интервал’); readln(a,b);

if F(a)*F(b)>0 then writeln(‘на этом интервале мы не можем

найти решение уравнения’)

else begin

while Not Eg(a,b) do

begin c:=(a+b)/2;

if F(c)>0 then b:=c else a:=c

end;

writeln(‘Результат ’,a)

end;

readln

end.

Можно с помощью этой программы решить уравнения:

x2-6x+5=0 x-cosx=0 x-lnx-2=0 2x3-9x2-60x+1=0

Y 0 a x1 x2........ xn-2 xn X

Задача 3. Пусть непрерывная положительная на отрезке [a,b] (a<b) функция. Вычислим площадь фигуры, ограниченную графиком функции f(x), осью х и прямыми х=а и х=b. Для этого разобьем отрезок [a,b] на n равных отрезков одинаковой длины Dx=(b-a)/n a=x0<x1<...<xi<xi+1<....<xn=b

На каждом из отрезков [xi,xi+1] как на основании, построим прямоугольник с высотой f(xi).

Площадь прямоугольников мы умеем находить. Сумма площадей всех прямоугольников даст приближенное значение площади фигуры:

Sприб=(b-a)/n*(f(x0)+....f(xn-1))

Естественно, что чем мельче будет разбиение, тем точнее мы подсчитаем площадь фигуры.

Для отладки программы возьмем функцию f(x2) на отрезке [1,2]. Площадь фигуры равна 2,333....

program trapez;

const eps=1.0E-3;

var a,b,s,dx:real;

i,n: integer;

Function eg(x,y:real):boolean;

begin

Eg:=Abs(x-y)<eps

end;

Function F(x:real):real;

begin

F:=Sgr(x)

end;

BEGIN

Writeln(‘введите интервал и число частей для разбивки’); readln(a,b,n);

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

For i:=1 to n-1 do

begin

s:=s+F(x);

x:=x+dx;

end;

writeln(‘Результат = ’,(b-a)/n*s);

readln;

end.

Вычислить площадь криволинейных трапеций для следующих функций: f(x)=1/(1+x) [0,1] f(x)=1/x [1,3]

f(x)=sinx [0,p/2]

Задача 4. Для вычисления элементарных функций в математике широко распространено представление этих функций в виде некоторых бесконечных сумм. Не вдаваясь в обоснование таких представлений, приведем некоторые их них:

ex=1 + x + x2/2! + x3/3! +... + xn/n! +...

sinx=x - x3/3! + x5/5! - x7/7! +...+ (-1)nx2n-1/(2n+1)! +....

cosx= 1 - x2/2! + x4/4! - x6/6! +...+ (-1)nx2n/(2n)! +....

ln(1+x)=x - x2/2 + x3/3 - x4/4 +...+ (-1)n+1xn/n +..... (-1<x<=1)

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

Вычисли функцию sinx.

Program rad;

const eps=1.0E-3;

var x,sn,ss: real;

p, n: integer;

{p - используется для чередования знака слагаемого}

Function Eg(x,y;real):boolean;

begin

Eg:=Abs(x-y)<eps

end;

Function F(n:integer;var x:real):real;

var i:integer;

s:longint;

begin

s:=1;

for i:=2 to n do s:=s*i;

x:=x*sqr(x); F:=x/s

end;

BEGIN

writeln(‘Введите значение х’);

readln(x);

ss:=0; sn:=x; n:=1; p:=1;

Repeat

ss:=sn; {предыдущее значение слагаемого}

{ новое значение слагаемого}

n:=n+2; p:=-1*p; sn:=ss+p*F(n,x)

Until Eq(ss,sn) or (n>=12);

Writeln(‘Результат=’,sn); readln

end.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



Сейчас читают про: