Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
unrealprorok
0 / 0 / 0
Регистрация: 16.06.2018
Сообщений: 14
Завершенные тесты: 1
1

Решить уравнение вида x=A*cos(x) методом последовательных итераций

16.06.2018, 01:24. Просмотров 482. Ответов 4
Метки нет (Все метки)

Всем привет!
Пишу в DEV-C++, не думаю, что это важно.
В целом задача на решение уравнения вида x=A*cos(x) методом последовательных итераций, так же надо определить значения параметра А, чтобы |df/dx|<1.
Первые два цикла для вычисления min и max значения производной от косинуса на промежутке.
Потом я решил заморочиться и сделать массив из всех допустимых значений параметра А, но тут мне несовсем понятно, почему значений всегда на 2 больше, чем должно. То есть программа считает значения параметра А, когда |df/dx|=1.

Первый цикл определяет количество элементов массива, второй цикл его заполняет.
и во время заполнения происходит вот что

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
#include <iostream>
#include <cmath>
#include <cstdlib>
 
using namespace std;
 
int main() {
    int i,j;
    double max,min,Amax,Amin,n,k;
    bool ans;
    for (n=-5;n<=5;) {
        n+=0.001;
        if((-sin(n))>(-sin(n-0.001))) max=-sin(n);
    }
    for (n=5;n>=-5;) {
        n-=0.001;
        if((-sin(n))<(-sin(n+0.001))) min=-sin(n);
    }
    cout<<"df/dx(max)= "<<max<<endl;
    cout<<"df/dx(min)= "<<min<<endl;
    for (n=-2,j=0;n<=2;){
        cout<<"df/dx= "<<abs(n*max)<<endl;
        if (abs(n*max)<=1) j++;
        n=n+0.1;
        }
        cout<<"j= "<<j<<endl;
        double A[j];
        i=0;
        for (n=-1.2;n<=1.2;){
        //  cout<<"df/dx= "<<abs(n*max)<<endl;
        if (abs(n*max)<1) k=n, i++;
        A[i]=k;
        cout<<"i= "<<i<<endl;
        cout<<"n= "<<n<<endl;
        cout<<"A["<<i<<"]="<<A[i]<<endl;
        cout<<"continue?"<<endl;
        cin>>ans;
        if(ans==false) exit(0);
        n=n+0.1;
    }
    return 0;
}
если я k присваиваю значение n, то все работает, но если
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
        double A[j];
        i=0;
        for (n=-1.2;n<=1.2;){
        //  cout<<"df/dx= "<<abs(n*max)<<endl;
        if (abs(n*max)<1) A[i]=n, i++;
        cout<<"i= "<<i<<endl;
        cout<<"n= "<<n<<endl;
        cout<<"A["<<i<<"]="<<A[i]<<endl;
        cout<<"continue?"<<endl;
        cin>>ans;
        if(ans==false) exit(0);
        n=n+0.1;
    }
то программа заполняет массив непонятными значениями, нулями или в -332 степени. Почему?
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.06.2018, 01:24
Ответы с готовыми решениями:

Численное решение уравнения вида x=f(x) методом последовательных приближений(итераций)
Доброго времени суток.Хотелось бы найти какую-нибудь программу,если не сложно,то напишите...

Решить уравнение методом итераций
Здравствуйте,помогите пожалуйста разобраться,4 уравнение,с методом дихотомии разобрался,а с...

Решить уравнение методом простых итераций
Помогите решить уравнение х^4+2*x^3-x-1 на интервале #include &lt;iostream&gt; #include &lt;math.h&gt;...

Решить уравнение с заданной точностью методом итераций
Уравнение x – sinx – 0,25 = 0 на отрезке с точностью e методом итерации Помогите наладить код...

Найти корень уравнения методом последовательных итераций
Задание:Написать программу для вычисления методом последовательных итераций уравнения x=Acos(x)....

4
Biger18
151 / 143 / 87
Регистрация: 13.06.2018
Сообщений: 624
16.06.2018, 01:42 2
в 1м случае заполнение происходит независимо от if (abs(n*max)<1) ?
0
unrealprorok
0 / 0 / 0
Регистрация: 16.06.2018
Сообщений: 14
Завершенные тесты: 1
16.06.2018, 02:06  [ТС] 3
Да, я просто вынес заполнение массива вне условного if, и сделал заполнение через дополнительную переменную к, которая инициализируется внутри if. я хотел обойтись без к, сразу заполнять массив внутри if, но мне выдает чушь.
0
Biger18
151 / 143 / 87
Регистрация: 13.06.2018
Сообщений: 624
16.06.2018, 05:23 4
ну а во 2м это происходит не всегда
0
unrealprorok
0 / 0 / 0
Регистрация: 16.06.2018
Сообщений: 14
Завершенные тесты: 1
18.06.2018, 02:49  [ТС] 5
Оба цикла работают идентично, в первом случае на каждом шаге идёт присвоение переменной, которая меняется при определенных условиях, во втором же и присвоение происходит, когда условие выполняется. Оба цикла должны давать одинаковый результат. В целом, я, похоже, забыл инициализировать одну из переменных, второй вариант заработал.
0
18.06.2018, 02:49
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.06.2018, 02:49

Методом итераций вычислить корень уравнения вида f(x)=0
Методом итераций вычислить корень уравнения вида f(x)=0 расположенный на интервале , с абсолютной...

Решить уравнение с точностю Е и указать необходимое число итераций
Нужно решить уравнение с точностю Е и указать необходимое число итераций. Ниже все даные, што у...

Найти корень уравнения методом последовательных итераций.Второй корень вычисляет неверно
Задание:Написать программу для вычисления методом последовательных итераций уравнения x=Aexp(-x)....


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

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

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