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

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

Восстановить пароль Регистрация
Другие темы раздела
C++ Преобразовать одномерный массив, состоящий из 10 вещественных элементов http://www.cyberforum.ru/cpp-beginners/thread772266.html
Доброго времени Суток! Задание в борланде - Преобразовать одномерный массив, состоящий из 10(любых) вещественных элементов, таким образом, чтобы сначала располагались все положительные элементы, а потом - все отрицательные ( элементы, равные 0, считать положительными). Вот нашел исходный код , похожий немного к моему заданию он ниже. но не могу разобраться как его форматнуть для своего...
C++ дано Sn,k,N найти Sk n=1-> N,S=Sn-> Sk S=S+S*k/100 дано Sn,k,N найти Sk=? n=1-> N, S=Sn-> Sk S=S+S*k/100 http://www.cyberforum.ru/cpp-beginners/thread772265.html
Рассчет определенного интеграла методом Монте-Карло. C++
Не могли бы вы посмотреть, я неправильно понимаю метод Монте Карло для нахождения определенного интеграла или неправильно его реализую? Вот так я понимаю алгоритм: Выбираем случайным образом N точек с абсциссами от a до b и ординатами от минимального значения функции до максимального на . Проверяем для каждой точки, попадает ли она в область, ограниченную a, b, минимумом функции и максимумом...
Дана квадратная матрица. Заменить нулями все ее элементы, расположенные на главной диагонали и выше ее C++
Дана квадратная матрица порядка N. Заменить нулями все ее элементы, расположенные на главной диагонали и выше ее. Вывести матрицу в исходном и преобразованном виде. Значение N задать при помощи ввода, а саму матрицу сформировать из случайных чисел в диапазоне от 0 до 100.
C++ a=*b Что это значит? http://www.cyberforum.ru/cpp-beginners/thread772207.html
Подскажите пожалуйста!
C++ Дана строка символов до точки. Выделить в ней все русские буквы, сделав их заглавными Дана строка символов до точки. Выделить в ней все русские буквы, сделав их заглавными подробнее

Показать сообщение отдельно
palva
 Аватар для palva
2372 / 1594 / 190
Регистрация: 08.06.2007
Сообщений: 6,362
Записей в блоге: 4
27.01.2013, 01:38     Вычислить методом Ньютона корень уравнения
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;
}
 
Текущее время: 18:14. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru