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

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

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

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

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

1.doc

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

Федеральное агентство  по образованию РФ

Государственное образовательное учреждение

высшего профессионального  образования 

«Владимирский государственный университет»

 

Кафедра физики и прикладной математики

 

 

 

 

 

 

 

 

 

 

 

Контрольная работа

 

по дисциплине «Вычислительная математика»

 

Вариант №1

 

 

 

 

 

 

Выполнил:

ст. гр. ЗЭВМ–107

.

 

Принял:

доцент каф. ФиПМ

Горлов В.Н.

 

 

 

 

 

 

 

Владимир 2009

Задание 1

Методы поиска решений нелинейных уравнений

Метод простых итераций

 

Отделить корни уравнения х - sinx = 0.25 графически и уточнить один из них методом простых итераций с точностью до 0,001

 

 

 

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

 

Как известно, многие уравнения и системы уравнений не имеют аналитических решений.

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

 

Для их решения используются итерационные методы с заданной степенью точности.

Пусть дано уравнение f(x)=0, где:

 

  1. Функция f(x) непрерывна на отрезке [а, Ь] вместе со своими производными 1-го и 2-го порядка;
  2. Значение f(x) на концах отрезка имеют разные знаки f(a)-f(b)< 0;
  3. Первая и вторая производные f (х) и f (х) сохраняют определённый знак на всем отрезке.

Условия 1 и 2 гарантируют, что на интервале [а, Ь] находится хотя бы один корень, а из условия 3 следует, что f(x) на данном интервале монотонна и поэтому корень будет единственным.

Решить уравнение f(x)=0 итерационным методом значит установить, имеет ли оно корни, сколько корней и найти значения корней с нужной точностью.

Всякое значение ^ , обращающее функцию f(x) в нуль, т.е. такое, что f(Ј) =0, называется корнем уравнения f(x)=0 или нулем функции f(x).

Задача нахождения корня уравнения f(x)=0 итерационным методом состоит из двух этапов:

  1. Отделение корней - отыскание приближенного значения корня или содержащего его отрезка;
  2. Уточнение приближенных корней - доведение их до заданной степени точности.

 

 

 

 

 

Расчет

 

Нормализуем уравнение, т.е. приводим к виду у=х. Дано уравнение: х - sinx = 0.25

Приводим его: x-0.25=sinx

 

Но корнем уравнения является абсцисса пересечения у = x-0.25 с функцией.

 

Соответственно у = sinx. Строим ее график.

 

 

 

 

Рисунок 1.

Из рисунка 1 видно, что  точка пересечения графиков, т.е. корень уравнения  лежит от 1,0 до 1,5.

Т.к. 0≤q≤1/2, то lxn-xn-1l≤0.001.

Данные для ввода в программу:

Начальное приближение = 1,0

Погрешность вычислений = 0,001

Количество итераций = 20

 

Текст программы

 

Program Korni;

Uses crt;

Var xi1, xi2, xn1,xn2:real;

Procedure iteracia (x1,x2:real);

Var x3,razn1:real;

Begin

     x1:=1; x2:=1;

     x2:=0.25+sin(x1);

     repeat  x3:=0.25+sin(x2);

             razn1:=abs(x3)-abs(x2);

             if x2>0 then begin

                            if x3<0 then break;

                          end;

             if x2<0 then begin

                            if x3>0 then break;

                          end;

     x1:=x2;x2:=x3;

     until abs(razn1)<0.001;

     xi1:=x3;

     xi2:=x3;

     x3:=x3+0.001;

     xi2:=0.25+sin(x3);

end;

 

Begin

    clrscr;

    xi1:=1; xi2:=xi1;

    xn1:=1; xn2:=xn1;

    iteracia (xi1,xi2);

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

    end.

 

 

 

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

 

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

 

- корень методом интераций: 1.17091 и 1.17149

 

 

 

 

Метод Ньютона

 

Отделить корни  уравнения x^3-3x^2+9x-8=0 графически и уточнить один из них методом Ньютона с точностью 0,001.

 

 

 

 

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

 

Метод Ньютона – метод  касательных. Пусть  – начальное приближение к корню. Проведем касательную к графику функции в точке с координатами и за новое приближение примем абсциссу точки пересечения этой касательной с осью Ох. Продолжая эту процесс, получим последовательность приближений к корню .

Из уравнения касательной  получим расчетную формулу .

Апостериорный критерий окончания итераций .

 

 

 

Расчет

Для отделения  корней уравнения x^3-3x^2+9x-8=0  графическим способом построим в одной координатной плоскости графики функций y=x^3 и          y=x^2-9*x+8.

 

 

 

 

Рисунок 2.

Из рисунка 2 видно, что точка пересечения графиков, т.е. корень уравнения x^3-3x^2+9x-8=0   , расположен на отрезке [1;1,5]. В качестве начального приближения х возьмем середину отрезка, т.е x=1.25.

Текст программы

Program Korni;

Uses crt;

Var xn1,xn2,a,e:real;

begin

  writeln(' a  e ');

  readln(a,e);

  xn2:=a;

  repeat xn1:=xn2;

         xn2:=xn1- (xn1*xn1*xn1-3*xn1*xn1+9*xn1-8)/(3*xn1*xn1-6*xn1+9);

  until abs(xn2-xn1)<e;

  writeln('korni x1    x2');

  writeln('    ',xn1:5:3,' ',xn2:5:3);

readkey

end.

 

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

 

 

a  e

1 0.001

korni x1    x2

    1.167 1.166

 

 

Задание 2

 

Методы решения систем линейных уравнений

 

Решить систему линейных уравнений с точностью 

 

                        x1 = 0.23x1 – 0.04x2 + 0.21x3 – 0.18x4 + 1.24

                        x2 = 0.45x1 – 0.23x2 + 0.06x3 – 0.88

                        x3 = 0.26x1 + 0.34x2 – 0.11x3 + 0.62

                        x4 = 0.05x1 - 0.26x2 + 0.34x3 – 0.12x4 – 1.17

 

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

 

Приведем решаемую систему  эквивалентным преобразованием к виду .

Это возможно сделать  многими способами. Например, умножим  слева обе части равенства  на

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

Отсюда находим:

Матрицу нужно выбирать так, чтобы обладала определенными свойствами, о которых сказано ниже.

 

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

решению системы  достаточно, чтобы .

Таким образом, если некоторая норма  матрицы  , то итерационный процесс, основанный на формуле

(1), гарантированно сходится к  искомому решению при любом  начальном приближении  .

Итерационный процесс метода простой  итерации описывается формулой:

      (1)

где – некоторое начальное приближение к решению (обычно берут ).

 

В координатной форме  метод простой итерации записывается следующим образом:

Таким образом  –ая компонента –го приближения к решению вычисляется по формуле:

 

 

Program sistema;

Uses crt;

Var x1,xn1,x2,xn2,x3,xn3,x4,xn4,p1,t1,p2,t2,p3,t3,p4,t4:real;

    e:real; n:integer;

Begin

     clrscr;

     n:=0;

     x1:=-10; x2:=x1;x3:=x2;x4:=x3;

     repeat xn1:=0.23*x1-0.04*x2+0.21*x3-0.18*x4+1.24;

            xn2:=0.45*x1-0.23*x2+0.06*x3-0.88;

            xn3:=0.26*x1+0.34*x2-0.11*x3+0.62;

            xn4:=0.05*x1-0.26*x2+0.34*x3-0.12*x4-1.17;

            p1:=abs(xn1)-abs(x1);

            p2:=abs(xn2)-abs(x2);

            p3:=abs(xn3)-abs(x3);

            p4:=abs(xn4)-abs(x4);

            n:=n+1;

            e:=abs(p1)+abs(p2)+abs(p3)+abs(p4);

            x1:=xn1; x2:=xn2; x3:=xn3; x4:=xn4;

     until e<0.001;

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

     writeln(' ');

     write('Корни уравнения: ');

     writeln (x1:1:3,'; ',x2:1:3,'; ',x3:1:3,'; ',x4:1:3);

     writeln(' ');

     write('Точность вычисления (значение предела): ');

     writeln (p1:1:5,'; ',p2:1:5,'; ',p3:1:5,'; ',p4:1:5);

end.

 

 

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

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

 

Корни уравнения: 2.048; 0.086; 1.065; -0.650

 

Точность вычисления (значение предела): -0.00005; 0.00026; 0.00022; 0.00017

 

 

 

 

 

 

 

Задание 3

 

Интерполяция

 

Интерполяция функции с помощью полинома Лагранжа

 

Найти приближённое значение функции при данном значении аргумента с помощью интерполяционного многочлена Лагранжа, если функция задана в неравноотстоящих узлах таблицы.

 

 


 

 

 

 

 

 

 

 

 

 

 

 

 

Количество узлов в таблице = 6, т.к. 6 строк в исходной таблице.

Количество точек интерполяции = 3, т.к. из условия только три точки (правая таблица в задании).

 

 

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

 

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

.

Свободные параметры  определяются из системы.

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

Рассмотрим процесс построения интерполяционного полинома Лагранжа.

Пусть функция  задана в узлах, произвольно расположенных на отрезке : , , …, .

Требуется найти многочлен  степени не выше :

.

Будем искать в виде:

,  
где – коэффициенты, зависящие от узлов и текущего значения . Этим условиям отвечают коэффициенты вида:

.

Для интерполяционного  полинома Лагранжа получим:

 

.

Расчет

 

Program zad_Langranj;

Uses crt;

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

     itv=array [1..3] of real;

Var xtv, ytv, p:tv; ix,iy:itv; a,b:integer;    l,p1,m:real;

Begin

     clrscr;

     for a:=1 to 6 do begin

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

                         readln(l);

                         xtv[a]:=l;

                      end;

     writeln(' ');

     for a:=1 to 6 do begin

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

                         readln(l);

                         ytv[a]:=l;

                      end;

      writeln(' ');

      for a:=1 to 3 do begin

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

                         readln(l);

                         ix[a]:=l;

                       end;

      for a:=1 to 6 do begin

                         l:=xtv[a];

                         p1:=(l-xtv[2])*(l-xtv[3])*(l-xtv[4])*(l-xtv[5])*(l-xtv[6]);

                         p1:=p1+(l-xtv[1])*(l-xtv[3])*(l-xtv[4])*(l-xtv[5])*(l-xtv[6]);

                         p1:=p1+(l-xtv[1])*(l-xtv[2])*(l-xtv[4])*(l-xtv[5])*(l-xtv[6]);

                         p1:=p1+(l-xtv[1])*(l-xtv[2])*(l-xtv[3])*(l-xtv[5])*(l-xtv[6]);

                         p1:=p1+(l-xtv[1])*(l-xtv[2])*(l-xtv[3])*(l-xtv[4])*(l-xtv[6]);

                         p1:=p1+(l-xtv[1])*(l-xtv[2])*(l-xtv[3])*(l-xtv[4])*(l-xtv[5]);

                         p[a]:=p1;

                       end;

      for a:=1 to 3 do begin

                         iy[a]:=0;

                         m:=(ix[a]-xtv[1])*(ix[a]-xtv[2])*(ix[a]-xtv[3])*(ix[a]-xtv[4]);

                         m:=m*(ix[a]-xtv[5])*(ix[a]-xtv[6]);

                         for b:=1 to 6 do begin

                                            l:=(ytv[b]*m)/(p[b]*(ix[a]-xtv[b]));

                                            iy[a]:=iy[a]+l;

                                          end;

                       end;

      clrscr;

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

      writeln(' ');

      for a:=1 to 3 do begin

                         writeln('Значение х= ',ix[a]:2:3,'       

соответствующее значение y= ',iy[a]:2:5);

                       end;

      writeln(' ');

      for a:=1 to 6 do begin

                         writeln('x[',a,']= ',xtv[a]:2:2,'       y[',a,']= ',ytv[a]:2:4);

                       end;

end.

 

 

 

 

 

 

 

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

 

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

 

Значение х= 0.702        соответствующее значение y= 2.23357

Значение х= 0.512        соответствующее значение y= 1.79697

Значение х= 0.645        соответствующее значение y= 2.09249

 

x[1]= 0.43       y[1]= 1.6360

x[2]= 0.48       y[2]= 1.7323

x[3]= 0.55       y[3]= 1.8769

x[4]= 0.62       y[4]= 2.0334

x[5]= 0.70       y[5]= 2.2285

x[6]= 0.75       y[6]= 2.3597

 

 

 

 

 

 

Интерполяция  функции с помощью полинома Ньютона

 

Найти приближенное значение функции при данном значении аргумента с помощью интерполяционной формулы Ньютона,

если функция задана в равноотстоящих узлах таблицы.

 

 

 

 

 

Начальное значение аргумента - первый элемент X в исходной таблице с шестью строчками.

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