Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 5.00
exovoini
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 44
#1

Программы для решения нелинейного уравнения - C++

24.03.2011, 16:00. Просмотров 1311. Ответов 8
Метки нет (Все метки)

Здравствуйте товарищи программисты. У меня к вам просьба. У меня есть две готовые программы для вычисления нелинейного уравнения шаговым методом и методом половинного деления. Работают они нормально но их две, а мне надо чтобы это все было в одной программе. Помогите пожалуйста их объединить в одну а то у меня не выходит. Спасибо! Вот программы:
Шаговый метод:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include <iostream>
#include <iomanip>
#include <math.h>
using namespace std;
 
double F(double x)
{
return (1-x+sin(x)-log(1+x));
}
int main()
{
double a,b,x0,x1,h,c,m;
int N;
 
 
cout<<"Vvedite a, b:"<<endl;
cin>>a>>b;
cout<<"Vvedite chislo iteracii:"<<endl;
cin>>N;
cout<<"Vvedite shag po x:"<<endl;
cin>>h;
 
cout.precision(5);
cout.setf(ios::left);
 
cout<<"_____________________"<<endl;
cout<<setw(12)<<"x"<<setw(12)<<"F(x)"<<endl;
cout<<"_____________________"<<endl;
 
x0=a;
cout<<setw(12)<<x0<<setw(12)<<F(x0)<<endl;
 
x1=x0+h;
while(x1<=b)
{
    x1=x0+h;
    cout<<setw(12)<<x1<<setw(12)<<F(x1)<<endl;
 
    if(F(x0)*F(x1)<0)
    cout<<"Koren naiden na intervale ["<<x0<<","<<x1<<"]"<<endl;
    x0=x1;
    cout<<endl; 
}
system ("pause");
return 0;
}
Метод половинного деления:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <stdio.h>
#include <math.h>
#include <conio.h>
#define e 0.001
double func (double x)
{
return (1 - x + sin (x) - log (1+x) );
}
int main ()
{
int x1,x2;
double x;
int k;
k=0;
x1=0.9;
x2=1.2;
x=0;
double a,b,c;
a=0.9;
b=1.2;
while (fabs (a-b) >e)
{
c=(a+b)/2;
if ( (func (c) *func (a)) <0) b=c;
else a=c;
k++;
}
printf ("Otvet:%f\n",a);
printf ("Koren naiden na iteracii:%d \n",k);
getch ();
return 0;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.03.2011, 16:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Программы для решения нелинейного уравнения (C++):

Численные методы решения нелинейного уравнения - C++
Доброе время суток, товарищи программисты. Есть задача: решить уравнение Cos(1.3x)=1/x. Численным методом. Написал программу для решения,...

Для заданного нелинейного уравнения - C++
Для заданного нелинейного уравнения: x−sin(x)=4 выполнить следующие действия: 1. Найти интервал изоляции одного из корней. 2....

Метод Ньютона и итераций для нелинейного уравнения - C++
Всем доброго времени суток) Помогите реализовать программу на С++ решающую уравнение 2x-2*x2-1=0 методом итерации и методом Ньютона: ...

Метод итераций для развязывания нелинейного уравнения - C++
- развязать заданое уравнение с точностью е = е (i – 1) / 10^(-3), і = 1, 2, ..., 4; e0 = 0.01 методом итераций. Прикинул немного,но...

Алгоритм и код программы решения уравнения Пуассона методом матричной прогонки - C++
Объясните, пожалуйста алгоритм и код на Си++ задачи: ∂2P/∂x2+∂2P/∂y2=-f(x,y)

Написать программу для решения уравнения на С++ - C++
Всем привет!!) Помогите с написанием программы для решения уравнения на C++. Буду очень благодарен) z = \frac{sin({x}^{2})}{1 + cos(x)}...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
LaГushan
124 / 124 / 14
Регистрация: 12.03.2011
Сообщений: 227
24.03.2011, 16:31 #2
Ну можно например вот так: сначала спрашивать, какой тип уравнения решать. Только лучше поделить этот код на функции, а то читаемость резко снижается
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <iostream>
#include <iomanip>
#include <math.h>
 
using namespace std;
#define e 0.001
 
double F(double x)
{
return (1-x+sin(x)-log(1+x));
}
 
void One()
{
   double a,b,x0,x1,h,c,m;
int N;
 
 
cout<<"Vvedite a, b:"<<endl;
cin>>a>>b;
cout<<"Vvedite chislo iteracii:"<<endl;
cin>>N;
cout<<"Vvedite shag po x:"<<endl;
cin>>h;
 
cout.precision(5);
cout.setf(ios::left);
 
cout<<"_____________________"<<endl;
cout<<setw(12)<<"x"<<setw(12)<<"F(x)"<<endl;
cout<<"_____________________"<<endl;
 
x0=a;
cout<<setw(12)<<x0<<setw(12)<<F(x0)<<endl;
 
x1=x0+h;
while(x1<=b)
{
        x1=x0+h;
        cout<<setw(12)<<x1<<setw(12)<<F(x1)<<endl;
 
        if(F(x0)*F(x1)<0)
        cout<<"Koren naiden na intervale ["<<x0<<","<<x1<<"]"<<endl;
        x0=x1;
        cout<<endl;     
}
system ("pause");
}
double func (double x)
{
return (1 - x + sin (x) - log (1+x) );
}
 
void Two()
{
  int x1,x2;
double x;
int k;
k=0;
x1=0.9;
x2=1.2;
x=0;
double a,b,c;
a=0.9;
b=1.2;
while (fabs (a-b) >e)
{
c=(a+b)/2;
if ( (func (c) *func (a)) <0) b=c;
else a=c;
k++;
}
printf ("Otvet:%f\n",a);
printf ("Koren naiden na iteracii:%d \n",k);
getch ();
}
 
 
int main ()
{
    int c;
    setlocale(LC_ALL,"rus");
    std::cout << "Шаговый метод(1) или половинное деление(2)?" << endl;
    std::cin >> c;
    if(c == 1)
        One();
    else if(c == 2)
        Two();
return 0;
}
Как-то так, если вам конечно нужно это.
1
exovoini
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 44
24.03.2011, 16:36  [ТС] #3
Да в том то и дело что требуют чтобы было все на одном экране, то есть применить вот такой метод не получится, нужно чтобы сначала щел шаговый метод а за ним сразу метод половинного деления, на одном экране.
0
LaГushan
124 / 124 / 14
Регистрация: 12.03.2011
Сообщений: 227
24.03.2011, 16:47 #4
Можно конечно вызвать сначала one(), а потом two() в main(), без запросов какую функцию вводить. А если всё в одной функции, то это довольно странный подход, который обычно не находит одобрения. Если так, то вам надо колдовать с переменными, менять их на какие-нибудь другие, а то они повторяются. Но это очень рутинная работа.
0
exovoini
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 44
24.03.2011, 16:53  [ТС] #5
Ну нам препод в универе сказала: Мне нужна одна программа которая сначала будет выводить решение уравнения шаговым методом и тут же рядом методом половинного деления. Иначе как запустить сразу две программы в одном экране я это понять не могу Попробовал запустить one(), а потом two() в main() по очереди без замены переменных. Ответы и интервал выдает правильные...
Сделал так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
#include <stdio.h>
#include <math.h>
#include <conio.h>
#include <iostream>
#include <iomanip>
#include <math.h>
 
using namespace std;
#define e 0.001
 
double F(double x)
{
return (1-x+sin(x)-log(1+x));
}
 
void One()
{
   double a,b,x0,x1,h,c,m;
int N;
 
 
cout<<"Vvedite a, b:"<<endl;
cin>>a>>b;
cout<<"Vvedite chislo iteracii:"<<endl;
cin>>N;
cout<<"Vvedite shag po x:"<<endl;
cin>>h;
 
cout.precision(5);
cout.setf(ios::left);
 
cout<<"_____________________"<<endl;
cout<<setw(12)<<"x"<<setw(12)<<"F(x)"<<endl;
cout<<"_____________________"<<endl;
 
x0=a;
cout<<setw(12)<<x0<<setw(12)<<F(x0)<<endl;
 
x1=x0+h;
while(x1<=b)
{
        x1=x0+h;
        cout<<setw(12)<<x1<<setw(12)<<F(x1)<<endl;
 
        if(F(x0)*F(x1)<0)
        cout<<"Koren naiden na intervale ["<<x0<<","<<x1<<"]"<<endl;
        x0=x1;
        cout<<endl;     
}
system ("pause");
}
double func (double x)
{
return (1 - x + sin (x) - log (1+x) );
}
 
void Two()
{
  int x1,x2;
double x;
int k;
k=0;
x1=0.9;
x2=1.2;
x=0;
double a,b,c;
a=0.9;
b=1.2;
while (fabs (a-b) >e)
{
c=(a+b)/2;
if ( (func (c) *func (a)) <0) b=c;
else a=c;
k++;
}
printf ("Otvet:%f\n",a);
printf ("Koren naiden na iteracii:%d \n",k);
getch ();
}
 
 
int main ()
{
int c;
setlocale(LC_ALL,"rus");
std::cout << "Шаговый метод" << endl;
One();
std::cout << "Метод половинного деления" << endl;
Two();
return 0;
}
Это правильно будет?
0
LaГushan
124 / 124 / 14
Регистрация: 12.03.2011
Сообщений: 227
24.03.2011, 16:58 #6
Цитата Сообщение от exovoini Посмотреть сообщение
Это правильно будет?
Не знаю что нужно вашему преподу, но я бы так и сделал.
0
exovoini
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 44
24.03.2011, 17:00  [ТС] #7
Хорошо тем более другого варианта я и не нахожу просто уже все что можно ей показал все ей не то. Спасибо большое за помощь!
0
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1287 / 1221 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
24.03.2011, 17:58 #8
Ты же локализацию настроил, зачем на транслите мучаться.)
Да и cout с printf в одной программе лучше не мешать.
1
exovoini
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 44
24.03.2011, 18:03  [ТС] #9
Сейчас поправлю)) Спасибо))
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.03.2011, 18:03
Привет! Вот еще темы с ответами:

Ошибка в коде для решения уравнения - C++
Здравствуйте, прохацкеры. Попытался составить программу для решения такого уравнения двумя методами: ...

Написать программу для решения уравнения на С++ - C++
Всем привет!!) Помогите с написанием программы для решения уравнения на C++. Буду очень благодарен) ...

Написать программу для решения уравнения - C++
y=sin(2x+1) х от -3 до 1 го, шаг 0,2 нужно решить функцию нужно на этой неделе, пожалуйста помогите

Написать функцию для решения уравнения - C++


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
24.03.2011, 18:03
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru