Решение алгебраических и тригонометрических уравнений. Метод половинного деления

Страницы работы

6 страниц (Word-файл)

Содержание работы

Белорусский Государственный Университет Транспорта

кафедра «Высшая Математика»

Типовой расчёт

по математическому анализу

Выполнил:

студент группы ЭС-11

Пащенко В.А

Проверил:

преподаватель

Дудко С.А.

Гомель 2005.
Лабораторная работа №1

Решение алгебраических и тригонометрических уравнений.

Метод половинного деления:

Пусть функция F(x) непрерывна на [a;b] и имеет в точках a и b разные знаки, т.е. . Начальное приближение выбирают равным , т.е. делит отрезок пополам и выбирают его середину. Если F()=0, то – корень уравнения. В противном случае выбирают тот отрезок из [a, ][,b], на концах которого F(x) имеет разные знаки, т.к. корень лежит на этой половине.

Если требуется точность , то деление пополам продолжают до тех пор, пока длина отрезка не станет меньше 2. В этом случае середина отрезка дает значение корня с точностью .

Программа на языке C++:

#include <stdio.h>

#include <math.h>

float e,a,b,x,y,ye;

void main()

{ a=0; b=5; y=999; ye=0; e=0.001;

while(fabs(y-ye)>e)

{ye=y;

x=(a+b)/2;

y=exp(0.724*x)-2.831*x;

if(y>0) b=x;

if(y<0) a=x;

if(y==0)

{y=0; ye=y;}}

fprintf(stdprn,"x=%f\n",x);

fprintf(stdprn,"y=%f\n",y);}

Результаты:

x=2.915344

y=0.000754


Лабораторная работа №2

Цель работы: представить тригонометрическим многочленом третьего порядка функцию F(x).

t

p/6

p/3

p/2

2p/3

5p/6

p

7p/3

4p/3

3p/2

5p/3

11p/6

2p

F(t)

2

4

3

30

30

10

5

10

20

25

30

20

Основные формулы:

Программа на языке С++:

#include <stdio.h>

#include <math.h>

double x[]={0,M_PI/6,M_PI/3,M_PI/2,2*M_PI/3,5*M_PI/6,M_PI,7*M_PI/6,          4*M_PI/3,3*M_PI/2,5*M_PI/3,11*M_PI/6};

double y[]={-5,-10,-30,-30,-10,-5,-5,-5,-10,-30,-30,-30};

double ab(int k,int cos_or_sin) {

double s=0;

for(int i=0;i<12;s+=y[i]*(cos_or_sin?sin(k*x[i]):cos(k*x[i]))/6,i++);

return s; }

void main(void) {

double yy=ab(0,0)/2;

for(int k=4;k<=6;k++) {

printf("k=%d\n   y(x)=      yy(x)=\n",k);

for(int i=0;i<12;printf("%10.4f %10.4f\n",y[i],yy),yy=ab(0,0)/2,i++)

for(int n=1;n<=k;yy+=ab(n,0)*cos(n*x[i])+ab(n,1)*sin(n*x[i]),n++); }}

Результаты:

y(x)                 yy(x), k=3       yy(x), k=4

2.0000             5.4940             5.2440

4.0000             -2.6368           0.1132

3.0000             9.1890             6.6890

30.0000           27.5463           27.2963

30.0000           28.4450           31.1950

10.0000           12.9330           10.4330

5.0000             3.5060             3.2560

10.0000           9.6368             12.3868

20.0000           20.3110           17.8110

25.0000           26.4537           26.2037

30.0000           27.5550           30.3050

20.0000           20.5670           18.0670


Лабораторная работа №3

Цель работы: приближенное вычисление определенных интегралов методом трапеций и методом Симпсона.

Пусть требуется вычислить:

Если F(x) непрерывна на отрезке [a;b], и известна ее первообразная , то ее можно вычислить:

 

Метод трапеций:

*

                                                   

                          

             

                                    

Основан на замене графика функции F(x) ломаной линией .

Разобьем отрезок интегрирования на n разных частей:

И с помощью прямых  построить n-трапеций. Сумма площадей их примерно равна S криволинейной трапеции aABb, т.е.

, где

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

Погрешность измерения равна:

Метод Симпсона:

Основан на замене графика подинтегральной функции объединением парабол, оси которых параллельны оси Ox.

Для вычисления интеграла по методу Симпсона отрезок интегрирования [a;b] разбивается на 2r равных частей, где 2r зависит от заданной точности :

, где

Вычисление интеграла проводится по формуле Симпсона.

Программа на языке С++:

Для метода трапеций:                                Для метода Симпсона:

#include <iostream.h>                                  #include <iostream.h>

#include <math.h>                                        #include <math.h>

#define n 10                                                   #define n 10

#define p 3.141592653589793238                #define p 3.141592653589793238

#define a 0                                                     #define a 0

float y[10],h,b,c,xk[10],S,A=0;                     float y[30],h,b,c,xk[30],S,A=0,B=0;

int k;                                                               int k;

main()                                                            main()

{b=p/2;                                                          {b=p/2;

h=(b-a)/n;                                                       h=(b-a)/(2*n);

for (k=0;k<=n;k++)                                       for (k=0;k<=2*n;k++)

{xk[k]=a+(k*h);                                            {xk[k]=a+(k*h);

y[k]=sin(xk[k])/xk[k];}                                 y[k]=sin(xk[k])/xk[k];}

for (k=1;k<=n-1;k++) A=A+y[k];                for (k=1;k<=(2*n)-1;k=k+2) A=A+y[k];

S=((b-a)/n)*((y[0]+y[n])/2+A);                    for (k=2;k<=(2*n)-2;k=k+2) B=B+y[k];

cout << S << endl;                                         S=(h/3.)*(y[0]+y[n]+(4*A)+(2*B));

return 0;}                                                       cout << S << endl;

return 0;}

Результаты:

По методу трапеций интеграл равен: 1.291389

По методу Симпсона интеграл равен: 1.351486


Лабораторная работа №4

Решений дифференциальных уравнений методом Эйлера.

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

Разобьем отрезок на n равных отрезков точками .

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

Метод Эйлера:

В этом методе производная заменяется приближенной формулой

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

Аналогично находятся остальные приближенные значения.

где для

Программа на языке С++:

#include <stdio.h>                                                                           

#include <conio.h>

#include <math.h>

float f(float x, float y)                                                                               Результаты:

0

1

2

3

4

5

6

7

8

9

10

0

0.1

0.2

0.3

0.4

0.5

0.6

0.7

0.8

0.9

1

0

0.100000

0.199942

0.298490

0.394327

0.486234

0.573154

0.654245

0.728900

0.796746

0.857622

{float t;

t=1+0.6*y*sin(x)-1.25*y*y;

return t;}

void main(void)

{int a=0,b=1;

float h=0.1,y[11],tt,i=0;

y[0]=0;

clrscr();

while (i<=1)

{i=i+0.1;

tt=f(i,y[i-1]);

y[i]=y[i-1]+h*tt;

printf("%f\n",y[i]);}}

Похожие материалы

Информация о работе