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

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

Войти
Регистрация
Восстановить пароль
 
Assign_me_plz
5 / 5 / 0
Регистрация: 05.06.2011
Сообщений: 40
#1

Методы поиска корней уравнения на отрезке, одна маленькая ошибка в коде, подскажите что не так - C++

18.04.2012, 03:16. Просмотров 474. Ответов 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
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
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
#include <iostream>
#include <stdio.h>
#include <fstream>
#include <math.h>
 
 
using namespace std;
 
double polinom( double x)
{
    double t = 0.2*pow(x,4) - pow(x,3) - 7*pow(x,2) + 11*x-2;
    return t;
}
 
double polinomd(double x)
{
    double t = 0.8*pow(x,3)-3*pow(x,2)-14*x+11;
    return t;
}
 
double iteracg(double x)
{
    double t = ((-0.2)*pow(x,4) +pow(x,3) +7*pow(x,2) +2)/11;
    return t;
}
 
double iteracgd(double x)
{
    double t = x *((-0.8/11)*pow(x,3)+(3/11)*pow(x,2)+(7/11));
    return t;
}
 
double bisec( double a, double b, double Eps, double f(double))
{
    ofstream out("BisectionResult.txt",ios::app);
    double c,x_l = (a < b)?(a):(b), x_r = (a >= b)?(a):(b);
    int i=0;
    c = (x_l + x_r)/2;
    while ( (fabs(x_l-x_r) >= Eps ) || (fabs(f(c)) >= Eps ) )
    {
        i++;
        c = ( x_r + x_l ) / 2;  
        out << x_l << " " << x_r << " " << fabs(x_l-x_r) << " " << f(c) << endl;    
        if ( (f(x_l)*f(c)) <= 0) 
            x_r = c;
        else x_l = c;
    }
    out << i << endl;
    return c;
}
 
double chord( double a, double b, double Eps, double f(double))
{
    ofstream out("SecantResult.txt",ios::app);
    double x_l = ( f(a) < 0)?(a):(b), x_r = ( f(a) >= 0)?(a):(b), c, c1;
    int i=0;
    c = (x_l*f(x_r)-x_r*f(x_l))/(f(x_r)-f(x_l));
    c1 = b;
    while( fabs(c1 - c) >= Eps || fabs(f(c)) >= Eps)
    {
        i++;
        c1 = c;
        c = (x_l*f(x_r)-x_r*f(x_l))/(f(x_r)-f(x_l));    
        out << c << " " << fabs(c1 - c) << " " << fabs(f(c)) << endl;
        if ( f(x_l)*f(c) <= 0) x_r = c;
        else x_l = c;
    } 
    out << i << endl;
    return c;
}
 
double newton( double a, double b, double Eps, double f(double), double g(double))
{
    ofstream out("Newton'sResult.txt",ios::app);
    double x0 = (a+b)/2, x1;
    int i = 1;
    if ( g(x0) != 0) 
        x1 = x0 - f(x0)/g(x0);
    else
    {
        out << " g(x) = 0" << i << endl;
        return 0;
    }   
    while ( fabs(x1 - x0) >= Eps || fabs(f(x1)) >= Eps)
    {
        i++;        
        out << x1 << " " << fabs(x1 - x0) << " " << fabs(f(x1)) << endl; 
        x0 = x1;
        if ( g(x0) != 0) 
            x1 = x0 - f(x0)/g(x0);
        else 
        {
            out << " g(x) = 0 " << i << endl;
            return 0;       
        }
    }
    out << i << endl;
    return x1;
}
 
double iterac( double a, double b, double Eps, double g(double),double f(double))
{
    ofstream out("SimpleIterationResult.txt",ios::app);
    double x1, t, x_l = ( g(a) < 0)?(a):(b), x_r = ( g(a) >= 0)?(a):(b), x0 = (x_r+x_l)/2;
    int i = 0;
    t = 2/(f(x_l+0.01)+f(x_r-0.01));
    if (g(a) > g(b)) 
        t=-t;
    x1 = x0-t*g(x0);
    while ( fabs(x1 - x0) >= Eps || fabs(g(x1)) >= Eps)
    {
        i++;        
        out << x1 << " " << fabs(x1 - x0) << " " << fabs(g(x1)) << endl; 
        x0 = x1;
        x1 = x0-t*g(x0);
    }
    out << i << endl;
    return x1;
}
 
int main()
{
    double t1 = bisec ( -4.8, -4.7, 0.00001, polinom ),t5 = bisec ( 0.2, 0.3, 0.00001, polinom ), t9 = bisec ( 1.1, 1.2, 0.00001, polinom ), t13 = bisec ( 8.4, 8.5, 0.00001, polinom );
    double t2 = chord ( -4.8, -4.7, 0.00001, polinom ),t6 = chord ( 0.2, 0.3, 0.00001, polinom ), t10 = chord ( 1.1, 1.2, 0.00001, polinom ), t14 = chord (8.4, 8.5, polinom );
    double t3 = newton ( -4.8, -4.7, 0.00001, polinom, polinomd ),t7 = newton ( 0.2, 0.3, 0.00001, polinom, polinomd ), t11 = newton ( 1.1, 1.2, 0.00001, polinom, polinomd ), t15 = newton (8.4, 8.5, 0.00001, polinom, polinomd );
    double t4 = iterac ( -4.8, -4.7, 0.00001, iteracg, iteracgd ),t8 = iterac ( 0.2, 0.3, 0.00001, iteracg, iteracgd ), t12 = iterac ( 1.1, 1.2, 0.00001, iteracg, iteracgd ), t16 = iterac (8.4, 8.5, 0.00001, iteracg, iteracgd );
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.04.2012, 03:16
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Методы поиска корней уравнения на отрезке, одна маленькая ошибка в коде, подскажите что не так (C++):

Подскажите, что не так в коде - C++
void sortofalpfavit(WORKER* st, int n) { int i,j; for (i = 0; i &lt; n; i++) { for ( j = i + 1; j &lt; n; j++) //...

Подскажите что же в коде не так? - C#
Помогите, что же в коде не так?????????? void Update () { if (transform.position.x &amp;gt; 18) { speed = Random.Range(8f,12f); ...

Подскажите, что не так в коде? - Delphi
Запрограммировать схему &quot;клиенты – официант&quot;, используя семафорную переменную. Процесс-официант выполняет запрос на обслуживание...

Подскажите, что в коде не так - C++ Builder
//--------------------------------------------------------------------------- #include &lt;vcl.h&gt; #pragma hdrstop #include...

подскажите что в этом коде не так? - PHP
&lt;?php // Ошибки ini_set('display_errors', 1); error_reporting(E_ALL); ini_set(&quot;memory_limit&quot;, &quot;-1&quot;); set_time_limit(0); ...

Нахождение всех действительных корней уравнения на отрезке - Pascal ABC
Добрый день, прошу помощи в создании блок схем. Для функции разработать и протестировать программу, выполняющую: 1. нахождение всех...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.04.2012, 03:16
Привет! Вот еще темы с ответами:

Нахождение корней уравнения с периодической функцией на отрезке - MathCAD
Задание: найти первые 10 корней уравнения на (0..+inf) tg(x)=h*x, где h -- константа, приближенно равна 0.3 Решал, копируя...

вертикальное выпадающее меню, подскажите что не так в коде - HTML, CSS
&lt;html&gt; &lt;head&gt; &lt;style&gt; body{ margin: 0; padding: 10px; font-famaly: Verdana, Tahoma, Arial; background-color: white; ...

Написать и отладить программу поиска всех корней функции f(x) на отрезке [a, b] - Delphi
Написать и отладить программу поиска всех корней функции f(x) на отрезке . а=4, b=8. Метод секущих ПРОГРАММУ НУЖНО ПИСАТЬ НА С++...

Методы нахождения корней уравнения. - Delphi
Подскажите пожалуйста, где у меня ошибки? Требуется: Найти корни уравнения на заданном отрезке методами касательных(Метод Ньютона) и...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Опции темы

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