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

Автор работы: Пользователь скрыл имя, 04 Июня 2012 в 21:12, курсовая работа

Краткое описание

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

Содержание

Введение 4
1. Метод решения нелинейного уравнения методом секущих 7
1.1. Общая характеристика методов решения нелинейных уравнений 7
1.2. Метод секущих 10
1.3. Тестовый пример 12
1.4. Разработка алгоритма решения нелинейных уравнений 15
2. Вычисление значения функции при помощи интерполяционной формулы 16
2.1. Общая характеристика методов интерполяционной функции 16
2.2. Интерполяционная формула Ньютона 24
2.3. Тестовый пример 25
2.4. Разработка алгоритма и программы вычисления функции 26
Заключение 27
Список литературы 28
Приложение 1.1 29
Приложение 2.1

Вложенные файлы: 1 файл

referat.doc

— 421.50 Кб (Скачать файл)

      Интерполяционная  формула- для приближенного вычисления значений функции , основанного вычисления на замене приближаемой функции более простой в каком- то смысле функцией


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

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

      В ряде случаев (например, при интерполировании алгебраическими многочленами) параметры  могут быть явно выражены из системы , и тогда непосредственно используется для приближенного вычисления значений функции .

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

      Интерполяционная  формула Эверетта: Интерполяционные формулы Грегори- Ньютона построенные по нисходящим или восходящим разностям, наиболее целесообразно применять в начале или конце таблицы. При этом для достижения высокой степени точности иногда приходится рассматривать разности, отстоящие достаточно далеко от интересующих нас значений функции или . Поэтому на средних участках таблицы лучше результаты дают интерполяционные формулы, построенные на базе центральных разностей, то есть разностей, которые ближе всего расположены к центральной сотке, содержащей .

      К интерполяционным формулам с центральными разностями относятся формулы Гаусса, Стирлинга, Бесселя, Эверетта и многие другие; формула Эверетта получила наибольшее распространение, она была получена 1900 г.:

 где  ; ; .

      Формуле Эверетта так же можно придать  форму, наиболее удобную для вычисления:

если  для ее коэффициентов ввести обозначения

     

 

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

; ;  
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

2.2. Интерполяционная формула Ньютона

     Если  точки x0, x1, ..., xn расположены на равных расстояниях (xk = x0 + kh), многочлен Pn(x) можно  записать так:

     

(здесь x0 + th = х, а Dk — разности k-го порядка: Dk yi = Dk — 1 yi +1 — Dk — 1yi).

     Это так называемая формула Ньютона для интерполирования вперёд; название формулы указывает на то, что она содержит заданные значения у, соответствующие узлам интерполяции, находящимся только вправо от x0. Эта формула удобна при интерполировании функций для значений х, близких к x0. При интерполировании функций для значений х, близких к наибольшему узлу хn, употребляется сходная формула Ньютона для интерполирования назад. При интерполировании функций для значений x, близких к xk, формулу Ньютона целесообразно преобразовать, изменив начало отсчёта.

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

2.3. Тестовый пример

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

Xi 2.95 2.97 2.99 3.01 3.03 3.05 3.07 3.09 3.11 3.13
Yi 113.84 119.68 106.28 120.68 107.43 114.88 115.53 117.4 120.21 118.74

X=2.98

Xi Yi ∆yi 2yi 3yi 4yi 5yi 6yi 7yi 8yi 9yi
2.95 113.84                  
    5.82                
2.97 119.68   -19.2              
    -13.82   46.98            
2.99 106.28   27.78   -102.4          
    14.4   -55.4   206.19        
3.01 120.68   -27.6   103.78   -385.8      
    -13.2   48.35   -179.6   675.8    
3.03 107.43   20.7   -75.85   291   -1121  
    7.45   -27.5   11.37   -446   1170
3.05 114.88   -6.8   35.52   -155.1   648.3  
    0.65   8.02   -43.79   202.1    
3.07 115.53   1.22   -8.27   47      
    1.87   -0.25   3.21        
3.09 117.4   0.97   -5.05          
    2.84   -5.31            
3.11 120.21   -4.34              
    -1.5                
3.13 118.74                  

X0=2.97 ,  h=0.02

q=x-x0/h=2.98-2.97/0.02=0.01/0.02=0.5

y(x)=y0+q∆y+q)q-1)/2!*∆2y0+q(q-1)(q-2)/3!*∆2y0+…+q(q-1)…(q…n+1)/n!*∆ny0

y(2.98)=119.66+0.5(-13.38)+0.5(0.5-1)/1*2*27.78+0.5(0.5-1)(0.5-2)/1*2*3*(-55.43)+0.5(0.05-1)(0.5-2)(0.5-3)/1*2*3*4*103.78+0.5(0.5-1)(0.5-2)(0.5-3)(0.5-4)/1*2*3*4*5*(-179.63)+ 0.5(0.5-1)(0.5-2)(0.5-3)(0.5-4)(0.5-5)/1*2*3*4*5*6*291+0.5(0.5-1)(0.5-2)(0.5-3)(0.5-4)(0.5-5)(0.5-6)/1*2*3*4*5*6*7*(-446.16)+0.5(0.5-1)(0.5-2)(0.5-3)(0.5-4)(0.5-5)(0.5-6)(0.5-7)/1*2*3*4*5*6*7*8*648.32=75.422

2.4. Разработка алгоритма и программы вычисления функции в приложении 2.1

 
 
 
 
 
 
 
 
 
 
 
 

  Заключение

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

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

  Список  литературы

  1. Архангельский Н.А. Вычислительные методы алгебры в приемах и задачах. М.: МАИ, 1976.
  2. Васильев Ф.П. Численные методы решения экстремальных задачь. М.: Наука,1988.
  3. Васильков Ф.В., Василькова Н.Н. Компьютерные технологии вычислений в математическом моделировании: Учеб. Пособие. М.: Финансы и статистика, 1999.
  4. Фильчаков П.Ф., Справочник по высшей математике. Киев: Наукова думка, 1974.
  5. Фильчаков П.Ф., Численные методы. Киев: Наукова думка, 1976.
  6. Большая математическая энциклопедия. М.: Олма-Пресс, 2004
  7. Демидович Б.П., Марон И.А. Основы вычислительной математики. М.: Наука, 1970.
  8. Тихонов А.Н., Вводные лекции по прикладной математике. М.: Наука, 1984.
  9. Калиткин Н.Н., Численные методы. М.: Наука, 1987.
  10. Корн Г., Корн Т. Справочник по математике. М.: Наука, 1984.
 
 
 
 
 
 
 
 

Приложение 1.1.

#include <math.h>

#include <stdio.h>

double f(double x)

{

   return 5^x-3*x-5;

}

double findRootChord (double a,

                 double b,

                 double eps,

                 long max_step,

                 double (&f)(double))

{

   double f_a = f(a);

   double f_b = f(b);

   double xn;

   for(long k=0; k<max_step; k++)

   {

            xn = a-f_a*(b-a)/(f_b-f_a);      double f_xn = f(xn);

      if(fabs(f_xn)<eps)    

     {

       break;

      }

      if(f_xn*f_b<0)

      {                          

       a = xn; f_a = f_xn; 

      }

      else

      {

       b = xn; f_b = f_xn;

      }

   }

   return xn;

}

void main()

{

clrscr();

   cout.precision(6);

   cout.setf(ios::fixed|ios::showpoint);

   double x = findRootChord(-10,1,.0000001,10000,f);

   cout<<"x =    "<<x<<endl;

   cout<<"f(x) = "<<f(x)<<endl;

   getch();

}

    
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

  Приложение 2.1.

  struct files

    {

     float x;

     float y;

     struct files *radr;

    }*w_f, *r_f, *l_f; 

   struct msp

   {

    struct msp *radr1;

    float z;

   } *w_msp, *r_msp, *l_msp; 

   struct fll

   {

Информация о работе Методы решения нелинейных уравнений