Контрольная работа по «Вычислительной математике»

Автор: Пользователь скрыл имя, 01 Апреля 2013 в 10:12, контрольная работа

Описание работы

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

Работа содержит 1 файл

1.doc

— 851.50 Кб (Скачать)

Шаг изменения аргумента - это разность между i-м элементом этой таблицы с i-1 элементом.

Теоретическая часть

 

В большинстве случаев функция задается в равноотстоящих узлах так, что , где – шаг интерполяции.

В этом случае применяется  полином Ньютона, использующий конечные разности. Конечной разностью первого порядка в точке называется разность , где , . Используя конечные разности первого порядка можно получить конечные разности второго порядка .

Определив коэффициенты получим:

.

Для программной реализации расчета коэффициентов полинома ньютона используют следующие формулы:

 

Расчет 

 

Program zad_Nuton;

Uses crt;

Type tv=array [1..6] of real; ttv=array [1..5] of real;

     ttv2=array [1..4] of real; ttv3=array[1..3] of real;

     ttv4=array[1..2] of real;

Var ix, iy:tv; p1:ttv; p2:ttv2; p3, xc,yc:ttv3;

    iy4:ttv4; iy5, s,h,t:real; i,j,c:integer; z:array[1..3] of integer;

Begin

    clrscr;

    for i:=1 to 6 do begin

                       write('Введите значение х[',i,']= ');

                       readln(ix[i]);

                     end;

    writeln(' ');

    for i:=1 to 6 do begin

                       write('Введите значение y[',i,']=');

                       readln(iy[i]);

                     end;

    for i:=1 to 5 do begin

                       s:=iy[i+1]-iy[i];

                       p1 [i]:=s;

                     end;

    for i:=1 to 4 do begin

                       s:=p1[i+1]-p1[i];

                       p2[i]:=s;

                     end;

    for i:=1 to 3 do

    p3[i]:=p2[i+1]-p2[i];

    for i:=1 to 2 do

    iy4[i]:=p3[i+1]-p3[i];

    iy5:=iy4[2]-iy4[1];

    h:=ix[2]-ix[1];

    writeln(' ');

    for i:=1 to 3 do begin

                       write('Введите значение для x[',i,']= ');

                       readln(xc[i]);

                     end;

    for i:=1 to 3 do begin

                       for j:=2 to 6 do begin

                                          if (xc[i]>ix[j]) and(xc[i]<ix[j]) then z[i]:=j-1;

                                        end;

                     end;

    for i:=1 to 3 do begin

                       j:=6-z[i];

                       t:=(xc[i]-ix[z[i]])/h;

                       yc[i]:=iy[z[i]]+t*p1[z[i]];

                       if j>=2 then yc[i]:=yc[i]+(t*(t-1)*p2[z[i]])/2;

                       if j>=3 then yc[i]:=yc[i]+(t*(t-1)*(t-2)* p3[z[i]])/6;

                       if j>=4 then yc[i]:=yc[i]+(t*(t-1)*(t-2)*(t-3)* iy4[z[i]])/24;

                       if j=5 then yc[i]:=yc[i]+(t*(t-1)*(t-2)*(t-3)*(t-4)* iy5)/120;

                     end;

    clrscr;

    writeln(' ');

    writeln ('----------------------------------ОТВЕТ:----------------------------------');

    writeln(' ');

    for i:=1 to 3  do begin

                       writeln('Для х[',i,']= ',xc[i]:2:4,'     значение у[',i,']= ',yc[i]:2:5);

                      end;

    writeln(' ');

    writeln ('                  ИСХОДНЫЕ ДАННЫЕ:');

    writeln(' ');

    for i:=1 to 6 do begin

                        writeln('Для х[',i,']= ',ix[i]:2:3,'     значение у[',i,']= ',iy[i]:2:5);

                     end;

end.

 

 

 

 

 

 

 

Результат работы программы.

 

 

 

----------------------------------ОТВЕТ:----------------------------------

 

Для х[1]= 1.3832     значение у[1]= 5.26791

Для х[2]= 1.3926     значение у[2]= 5.55226

Для х[3]= 1.3862     значение у[3]= 5.35555

 

                  ИСХОДНЫЕ ДАННЫЕ:

 

Для х[1]= 1.375     значение у[1]= 5.04192

Для х[2]= 1.380     значение у[2]= 5.17744

Для х[3]= 1.385     значение у[3]= 5.32016

Для х[4]= 1.390     значение у[4]= 5.47069

Для х[5]= 1.395     значение у[5]= 5.62968

Для х[6]= 1.400     значение у[6]= 5.79788

 

 

 

 

 

 

 

 

 

 

 

Задание 4

 

Аппроксимировать многочленом второй степени по методу наименьших квадратов функцию, заданную таблицей:

 

 


 

 

 

 

 

Теоретические сведения

 

 

Если таблично заданная функция у = f{x) отображает результаты эксперимента, то не- 
целесообразно, что бы аппроксимирующая функция ф(х) в точности повторяла значения fj, 
содержащие погрешности измерений.

 

Так же следует поступить, если задано и требуется учесть слишком большое количест- 
во узлов интерполяции.

 

В рассматриваемых случаях может быть применен эмпирический подбор аппроксими- 
рующих функций, который состоит в выборе аппроксимирующей функции и последующем 
определении коэффициентов согласно некоторому критерию. Например, может  быть вы- 
бран многочлен фт(х) степени т<п.

 

Для определения коэффициентов aj этого многочлена может быть применен критерий, 
состоящий в минимизации функции Е = F(eo ,ei ,...,em), где ei - отклонения аппроксимирую- 
щей функции от заданных значений 
ei = (p(Xj)-fi.

 

 

 

Расчет

 

Количество узлов таблицы = количеству ее строк = 20.

Количество строк в таблице = 20. В каждой строке X рассчитывается, как номер строки 
умножить на 0.1, т.е. например для первой строки Х = 1*0.1=0.1, для второй строки X = 2 * 
0.1 = 0.2 для третьей - X = 3 * 0.1 = 0.3 и т.д. И вводим соответствующее значение У в данной 
строке.

 

 

Program zad_Approximacia;

Uses crt;

Type

    tv=array[1..20] of real;

    tv2=array [1..7] of real;

Var x,y,x2,x3,x4,xy,xy2:tv; w:tv2;

    j:integer; m,d,dx,dy,dz,xi,yi,zi:real;

Begin

    clrscr;

    for j:=1 to 20 do begin

                        write('Введите значение y[',j,']=');

                        readln(m);

                        x[j]:=j*0.1;

                        y[j]:=m;

                        x2[j]:=x[j]*x[j];

                        x3[j]:=x2[j]*x[j];

                        x4[j]:=x3[j]*x[j];

                        xy[j]:=x[j]*y[j];

                        xy2[j]:=x2[j]*y[j];

                      end;

    for j:=1 to 20 do begin

                        w[1]:=w[1]+x[j];

                        w[2]:=w[2]+x2[j];

                        w[3]:=w[3]+x3[j];

                        w[4]:=w[4]+x4[j];

                        w[5]:=w[5]+y[j];

                        w[6]:=w[6]+xy[j];

                        w[7]:=w[7]+xy2[j];

                      end;

     {clrscr;}

     d:=w[2]*(w[2]*w[2]-w[3]*w[1])-w[1]*(w[3]*w[2]-w[4]*w[1]);

     d:=d+20*(w[3]*w[3]-w[4]*w[2]);

     dx:=w[5]*(w[2]*w[2]-w[3]*w[1])-w[1]*(w[6]*w[2]-w[7]*w[1]);

     dx:=dx+20*(w[6]*w[3]-w[7]*w[2]);

     dy:=w[2]*(w[6]*w[2]-w[7]*w[1])-w[5]*(w[3]*w[2]-w[4]*w[1]);

     dy:=dy+20*(w[3]*w[7]-w[4]*w[6]);

     dz:=w[2]*(w[2]*w[7]-w[3]*w[6])-w[1]*(w[3]*w[7]-w[4]*w[6]);

     dz:=dz+w[5]*(w[3]*w[3]-w[4]*w[2]);

    if d=0 then begin

                 writeln('Делитель системы=0');

               end;

   xi:=dx/d;

   yi:=dy/d;

   zi:=dz/d;

   writeln(' ');

   writeln('-------------------------------ОТВЕТ:-------------------------------');

   writeln(' ');

   writeln ('              Функция:  ',xi:1:3,'x2+',yi:1:3,'x+',zi:1:3);

end.

 

Результат работы программы.

 

Введите значение y[1]=2.05

Введите значение y[2]=1.94

Введите значение y[3]=1.92

Введите значение y[4]=1.87

Введите значение y[5]=1.77

Введите значение y[6]=1.88

Введите значение y[7]=1.71

Введите значение y[8]=1.60

Введите значение y[9]=1.56

Введите значение y[10]=1.40

Введите значение y[11]=1.50

Введите значение y[12]=1.26

Введите значение y[13]=0.99

Введите значение y[14]=0.97

Введите значение y[15]=0.91

Введите значение y[16]=0.71

Введите значение y[17]=0.43

Введите значение y[18]=0.54

Введите значение y[19]=0.19

Введите значение y[20]=0.01

 

-------------------------------ОТВЕТ:-------------------------------

 

              Функция:  -0.429x2+-0.132x+2.015

 

 

 

 

Задание 5

 

 

 

 

 
5.1 Вычисление интеграла по формуле трапеций

с тремя десятичными знаками

 

 

 

 

Теоретическая часть

 

 

Заменим подынтегральную  функцию  на отрезке полиномом первой степени :


где и – значение и конечная разность первого порядка функции в точке .

В этом случае приближенное значение интеграла определяется площадью трапеции:

.

 

На основе этой формулы  можно получить приближенную формулу  для вычисления интеграла:

.

 

Погрешность метода трапеций на одном интервале определяется по формуле:

.

 

Если интегрирование производится путем разбиения отрезка на несколько интервалов, то общую погрешность можно посчитать путем суммирования частичных погрешностей:

.

 

Метод трапеций имеет  второй порядок точности.

 

program integ;

uses crt;

type t=array[0..8] of real;

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

     y: t;

begin

writeln('vvedite a b h ');

readln(a,b,h);

x:=a;

y[0]:=1/sqrt(2*x*x+1);

repeat x:=x+h;

   for i:=1 to 8 do

       y[i]:=1/sqrt(2*x*x+1);

       s:=0;

       for j:=1 to 7 do begin

           s:=s+y[j] ;

           writeln('s=',s:5:3);

           end

until x>=b;

unteg:=h*(y[0]+y[8]+2*s);

writeln ('unteg= ',unteg:5:3);

readkey

end.

 

 

 

Результаты  работы программы

s=2.867

s=3.345

s=0.451

s=0.902

s=1.353

s=1.803

s=2.254

s=2.705

s=3.156

s=0.426

s=0.853

s=1.279

s=1.706

s=2.132

s=2.558

s=2.985

s=0.404

s=0.808

s=1.213

s=1.617

s=2.021

s=2.425

s=2.830

unteg= 0.673

 

5.2 Вычисление  интеграла по формуле Симпсона

 

 

Вычислить интеграл по формуле  Симпсона при п — 8; оценить погрешность результата,

составив таблицу конечных разностей.

 

 

Теоретическая часть

 

Заменим подынтегральную  функцию  интерполяционным полиномом второй степени – параболой, проходящей через узлы, тогда:


где – погрешность вычисления интеграла.

 

Для записи полинома воспользуемся интерполяционной формулой для трех узлов :


где – значение и конечные разности первого и второго порядков функции в точке .

 

В пределах отрезка  , на котором подынтегральная функция аппроксимирована полиномом, получим формулу Симпсона:

.

 

На основе этой формулы  можно получить приближенную формулу  для вычисления интеграла:

.

 

Погрешность метода трапеций на одном интервале определяется по формуле:

.

 

Если интегрирование производится путем разбиения отрезка на несколько интервалов, то общую погрешность можно посчитать путем суммирования частичных погрешностей:

.

 

Метод трапеций имеет  четвертый порядок точности.

 

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

 

 

 

Program zad_Simpson;

Uses crt;

Type t=array [0..8] of real;

Var x,y:t; n:integer; p,lg,lg2,pg:real;

Begin

      clrscr;

      p:=1.2;

      for n:=0 to 8 do begin

                          y[n]:=0.43429*ln(p+2)/p;

                          x[n]:=p;

                          p:=p+1.35;

                       end;

      writeln('-----------------------------ОТВЕТ:----------------------------');

      writeln(' ');

      for n:=0 to 8 do begin

                          writeln('Для Х',n,'=',x[n]:1:2,'      Y',n,'=',y[n]:1:5);

                       end;

      lg:=1.35/3*(y[0]+y[8]+4*(y[1]+y[3]+y[5]+y[7])+2*(y[2]+y[4]+y[6]));

      lg2:=1.35*2/3*(y[0]+y[8]+4*(y[2]+y[6])+2*y[4]);

      pg:=(lg-lg2)/15;

      writeln(' ');

      writeln('Результат вычислений= ',lg:1:7);

      writeln(' ');

      writeln('Точность  вычисления (удвоение шага)= ',pg:1:11);

end.

Результаты  работы программы

-----------------------------ОТВЕТ:----------------------------

 

Для Х0=1.20      Y0=0.42095

Для Х1=2.55      Y1=0.25804

Для Х2=3.90      Y2=0.19765

Для Х3=5.25      Y3=0.16387

Для Х4=6.60      Y4=0.14159

Для Х5=7.95      Y5=0.12551

Для Х6=9.30      Y6=0.11323

Для Х7=10.65      Y7=0.10348

Для Х8=12.00      Y8=0.09551

 

Результат вычислений= 1.8112664

 

Точность вычисления (удвоение шага)= -0.00183992680

 

 

Задание 6

 

Оптимизация функции

 

 

Теоретическая часть

 

Метод золотого сечения позволяет решить задачу минимизации унимодальной на отрезке функции с требуемой точностью при меньшем количестве вычислений значений функции.

Определение. Золотым сечением отрезка называется деление отрезка на две неравные части так, чтобы отношение длины всего отрезка к длине большей части равнялось отношению длины большей части к длине меньшей части отрезка.

Нетрудно проверить, что золотое сечение отрезка  производится двумя точками и , расположенными симметрично относительно середины отрезка, причем .

Точки золотого сечения обладают следующими свойствами, которые используются в методе золотого сечения:

 

 

 

 

1. Точка  производит золотое сечение отрезка , так как и . Аналогично точка производит золотое сечение отрезка .

2. Для точек  золотого сечения выполняется  равенство:

Алгоритм метода золотого сечения заключается в  следующем. Положим  . На отрезке возьмем точки , производящие золотое сечение, и вычислим значения . Далее, если , то примем . Если же , то . Здесь важно то, что внутри нового отрезка уже содержится точка , которая производит золотое сечение этого отрезка. Причем, в этой точке уже известно значение функции . Длина отрезка

.

Опишем  –й шаг алгоритма. Пусть уже определены точки , вычислены значения , найден отрезок такой, что , и известна точка , производящее золотое сечение отрезка , . Тогда в качестве следующей точки возьмем точку , которая в силу свойства (2) также производит золотое сечение отрезка . Вычислим значение . Пусть для определенности (случай рассматривается аналогично). Если , то полагаем ; если же , то . Новый отрезок таков, что , , точка производит золотое сечение отрезка и .

Информация о работе Контрольная работа по «Вычислительной математике»