Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.79/34: Рейтинг темы: голосов - 34, средняя оценка - 4.79
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 44
1

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

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

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

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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.03.2011, 16:00
Ответы с готовыми решениями:

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

Найти решения нелинейного уравнения численным методом Ньютона
ПОМОГИТЕ ПОЖАЛУЙСТА.Написать программу для задачи:нужно найти решения неленейного уравн....

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

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

8
126 / 126 / 42
Регистрация: 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
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 44
24.03.2011, 16:36  [ТС] 3
Да в том то и дело что требуют чтобы было все на одном экране, то есть применить вот такой метод не получится, нужно чтобы сначала щел шаговый метод а за ним сразу метод половинного деления, на одном экране.
0
126 / 126 / 42
Регистрация: 12.03.2011
Сообщений: 227
24.03.2011, 16:47 4
Можно конечно вызвать сначала one(), а потом two() в main(), без запросов какую функцию вводить. А если всё в одной функции, то это довольно странный подход, который обычно не находит одобрения. Если так, то вам надо колдовать с переменными, менять их на какие-нибудь другие, а то они повторяются. Но это очень рутинная работа.
0
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
126 / 126 / 42
Регистрация: 12.03.2011
Сообщений: 227
24.03.2011, 16:58 6
Цитата Сообщение от exovoini Посмотреть сообщение
Это правильно будет?
Не знаю что нужно вашему преподу, но я бы так и сделал.
0
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 44
24.03.2011, 17:00  [ТС] 7
Хорошо тем более другого варианта я и не нахожу просто уже все что можно ей показал все ей не то. Спасибо большое за помощь!
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
24.03.2011, 17:58 8
Ты же локализацию настроил, зачем на транслите мучаться.)
Да и cout с printf в одной программе лучше не мешать.
1
0 / 0 / 0
Регистрация: 17.10.2010
Сообщений: 44
24.03.2011, 18:03  [ТС] 9
Сейчас поправлю)) Спасибо))
0
24.03.2011, 18:03
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.03.2011, 18:03
Помогаю со студенческими работами здесь

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

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

Разработка программы для решения нелинейного уравнения методом секущих
Доброй ночи, помогите, пожалуйста, с программой: Программа должна быть написана на языке Pascal....

Метод спуска для решения нелинейного уравнения
Пожалуйста приведите пример решения нелинейного уравнения 2x4-8x3+8x2-1 методом спуска(не...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru