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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 24, средняя оценка - 4.88
8lgm
0 / 0 / 0
Регистрация: 21.09.2013
Сообщений: 16
#1

Метод простых итераций для одного уравнения - C++

29.09.2013, 21:59. Просмотров 3534. Ответов 4
Метки нет (Все метки)

arccos(x) - sqrt(1-0.3x^3) = 0
Отрезок от [0;1]
+приближенное значение корня 0.5629
Для метода итераций получается, что
fi(x)=sqrt(1-0.3x^3)
т.к. x в границах от -1 до 1, верно?

Дальше нам нужно реализовать цикл на с++, который бы перебирал значения до верного корня с нулем? А вот тут-то я и сел, ибо как такое реализовать слабо представляю. Т.е. в цикле берем начальное значение, допустим 0 и прибавляем в каждом шаге по 0.05, и подставляя в уравнение каждый корень?

Стандартных библиотек будет достаточно?
#include <iostream>
#include <conio.h>
#include <math.h>

Дальше задать fi(x)?

Написать цикл для подсчета значений?

Сделать вывод переменной?

Через какой оператор это реализуемо (if )?

Заранее спасибо
И да, не спрашивайте, я пока что полный ноль в с++.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.09.2013, 21:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Метод простых итераций для одного уравнения (C++):

Метод простых итераций для СЛАУ - C++
Прошу помочь с написанием МПИ для СЛАУ на C. Каким образом выразить из AX=b ур-е X=BX+C, в которое подставлять начальное приближение? И по...

Метод простых итераций для СЛАУ - C++
Помогите пожалуйста! Нужно реализовать метод простых итераций для решения СЛАУ дана вот такая матрица -0.95 -0.06 -0.12 0.14 ...

Метод простых итераций для СЛАУ - C++
Здравствуйте! Пытаюсь реализовать метод простых итераций. Все функции, которые работают нормально, кроме самих итераций. Не могу понять,...

Метод простых итераций для СЛАУ - C++
Доброго времени суток всем!!! решаю СЛАУ методом простых итераций, проблема вот в чем: не могу понять, как сделать расчет по к-ым...

Метод простых итераций для решения СЛАУ - C++
Всем добрый вечер! Столкнулся с заданием на тему решения СЛАУ методом простых итераций и Зейделя. В итоге завис с первым методом:...

Метод простых итераций для решения СЛАУ - C++
Здравствуйте. Есть функция, реализующая метод простых итераций: void ProstIterMetode() {int i,j; double *x0,delta,*E; x0=new...

4
8lgm
0 / 0 / 0
Регистрация: 21.09.2013
Сообщений: 16
06.10.2013, 01:47  [ТС] #2
Вообщем я понял, в чем суть метода. Надо задать x0 и x1. Преобразуем для начала arccos(x) - sqrt(1-0.3x^3) = 0
в arccos(x) = sqrt(1-0.3x^3)
Где, арккосинус можно заменить на x1, а под корнем на x0.
Т.е. x1 = sqrt(1-0.3x0^3) = 0. Мы должны посчитать значение на отрезке [0;1], т.е. задаем начальный х0 и считаем х1 через уравнение. Дальше задаем эпсилон (e) = 0.001, с ним и надо сравнивать значений для цикла т.е. по этому|x0-x1|< e
Если не подходит корень, то задаем х0 полученное значение х1 и считаем новый х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
#include <iostream>
#include <conio.h>
#include <math.h>
 
using namespace std;
 
int main()
{
    setlocale(0, "");
    int i = 0;
    double e = 0.001;
    double x0;
    double x1;
    cout<<"Введите значение x0 с промежутка [0;1] =" <<endl;
    cin>> x0;
    x1 = sqrt(1-0.3*pow(x0 , 3));
    while ( abs(x0-x1) < e)
    {
        x1 = sqrt(1-0.3*pow(x0 , 3));
        i += 1;
        x1 = x0;
    }
    cout << "Значение корня = " << x1 << endl; 
    cout << "Число итераций = " << i <<endl;
 
    return 0;
}
Проблема в том, что цикл не хочет выполняться, а просто выдает значение х1 с подсчетом, ну и кол-во итераций тоже не выводится. Ч.Я.Д.Н.Т.?
Заранее спасибо
0
8lgm
0 / 0 / 0
Регистрация: 21.09.2013
Сообщений: 16
09.10.2013, 20:15  [ТС] #3
Ребят, помогите, пожалуйста, код написал, а выдает бесконечность, а цикл даже не запускается.
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
#include <iostream>
#include <conio.h>
#include <math.h>
 
using namespace std;
void main ()
{
    double y;
    double x;
    float e;
    int i=0;
    cout <<"\n Input x (From 0 to 1) \n x=";
        cin >>x;
    cout <<"\n Input e (0.001 or less) \n e=";
        cin >>e;
 
        y = ((pow((1-acos(pow(x,2))),1.0/3.0))/0.3);
 
        while (abs((y-x)>e))
        {
        x=y;
        y=((pow((1-acos(pow(x,2))),1.0/3.0))/0.3);
        i=i+1;
        }
 
 
 
    cout <<"\n i = "<<i;
    cout <<"\n y = "<<y;
    getch ();
}
7 задание отсюда
https://www.dropbox.com/s/rjxzs8kvrshvvyj/20131001_170223.jpg
0
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
09.10.2013, 21:53 #4
во-первых, вы вываливаетесь на возведении в нецелую степень отрицательного значения,
во-вторых, fabs.
в третьих, разберитесь с записью выражений на С++.
1
8lgm
0 / 0 / 0
Регистрация: 21.09.2013
Сообщений: 16
10.10.2013, 00:11  [ТС] #5
Цитата Сообщение от vua72 Посмотреть сообщение
во-первых, вы вываливаетесь на возведении в нецелую степень отрицательного значения,
во-вторых, fabs.
в третьих, разберитесь с записью выражений на С++.
Окей, кое что разрешилось т.к. я преобразовал уравнение по-другому, например стало выводиться и считаться значение y. Но все равно цикл не запускается...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    double y = ((1-(acos (x)*(acos (x))/(0.3*x*x));
 
    while (fabs(x-y)>=e)
    {
        double y = ((1-(acos (x)*(acos (x))/(0.3*x*x));
        i++;
        x=y;
    }
 
    cout <<"\n i = "<<i;
    cout <<"\n y = "<<y;
    getch ();
}
0
10.10.2013, 00:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.10.2013, 00:11
Привет! Вот еще темы с ответами:

Метод простых итераций для решения СЛАУ - C++
Доброго времени суток. Если у кого нибудь есть готовые программы для данного метода, скиньте пожалуйста. Особенно написанные на Borland C++.

Метод простых итераций для решения СЛАУ - C++
Здравствуйте. Попытался сделать программу для решения СЛАУ методом простых итераций. Не работает. Вернее работает неправильно. Помогите...

Метод простых итераций (для трехмерной матрицы) - C++
Привет всем. Помогите пожалуйста. Из корней системы уравнений выдает правильно только один,(( #include &quot;stdafx.h&quot; #include...

Посчитать количество проведенных итераций (метод простых итераций, Pascal -> C++) - C++
перевести из паскаля в С++ program method_of_simple_iteration; uses crt; var a:array of real; b,c:array of real; ...


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

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

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