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

Вычислить методом Ньютона корень уравнения - C++

Восстановить пароль Регистрация
 
Artur jan
Сообщений: n/a
26.01.2013, 17:22     Вычислить методом Ньютона корень уравнения #1
Помогите, пожалуйста, написать программу, вычисляющую методом Ньютона`(x_(k+1)=x_k-A^(-1) (x_k )f(x_k )) где уравнений с положительными корнями приближенные значения ε=〖10〗^(-5) Точность
x^2+y^2+z^2=1
2x^2+y^2-4z=0
3x^2-4y+z^2=0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.01.2013, 17:22     Вычислить методом Ньютона корень уравнения
Посмотрите здесь:

C++ Вычислить методом итераций корень уравнения
Решение квадратного уравнения методом Ньютона C++
Вычислить методом Ньютона корень уравнения C++
C++ Методом касательных вычислить с погрешностью e(1>e>0) корень уравнения
C++ Вычислить методом Ньютона корень уравнения
Найти корень уравнения методом касательных C++
C++ Вычислить корень уравнения на отрезке [a; b] с точностью eps=0.000001, методом половинного деления
C++ Найти корень уравнения на заданном интервале методом Ньютона
C++ Найти корень уравнения методом итераций
Найти корень нелинейного уравнения методом Ньютона C++
C++ найти корень уравнения методом хорд
Решение уравнения c методом касательных (Ньютона) C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
palva
 Аватар для palva
2403 / 1625 / 202
Регистрация: 08.06.2007
Сообщений: 6,450
Записей в блоге: 4
27.01.2013, 01:38     Вычислить методом Ньютона корень уравнения #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
72
73
74
75
76
77
78
79
80
81
#include <iostream>
#include <math.h>
 
using namespace std;
 
typedef double vec[3];
typedef double mat[3][3];
 
void fun(vec x, vec &f) {
    f[0]=x[0]*x[0]+x[1]*x[1]+x[2]*x[2]-1;
    f[1]=2*x[0]*x[0]+x[1]*x[1]-4*x[2];
    f[2]=3*x[0]*x[0]-4*x[1]+x[2]*x[2];
}
 
void dfun(vec x, mat &m) {
    m[0][0]=2*x[0];
    m[1][0]=4*x[0];
    m[2][0]=6*x[0];
    m[0][1]=2*x[1];
    m[1][1]=2*x[1];
    m[2][1]=-4;
    m[0][2]=2*x[2];
    m[1][2]=-4;
    m[2][2]=2*x[2];
}
 
void inv(mat m, mat &mm1) {
    double detm1=1.0/(
        m[0][0]*m[1][1]*m[2][2]+
        m[0][1]*m[1][2]*m[2][0]+
        m[0][2]*m[1][0]*m[2][1]-
        m[0][2]*m[1][1]*m[2][0]-
        m[0][1]*m[1][0]*m[2][2]-
        m[0][0]*m[1][2]*m[2][1]);
    mm1[0][0]=(m[1][1]*m[2][2]-m[1][2]*m[2][1])*detm1;
    mm1[0][1]=-(m[0][1]*m[2][2]-m[0][2]*m[2][1])*detm1;
    mm1[0][2]=(m[0][1]*m[1][2]-m[0][2]*m[1][1])*detm1;
    mm1[1][0]=-(m[1][0]*m[2][2]-m[1][2]*m[2][0])*detm1;
    mm1[1][1]=(m[0][0]*m[2][2]-m[0][2]*m[2][0])*detm1;
    mm1[1][2]=-(m[0][0]*m[1][2]-m[0][2]*m[1][0])*detm1;
    mm1[2][0]=(m[1][0]*m[2][1]-m[1][1]*m[2][0])*detm1;
    mm1[2][1]=-(m[0][0]*m[2][1]-m[0][1]*m[2][0])*detm1;
    mm1[2][2]=(m[0][0]*m[1][1]-m[0][1]*m[1][0])*detm1;
}
 
double diff (vec v1, vec v2) {
    return sqrt(
        (v1[0]-v2[0])*(v1[0]-v2[0])+
        (v1[1]-v2[1])*(v1[1]-v2[1])+
        (v1[2]-v2[2])*(v1[2]-v2[2]));
}
int main() {
    vec xn, fn, xnp1;
    double d;
    int n;
    mat m, m1;
 
    xn[0]=1.0;
    xn[1]=1.0;
    xn[2]=1.0;
    n = 0;
    do {
        fun(xn, fn);
        dfun(xn, m);
        inv(m, m1);
        xnp1[0] = xn[0]-(m1[0][0]*fn[0]+m1[0][1]*fn[1]+m1[0][2]*fn[2]);
        xnp1[1] = xn[1]-(m1[1][0]*fn[0]+m1[1][1]*fn[1]+m1[1][2]*fn[2]);
        xnp1[2] = xn[2]-(m1[2][0]*fn[0]+m1[2][1]*fn[1]+m1[2][2]*fn[2]);
        d = diff(xn, xnp1);
        xn[0]=xnp1[0];
        xn[1]=xnp1[1];
        xn[2]=xnp1[2];
        cout << xn[0] << ' ' << xn[1] << ' ' << xn[2] << endl;
        n = n+1;
    } while (d > 0.00001 && n < 50);
 
    cout << d << ' ' << n << endl;
    fun(xn, fn);
    cout << fn[0] << ' ' << fn[1] << ' ' << fn[2] << endl;
    return 0;
}
Yandex
Объявления
27.01.2013, 01:38     Вычислить методом Ньютона корень уравнения
Ответ Создать тему
Опции темы

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