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

Решение уравнений методами Ньютона и итерации

15.01.2015, 20:55. Показов 863. Ответов 4
Метки нет (Все метки)

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

Функция 0.25*x*x*x + x - 1.2502
Интервал: от 0 до 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
#include <stdio.h>
#include <math.h>
#include <float.h>
 
typedef double real_t;
typedef real_t (*fun_t) (real_t);
const real_t REAL_EPSILON = DBL_EPSILON;
const real_t TARGET_A = 0.0, TARGET_B = 2.0;
 
real_t target(real_t x) 
{
    return 0.25*x*x*x + x - 1.2502;
}
 
real_t target_xfx(real_t x) 
{
    return 1.2502 - 0.25*x*x*x;
}
 
real_t target_derivative(real_t x) 
{
    return 0.75*x*x + 1;
}
 
real_t newton(fun_t fun, fun_t derivative, real_t a_0, real_t b_0)
{
    real_t a = a_0;
    real_t b = b_0;
    real_t x_0 = (a + b) / 2;
    real_t x = x_0 - (fun(x_0) / derivative(x_0));
    while (fabs(x - x_0) >= REAL_EPSILON)
    {
        x_0 = x;
        x = x_0 - (fun(x_0) / derivative(x_0));
    }
    return x;
}
 
real_t iterations(fun_t fun, real_t a_0, real_t b_0)
{
    real_t a = a_0;
    real_t b = b_0;
    real_t x_0 = (a + b) / 2;
    real_t x = fun(x_0);
    while (fabs(x - x_0) >= REAL_EPSILON)
    {
        x_0 = x;
        x = fun(x_0);
    }
    return x;
}
 
int main()
{
    int epswidth = ceil(-log10(REAL_EPSILON));
 
    printf(
        "target_2 = 0, x = %.*f; newton, x ? [%f, %f]\n",
        epswidth,
        newton(target, target_derivative, TARGET_A, TARGET_B),
        TARGET_A, TARGET_B
        );
 
    printf(
        "target_2 = 0, x = %.*f; iterations, x ? [%f, %f]\n",
        epswidth,
        iterations(target_xfx, TARGET_A, TARGET_B),
        TARGET_A, TARGET_B
        );
    return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
15.01.2015, 20:55
Ответы с готовыми решениями:

Решение не линейных уравнений за численными методами
Помогите пожалуйста написать программу на языке Си. Задание: 1. Решить нелинейное уравнение с...

Решение нелинейных уравнений методами половинного деления, Ньютона и итерации
Нужно решить уравнение вида x3+x-3=0 тремя методами(Половинного деления,Ньютона и итерации) Я смог...

Решение систем нелинейных уравнений – методы простой итерации, Ньютона, Ньютона-Рафсона
Здравствуйте ребята! попыталась сама решить в MatCad уравнение, смотрела ваши примеры.. никак не...

Решение систем нелинейных уравнений – методы простой итерации, Ньютона, Ньютона-Рафсона
Помогите пожалуйста, ибо я совсем не знающая Mathcad, он мне в принципе не нужен, так как...

4
Модератор
Эксперт С++
12461 / 10019 / 6031
Регистрация: 18.12.2011
Сообщений: 26,825
16.01.2015, 14:01 2
1. Какое именно уравнение нужно решить?
Если 0.25*x*x*x + x - 1.2502=0, то его надо привести к виду x=f(x),
т.е. f(x)=-0.25*x*x*x + 1.2502

2. Условие сходимости |f'(x0)|<1.
т.е. подходят |x|<2/sqrt(3)
0
0 / 0 / 0
Регистрация: 23.12.2014
Сообщений: 7
16.01.2015, 17:04  [ТС] 3
Да, верно.
Цитата Сообщение от zss Посмотреть сообщение
x=f(x), т.е. f(x)=-0.25*x*x*x + 1.2502
C
1
2
3
4
real_t target_xfx(real_t x) 
{
    return 1.2502 - 0.25*x*x*x;
}
Вообщем, это кусок из кода. У меня задача на 2 уравнения
Первое: 3 * sin(sqrt(x)) + 0.35*x - 3.8. Работает нормально, x=f(x), т.е. f(x)=(3.8 - 3 * sin(sqrt(x))) / 0.35

А вот второе уравнение - 0.25*x*x*x + x - 1.2502 считаться не хочет
0
2431 / 1831 / 404
Регистрация: 15.12.2013
Сообщений: 8,117
16.01.2015, 17:06 4
Цитата Сообщение от Scofflaw Посмотреть сообщение
А вот второе уравнение - 0.25*x*x*x + x - 1.2502 считаться не хочет
Метод простых итераций зависит еще и от начальной точки.С какой точки стартуете?
0
Модератор
Эксперт С++
12461 / 10019 / 6031
Регистрация: 18.12.2011
Сообщений: 26,825
16.01.2015, 18:09 5
Повторюсь:
Цитата Сообщение от zss Посмотреть сообщение
2. Условие сходимости |f'(x0)|<1.
т.е. подходят |x0|<2/sqrt(3)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.01.2015, 18:09
Помогаю со студенческими работами здесь

Решение системы нелинейных уравнений методами Ньютона и простых итераций
Написать программу решения системы нелинейных уравнений {y^3-x^2=1; ...

Решение системы нелинейных уравнений методами Ньютона и простых итераций
В общем была задача: написать программу, которая бы решала заданную систему нелинейных уравнений...

Решение нелинейных уравнений методом Ньютона. Не выдает результат, когда решение = 0
Есть программа,Решение нелинейных уравнений методом ньютона,но есть проблема,Не выдает результат,...

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


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

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

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