0 / 0 / 0
Регистрация: 01.06.2014
Сообщений: 11
1

Метод секущих

03.12.2014, 23:21. Показов 1267. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите мне пожалуйста с кодом. Я никак не могу найти ошибки в нем.
Компилятор мне выводит 1.#INF в всех полях где должны бить числа. Я понимаю что ошыбка где то в формуле но найти ее не могу.
Если что компилятор VS2013

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
#include "stdafx.h"
#include "iostream"
#include <iomanip>
#include <math.h>
#include <vector>
using namespace std;
void Vector(double*x, double*f)
{
    f[0] = pow(x[0], 2) + pow(x[2], 2) + 0, 1 - x[0];
    f[1] = 2 * (x[0] * x[1]) + 0, 1 - x[1];
 
}
void main()
{
    setlocale(0, "");
    double x[2] = { 1, 1 }, x_old[2] = { 1, 1 }, x_older[2] = { 0.1, 0.1 }, J[2][2], f[2], x_[2], f_[2];
    double ee = 0.000001, h[2];
    bool cond_N;
    int n = 2;
    double INVERS[2][2], E[2][2];
    double V[2][2], C[2][2], P[2], X[2], Y[2];//метод гауса 
    //инициализация  одиночной матриці Е
    for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++)
    if (i == j) 
        E[i][j] = 1;
    else
        E[i][j] = 0;
    //итерационный  процесс методу Ньютона
    do
    {
        cond_N = false;
        ////////
        for (int i = 0; i < n; i++)
            h[i] = x_older[i] - x_old[i];
        Vector(x, f);
        for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
        {
            for (int k = 0; k < n; k++)
                x_[k] = x[k];
            x_[j] = x[j] + h[j];
            Vector(x_, f_);
            J[i][j] = (f_[i] - f[i]) / h[j];
        }
        //вращения  матрицы - начало
        for (int b = 0; b < n; b++)
        {
            for (int i = 0; i < n; i++)
            for (int j = 0; j < n; j++)
                V[i][j] = J[i][j];
            for (int i = 0; i < n; i++)///////////////
                P[i] = E[i][b];
        }
        //прямой ход
        for (int k = 0; k < n; k++)
        {
            Y[k] = P[k] / V[k][k];
            for (int i = k + 1; i < n; i++)
            {
                P[i] += -V[i][k] * Y[k];
                for (int j = k + 1; j < n; j++)
                {
                    C[k][j] = V[k][j] / V[k][k];
                    V[i][j] += -V[i][k] * C[k][j];
                }
            }
        }
        //обращенный ход 
        X[n - 1] = Y[n - 1];
        for (int i = n - 2; i >= 0; i--)
        {
            X[i] = 0;
            for (int j = i + 1; j < n; j++)
                X[i] += C[i][j] * X[j];
            X[i] = Y[i] - X[i];
        }
        //присвоение вычисленных значений Х в столбец обратной матрицы
        for (int i = 0; i < n; i++)
        for (int b = 0; b < n; b++)////
            INVERS[i][b] = X[i];
 
        //вращения  матриці - конец.
 
        for (int i = 0; i < n; i++)
 
        {
            x[i] = 0;
            for (int j = 0; j < n; j++)
                x[i] += INVERS[i][j] * f[j];
            x[i] = x_old[i] - x[i];
        }
        for (int i = 0; i < n; i++)
            //
        for (int i = 0; i < n; i++) //проверка условия
        {
            cond_N = cond_N || fabs((x[i] - x_old[i]) / x[i] * 100)>ee;
            x_older[i] = x_old[i];
            x_old[i] = x[i];
        }
    } while (cond_N);
    cout << "Решение системы уравнений: " << "\n";
    for (int i = 0; i<n; i++)
    {
        cout << x[i] << endl;
    }
    cout << "Проверка: " << "\n";
    f[0] = pow(x[0], 2) + pow(x[2], 2) + 0, 1 - x[0];
    f[1] = 2 * (x[0] * x[1]) + 0, 1 - x[1];
    for (int k = 0; k<2; k++)
    {
        cout << f[k] << endl;
    }
    system("pause");
}
Добавлено через 2 часа 25 минут
Простите я так смотрел в свой код что не заметил ошибки в СЛАУ, должно быть так:
f[0] = pow(x[0], 2) + pow(x[1], 2) - 0.1 - x[0];
f[1] = 2.0*(x[1] * x[0]) + 0.1 - x[1];
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.12.2014, 23:21
Ответы с готовыми решениями:

Мой код - метод бисекции, метод секущих (метод хорд)
Всем привет!!! Изучаем в институте С++. Сделал код, и там, и там одна и та же проблема - при любых...

Метод секущих С++
Может кто помочь решить задачу! Функция: x-5sin2(x)-5 Отрезок: Метод секущих Необходимо найти...

Метод секущих
в чем ошибка? он не выводит значения #include &lt;iostream&gt; #include &lt;cmath&gt; using namespace std;...

Метод секущих
Нужно разработать функцию для нахождения локализованного корня методом секущих. С ее написание не...

0
03.12.2014, 23:21
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.12.2014, 23:21
Помогаю со студенческими работами здесь

Написать программу метод секущих
Помогите написать программу, нужно решить нелинейное уравнение ...

Исправить программу метод секущих
Доброго дня всем.. Никак не могу понять почему не компилируется программа.. #include...

Метод секущих (блок-схема)
подскажите пожалуйста, правильно ли я составил блок-схему по методу секущих Скрин во вложении.....

Метод секущих, выводить все корни
Ребят, как сделать, чтобы программа выдавала все корни? #include &lt;iostream&gt; #include &lt;cmath&gt; ...


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

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

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