«Методы решения нелинейных уравнений». КУРСОВАЯ РАБОТА по дисциплине «Информатика и программирование».

выбираем x0=a. Рассмотрим геометрический смысл метода . Рассмотрим график

функции y=f(x). Пусть для определенности f `(x) > 0 и f “(x) > 0 (рис. 1).

Проведем касательную к графику функции в точке B(b,f(b)). Ее уравнение

будет иметь вид:

y = f(b) + f \'(b) * (x -b)

Полагая в уравнении y = 0 и учитывая что f \'(x) ** 0, решаем его

относительно x. Получим :

x = b - (f (b) /f `(b))

Нашли абсциссу x1 точки c1 пересечения касательной с осью ox :

x1 = b - (f (b) - f \' (b))

Проведем касательную к графику функции в точке b1 (x1; f (x1)).Найдем

абсциссу x2 точки с2 пересечения касательной с осью Ox :

x2 = x1 - (f (x1)/( f \'(x1))

Вообще :

xk+1=x k - (f(x k)/f \'(x k)) (3)

Таким образом, формула (3) дает последовательные приближения (xk) корня,

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

точке b k(x k;f(x k0) метод уточнения корня c [a;b] уравнения f(x) = 0 с

помощью формулы (3) называется методом касательной или методом Ньютона.

Геометрический смысл метода касательных состоит в замене дуги y = f (x)

касательной, одной к одной из крайних точек . Начальное приближение x0 = a

или x0 = b брать таким, чтобы вся последовательность приближения х k

принадлежала интервалу ]a;b[ . В случае существования производных f \', f

”, сохраняющих свои знаки в интервале, за х0 берется тот конец отрезка

[a;b], для которого выполняется условие f \'(х0) * f (х0) > 0. Для оценки

приближения используется общая формула :

|c-x k-1 | ** | f (x k+1)/m| , где m = minf\'(x) на отрезке [a;b] .

На практике проще пользоваться другим правилом :

Если на отрезке [a;b] выполняется условие 0 < m < | f (x)| и ** **

заданная точность решения, то неравенство | x k+1-x k| ** ** влечет

выполнение неравенства |c-x k-1| ** ** **

В этом случае процесс последовательного приближения продолжают до тех пор,

пока не выполнится неравенство :|c-x k-1| ** ** **

Упрощенный метод Ньютона:   0x01 graphic

, n=0,1,…

Метод секущих:  0x01 graphic

, n=0,1,…

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

Для заданного нелинейного уравнения вида f(x)=0 графическим или

аналитическим способом найти интервалы локализации корней, 5^x-3x-5=0

1. 5^x-3x-5=0; y=5^x y=3x-5

5^x=3x+5 x -2 -1 0 1 2 x -2 2

y 0,04 0,2 1 5 25 y -1 11

a. графический метод

Первое решение находится в интервале (-2;-1). Второе в интервале (1;2)

0x08 graphic

0x01 graphic

б) метод секущих

1) (-2;-1)

f(x)=5^x-3x-5

f(-2)=5^-2+6-5=1/25+1=26/25=1.04>0

f(-1)=5^-1+3-5=1/5-2=-1.80

x[1]=a-(b-a)f(a)/f(b)-f(a)=1-(2-1)*(-3)/-14+3=1+3/17=1.1765

f(1.1765)=5^1.1765+3*1.1765-5=-1.8869

#include

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

#include

float FileFunction()

{ float h;

FILE *in;

in=fopen(\"spisok.txt\",\"r\");

for (;!feof(in);)

{

w_f=(struct files *)malloc(sizeof(struct files));

if(l_f==NULL) {l_f=w_f;}

else {r_f->radr=w_f;}

fscanf(in,\"%f\",&w_f->x);

fscanf(in,\"%f\",&w_f->y);

r_f=w_f;

}w_f=l_f;

fclose(in);

w_f=l_f->radr;

h=(w_f->x)-(l_f->x);

return h;

}

void TableMin()

{

float s,s1,p;

do

{

s=w_f->y;

w_f=w_f->radr;

s1=w_f->y;

p=s1-s;

w_msp=(struct msp *)malloc(sizeof(struct msp));

w_fll=(struct fll *)malloc(sizeof(struct fll));

if(l_msp==NULL){l_msp=w_msp;}

else{r_msp->radr1=w_msp;}

if(l_fll==NULL){l_fll=w_fll;}

else{r_fll->radr2=w_fll;}

w_fll->a=p;r_fll=w_fll;

w_msp->z=p;r_msp=w_msp;

}

while(w_f!=r_f);

w_msp=l_msp;

return;

}

void TableMax()

{

float p,s,s1,i,c;

for(i=1;iz;

l_msp=NULL;

do

{

s=c;

w_msp=w_msp->radr1;

c=w_msp->z;

s1=w_msp->z;

p=s1-s;

w_fll=(struct fll *)malloc(sizeof(struct fll));

r_fll->radr2=w_fll;

w_fll->a=p;r_fll=w_fll;

r_msp->radr1=w_msp;

if(l_msp==NULL){w_msp->z=p;l_msp=w_msp;}

else{w_msp->z=p;}

}while(w_msp!=r_msp);

r_msp=w_msp;

w_msp=l_msp;

}

return;

}

float UX(float x,float h)

{

float u,u1;

int i=1;

w_f=l_f;

while(w_f!=r_f){w_f=w_f->radr;i++;}

i=(i/2);

for(w_f=l_f;i>=1;i--){w_f=w_f->radr;}

u=(x-(w_f->x))/h;

w_u=(struct u *)malloc(sizeof(struct u));

l_u=w_u;

w_u->u=u;

r_u=w_u;

for(i=1;iu);

w_u=(struct u *)malloc(sizeof(struct u));

r_u->uadr=w_u;

w_u->u=u1;

r_u=w_u;

}

return u;

}

float VX(float u)

{

float v1,v,i;

v=1-u;

w_v=(struct v *)malloc(sizeof(struct v));

l_v=w_v;

r_v->vadr=w_v;

w_v->v=v;

r_v=w_v;

for(i=1;iv);

w_v=(struct v *)malloc(sizeof(struct v));

r_v->vadr=w_v;

w_v->v=v1;

r_v=w_v;

}

return 1;

}

float Summa()

{

int j,i=1;

float s,s1,p;

w_f=l_f;

w_fll=l_fll;

w_u=l_u;

w_v=l_v;

while(w_f!=r_f){w_f=w_f->radr;i++;}

i=(i/2);

for(w_f=l_f;i>=1;i--){w_f=w_f->radr;}

s=(w_f->y)*(w_v->v);

w_f=w_f->radr;

s1=(w_f->y)*(w_u->u);

w_f=l_f;

while(w_f!=r_f){w_f=w_f->radr;i++;}

i++;

j=i;

do

{

if(i==0){j--;}

i=j;

j=i-1;

i=j;

for(;i>=1;i--){w_fll=w_fll->radr2;}

i=j;

for(i=((i/2)-1);i>=1;i--){w_fll=w_fll->radr2;}

w_v=w_v->vadr;

s=s+(w_fll->a)*(w_v->v);

i=j;

for(i=((i/2));i>=1;i--){w_fll=w_fll->radr2;}

}while(w_fll!=r_fll);

w_fll=l_fll;

w_f=l_f;

while(w_f!=r_f){w_f=w_f->radr;i++;}

j=i;

w_u=l_u;

do

{

j=i;

for(;i>=1;i--){w_fll=w_fll->radr2;}

i=j-1;

for(i=((i/2)+1);i>=1;i--){w_fll=w_fll->radr2;}

w_u=w_u->uadr;

s1=s1+(w_fll->a)*(w_u->u);

i=j-1;

j=0;

i=i-1;

for(i=((i/2));i>=1;i--,j++){w_fll=w_fll->radr2;}

i=j*2;

}while(w_u!=r_u);

p=s1+s;

return p;

}

void main()

{

float p,u,h,x;

l_msp=NULL;l_fll=NULL;l_f=NULL;

w_u=NULL;r_u=NULL;l_u=NULL;

w_v=NULL;r_v=NULL;l_v=NULL;

h=FileFunction();

w_f=l_f;

TableMin();

TableMax();

printf(\"\\n BBEDuTE X=\");

scanf(\" %f\",&x);

u=UX(x,h);

VX(u);

p=Summa();

printf(\"\\nOTBET: %3.4f\",p);

getch();

}

0x08 graphic

0x01 graphic

3

+----+

|x* |

+----+

+-----+

|]x[s |

+-----+

+-------+

|]x[n2 |

+-------+

+-------+

|]x[n1 |

+-------+

+----+

|N |

+----+

+---+

|М |

+---+

+---+

|x |

+---+

+---+

|y |

+---+

+------+

|y = |

|f(x) |

+------+

+---+

|b |

+---+

+---+

|a |

+---+

10

-2

-1

2

1

y=5^x

y=3x-5

B

A

Конец

«OTBET: »

p

p=Summa();

VX(u);

u=UX(x,h);

x

BBEDuTE X=

TableMax();

TableMin();

w_f=l_f;

h=FileFunction();

l_msp=NULL;l_fll=NULL;l_f=NULL;

w_u=NULL;r_u=NULL;l_u=NULL;

w_v=NULL;r_v=NULL;l_v=NULL;

Начало

Начало

Конец

Вывод значения x на печать

Abs(b-x) меньше заданной точности

Расчет следующего значения X= x по формуле:

x=a-f(a)*(b-a)/(f(b)-f(a))

Процедура для расчета значения заданной функции Y = y при значении X = x

Расчёт значения Y = c при некотором значении X = a

Сохранение предыдущего значения x в переменной b

Выбор значения Х = x

Страницы: 1, 2



Реклама
В соцсетях
рефераты скачать рефераты скачать рефераты скачать рефераты скачать рефераты скачать рефераты скачать рефераты скачать