Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
методичка только 2 cem си++l.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
265.22 Кб
Скачать

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

Постановка задачи: найти корень нелинейного уравнения

ln(x) - 2·x + 2.5 =0

на отрезке [1; 2] методом половинного деления с точностью е = 0,001.

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

#include <iostream.h>

#include <iomanip.h>

#include <math.h>

double F (double x)

{ return (log(x)-2*x+2.5);}

int main()

{ double a,b,x,eps;

int k=0;

cout<<"Vvedite a b"<<endl;

cin>>a>>b;

cout<<"Vvedite tochnost"<<endl;

cin>>eps;

cout.precision(5);

cout.setf(ios::left);

cout<<"___________________________"<<endl;

cout<<setw(12)<<"a"<<setw(12)<<"x"<<setw(12)<<"b"

<<setw(12)<<"F(a)"<<setw(12)<<"F(x)"<<setw(12)<<

"F(b)"<<endl;

cout<<"___________________________"<<endl;

while(fabs(a-b)>eps)

{x=(a+b)/2;

cout<<setw(12)<<a<<setw(12)<<x<<setw(12)<<b

<<setw(12)<<F(a)<<setw(12)<<F(x)<<setw(12)<<

F(b)<<endl;

if(F(a)*F(x)<0)

b=x;

else

a=x;

k++;

}

cout<<endl<<"koren="<<x<<" F("<<x<<")="<<F(x);

cout<<endl<<"max chislo iter"<<k;

return 0;}

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

Постановка задачи: найти корень нелинейного уравнения

ln(x) - 2·x + 2,5 = 0

на отрезке [1; 2 ] методом Ньютона с точностью е = 0,001.

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

#include <iostream.h>

#include <iomanip.h>

#include <math.h>

double F (double x)

{ return (log(x)-2*x+2.5);}

double F1 (double x)

{ return ( 1/x-2 );}

int main()

{ double x0,x1,eps;

int k=0;

cout<<"Vvedite nachal znach"<<endl;

cin>>x0;

cout<<"Vvedite tochnost"<<endl;

cin>>eps;

cout.precision(5);

cout.setf(ios::left);

cout<<"______________________________"<<endl;

cout<<setw(12)<<"x0"<<setw(12)<<"F(x0)"<<setw(12)

<<"x1"<<setw(12)<<"F(x1)"<<endl;

cout<<"______________________________"<<endl;

while(fabs(F(x0))>eps)

{

x1=x0-F(x0)/F1(x0);

cout<<setw(12)<<x0<<setw(12)<<F(x0)<<setw(12)

<<x1<<setw(12)<<F(x1)<<endl;

x0=x1;

k++;

}

cout<<endl<<"koren="<<x1<<" F("<<x1<<")="<<F(x1)<<endl;

cout<<"vipolneno iter"<<k;

return 0;}

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

Постановка задачи: найти корень нелинейного уравнения

ln(x) - 2·x + 2,5 = 0

на отрезке [1; 2 ] методом Ньютона с точностью е = 0,001.

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

#include <iostream.h>

#include <iomanip.h>

#include <math.h>

double F (double x)

{ return (log(x)-2*x+2.5);}

double S (double x)

{ return ( (log(x)+2.5/2 );}

int main()

{ double x0,x1,eps;

int k,kmax;

cout<<"Vvedite nachal znach"<<endl;

cin>>x0;

cout<<"Vvedite tochnost"<<endl;

cin>>eps;

cout<<"Vvedite max chislo iter"<<endl;

cin>>kmax;

cout.precision(5);

cout.setf(ios::left);

cout<<"______________________________"<<endl;

cout<<setw(12)<<"x0"<<setw(12)<<"F(x0)"<<setw(12)<<

"x1"<<setw(12)<<"F(x1)"<<endl;

cout<<"_______________________________"<<endl;

k=0;

while(fabs(F(x0))>eps)

{

x1=S(x0);

cout<<setw(12)<<x0<<setw(12)<<F(x0)<<setw(12)<<x1

<<setw(12)<<F(x1)<<endl;

if(k>kmax) {cout<<"vipolneno max iter"<<endl;

break;}

x0=x1;

k++;

}

cout<<endl<<"koren="<<x1<<" F("<<x1<<")="<<F(x1);

cout<<endl<<"chislo iter"<<k;

return 0;}