рефераты конспекты курсовые дипломные лекции шпоры

Реферат Курсовая Конспект

II. Метод касательных.

II. Метод касательных. - раздел Информатика, Указатель на функцию Строится Последовательность Приближений К Корню X0 , X...

Строится последовательность приближений к корню

x0 , x1 , x2 ,. . . xn-1 , xn , xn+1 ,. . . .,

Где

x0 = α, если f(α) *f’’(α)>0

β, в противном случае

 

последовательность строится по формуле:

x n+1 = x n– f(xn) / f’ (xn)

 

Условие окончания: |xn+1- xn|< ε;

 

III. Метод хорд.

Строится последовательность приближений к корню

x0 , x1 , x2 ,. . . xn-1 , xn , xn+1 , . . . . . .

Где

x0= α, если f(α)*f’’(α)<0

β, в противном случае

последовательность строится по формуле:

 

xn+1=xn* f(xn)

Условие окончания: |xn+1- xn|< ε;

 

Пример 1. Написать функцию для решения уравнения f(x)=0 методом касательных. Уравнение e-x-x = 0.

Требуется определить две функции для f (x) и f ’(x).

#include <iostream>

#include <cmath>

using namespace std;

double f (double x) {return exp(-x)-x;}

// значение функции f(x)

double f1(double x) {return (-exp(-x)-1); }

//значение производной f’(x)

typedef double (*TF) (double);

//TF тип указателя на функцию типа f и f1

 

double mettang (double x0, double eps, TF pf, TF pf1)

{ double x1, x2=x0;

do

{x1=x2;

x2=x1 – pf(x1)/ pf1(x1);

}while (fabs (x1- x2)>=eps);

return x2;

}

int main()

{ double x0,eps;

cout<<”--> x0, epsn”;

cin>> x0>> eps;

cout<<”корень=”<< mettang (x0, eps, f, f1) << ’n’;

return 0;

}

Пример 2. Вычислить приближённое значение определённого интеграла на заданном отрезке [a,b] от задаваемой функции f(x). Есть несколько способов:

a)Отрезок интегрирования [a,b] разбивается на N равных частей, шаг деления h=(b-a)/N, на каждом отрезке площадь заменяют прямоугольником с высотой, равной значению функции на левом, правом конце, либо трапецией с основаниями – значениями функции на концах, либо объединяют по два отрезка и заменяют кусочек функции параболой на этих отрезках. Соответственно получают формулы левых, правых прямоугольников, трапеций и парабол (Симпсона):

J(a,b,N,f(x))левых пр.= h*(f(a)+f(a+h)+ f(a+2*h)+……+f(a+(N-1)*h))

 

 

J(a,b,N,f(x))правых пр.= h*(f(a+h)+f(a+2*h)+ ……+f(a+(N-1)*h)+f(b))

 

 

J(a,b,N,f(x))трапеций= h/2*(f(a)+2*f(a+h)+ ……+2*f(a+(N-1)*h)+f(b))

 

 

J(a,b,N,f(x))парабол= h/3* (f(a)+4*f(a+h)+2*f(a+2*h) +4*f(a+3*h)

+2*f(a+4*h)+ ……+4*f(a+(N-1)*h)+f(b))

 

Значение интеграла получается с некоторой точностью, для достаточно гладкой функции f(x) этой точности часто хватает, если нет - можно увеличить N.

 

b)Задачу можно поставить и так: вычислить с заданной точностью eps приближённое значение интеграла на заданном отрезке [a,b] от задаваемой функции f(x). В этом случае строят последовательность приближённых значений интеграла, пока два соседние приближения не станут близки: |Jn+1-Jn |<eps.

Последовательные значения интеграла получаются по выбранной формуле для делений отрезка интегрирования на N, 2*N, 4*N,и т.д.

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

Рассмотрим формулу трапеций.

У

 

 

 
 


a a+h a+2h a+3h b X

h=(b-a)/N;

IN= h/2*(f(a)+f(b)+2*S); //S-сумма значений в средних точках

N1=2*N; h1=h/2;

I2N= h1/2*(f(a)+f(b)+2*(S+S’));//S’-сумма значений в новых точках

Поэтому новое приближение I2N надо вычислять так:

I2N = IN/2+ S'*h1; //без пересчёта значений в старых точках.

 

 

Для формулы Симпсона (N- чётное):

IN =h/3*(f(a)+4*f(a+h)+2*f(a+2*h) +

+4*f(a+3*h)+2*f(a+4*h)+ ……+4*f(a+(N-1)*h)+f(b))=

=S0 + 4*S1 + 2*S2;

где S0= h/3*(f(a)+f(b));

S1= h/3*(f(a+h)+f(a+3*h)+……f(a+(N-1)*h));

//сумма в ”нечётных” точках.

S2= h/3*(f(a+2*h)+f(a+4*h)+……f(a+(N-2)*h));

//сумма в ”чётных” точках.

N1=2*N; h1=h/2;

Для вычисления I2N надо пересчитать S0, S1, S2.

S0нов= S0/2 ; S2нов=(S1+S2)/2; //все точки старые.

S1нов=h1/3*(f(a+h1)+f(a+h1+h)+f(a+h1+2*h)+…+f(a+h1+2*(N1-1)*h)) //здесь все новые точки.

I2N =S0 нов +4* S1нов +2* S2нов ;

Пример программы для a)

#include <iostream>

using namespace std;

double f(double x)

{return x*x;}

//можно не опиcывать тип указателя на функцию

double metparabol(double a,double b,int n, double(*tf)(double))

{double h,x,s,e;

int k;

h=(b-a)/n;

s=h/3*(tf(a)+tf(b));

k=4; x=a+h; e=b-h/2;

while (x<e)

{s=s+k*tf(x)*h/3;

x=x+h; k=6-k;

}

return s;

}

int main ()

{double a,b;

int n;

cout<<"vvedite a,b,n n";

cin>>a>>b>>n;

cout<< metparabol(a,b,n,f)<<endl;

return 0; }

– Конец работы –

Эта тема принадлежит разделу:

Указатель на функцию

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

Если Вам нужно дополнительный материал на эту тему, или Вы не нашли то, что искали, рекомендуем воспользоваться поиском по нашей базе работ: II. Метод касательных.

Что будем делать с полученным материалом:

Если этот материал оказался полезным ля Вас, Вы можете сохранить его на свою страничку в социальных сетях:

Все темы данного раздела:

Эта работа не имеет других тем.

Хотите получать на электронную почту самые свежие новости?
Education Insider Sample
Подпишитесь на Нашу рассылку
Наша политика приватности обеспечивает 100% безопасность и анонимность Ваших E-Mail
Реклама
Соответствующий теме материал
  • Похожее
  • Популярное
  • Облако тегов
  • Здесь
  • Временно
  • Пусто
Теги