Численные методы решения прикладных задач - page 88

88
Шаговый метод, метод половинного деления, метод Ньютона,
метод простой итерации. Решение в Microsoft Visual Studio
Код программы С++:
// pr2 NELIN common.cpp: определяет точку входа для консольного приложения.
//
#include
"stdafx.h"
#include
<iostream>
#include
<iomanip>
#include
<math.h>
usingnamespace
std;
double
xx0, xx1;
// промежуток в ответе шагового метода
double
a=0, b=1, h=0.2, e=0.1;
// исходные данные
double
F(
double
x)
{
return
pow(x,4.0)+2.0*pow(x,3.0)-x-1.0;}
double
F1(
double
x)
{
return
4.0*pow(x,3.0)+6.0*pow(x,2.0)-1.0;}
double
S(
double
x)
{
return
pow((x+1.0-pow(x,4.0))/2.0,1.0/3.0);}
void
shag_metod(){
double
x0=a, x1=x0+h;
while
(x1<=b) {
x1=x0+h;
if
(F(x0)*F(x1)<0){
cout<<
"x na intervale ["
<<x0<<
","
<<x1<<
"]"
<<endl;
xx0=x0;
xx1=x1;
}
x0=x1; }}
void
pol_del(){
int
k=0;
double
x=xx0;
a=xx0;
b=xx1;
while
(fabs(F(x))>e) {
x=(a+b)/2;
if
(F(a)*F(x)<0) b=x;
else
a=x;
k=k+1; }
cout<<setw(26)<<
"METOD POLOVINNOGO DELENIA:"
;
cout<<setw(5)<<
"x="
<<setw(10)<<x<<setw(5)<<
"k="
<<setw(5)<<k<<endl;}
void
nuton(){
int
k=0;
double
x2=xx0;
while
(fabs(F(x2))>e) {
x2=x2-F(x2)/F1(x2);
k=k+1; }
cout<<setw(26)<<
"METOD N'UTONA:"
;
cout<<setw(5)<<
"x="
<<setw(10)<<x2<<setw(5)<<
"k="
<<setw(5)<<k<<endl;}
void
pros_iter(){
int
k=0;
double
x3=xx0;
while
(fabs(F(x3))>e)
{
x3=S(x3);
k=k+1; }
cout<<setw(26)<<
"METOD PROSTOI ITERACII:"
;
cout<<setw(5)<<
"x="
<<setw(10)<<x3<<setw(5)<<
"k="
<<setw(5)<<k<<endl;}
int
main (){
cout<<
"e="
<<e<<endl;
shag_metod();
pol_del();
nuton();
pros_iter();
return
0;}
I...,78,79,80,81,82,83,84,85,86,87 89,90,91,92,93,94,95,96,97,98,...284
Powered by FlippingBook