Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 25.11.2013
Сообщений: 10
1

Численные методы, составление системы, решение

07.10.2015, 13:04. Показов 621. Ответов 0
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый день любители с++ ))
Нужны помощь, с решением задачи.
Сформировать систему Ax=b, где A=(a_{i,j}=1\ i+j-1)
Решить полученную систему двумя методами, Вращения, Ортогонализации.
Найти вектора невязки. Сравнить.
Найти число обусловленности.
Найти числа обусловленности для матрицы:

0.0007 4.08 -5.27 3.335 1.80514
0.005 -0.4 2.85 -1.98 -0.429
18.1 -6.45 -0.13 2.07 3.008
2.108 -1.407 -1.01 3.008 2.2608

Что у меня есть, есть Методы, их реализовал.
Вращ:
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
#include <iostream>
#include <fstream>
#include <iomanip>
 
using namespace std;
 
void vivod(float **matrix,int a)    //вывод
{
    for (int i=0;i<a;i++)
    {
        for (int j=0;j<a+1;j++)
        cout<<setw(10)<<matrix[i][j]<<" ";
        cout<<endl;
    }
    cout<<endl;
}
 
void zan(float **s,int a)   //зануление ниже глав диаг
{
    float *m,*m1;
    m=new float [a];
    m1=new float [a];
    float c12,s12;
    for (int g=0;g<a-1;g++) ///столбец по которому считать
    {
        for (int i=g+1;i<a;i++)
        {
            c12=s[g][g]/sqrt(s[g][g]*s[g][g]+s[i][g]*s[i][g]);
            s12=s[i][g]/sqrt(s[g][g]*s[g][g]+s[i][g]*s[i][g]);
            for (int j=0;j<=a;j++)
            {   
                m[j]=s[g][j];
                m1[j]=s[i][j];
            }
            for (int j=0;j<=a;j++)
            {
                s[g][j]*=c12;
                s[i][j]*=s12;
                s[g][j]+=s[i][j];
                s[i][j]=m[j]*s12*(-1)+m1[j]*c12;
            }   
        }   
    }
}
 
void main()
{
    int a,s=0;
    float **matrix,*r,**p,*o;
    setlocale (0,"");
    ifstream f("Text.txt", ios::in);
    f>>a;
    float z;
    o=new float [a];
    matrix=new float *[a];
    p=new float *[a];
    r=new float [a];
    for (int i=0;i<a;i++)
        r[i]=0;
    for (int i=0;i<a;i++)
    {
        matrix[i]=new float [a+1];
        p[i]=new float [a+1];
    }
    for (int i=0;i<a;i++)
        for (int j=0;j<a+1;j++)
        {
            f>>z;
            matrix[i][j]=z;
            p[i][j]=z;
        }
    vivod(matrix,a);
    zan(matrix,a);
    vivod(matrix,a);
    
 
    for (int i=a-1;i>0;i--)
    {
        o[i]=matrix[i][a]/matrix[i][i];
 
 
        
        for (int j=0;j<i;j++)
        {
 
            matrix[j][a]-=o[i]*matrix[j][i];
            matrix[j][i]=0;
            vivod(matrix,a);
        }
    }
    for (int i=0;i<a;i++)
        o[i]=matrix[i][a]/matrix[i][i];
    vivod(matrix,a);
    for (int i=0;i<a;i++){
        //cout<<"X="<<o[i]<<" ";
        cout << "X_" << i + 1 << " = " << o[i] << endl;}
    for (int i=0;i<a;i++)
        for (int j=0;j<a;j++)
            r[i]+=o[j]*p[i][j];
    
//распечатка р-вектора
    cout<<endl<<"Вектор р"<<endl;;
    for (int i=0;i<a;i++)
        cout<<p[i][a]-r[i]<<" ";
    cout<<endl;
 
    delete []matrix;
    delete []p;
    delete []r;
    delete []o;
    system ("pause");
}
и

ортг
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
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
#include <iostream>
#include <fstream>
#include <iomanip>
 
using namespace std;
 
void vivod(float **matrix,int a)    //вывод
{
    for (int i=0;i<a;i++)
    {
        for (int j=0;j<a+1;j++)
        cout<<setw(10)<<matrix[i][j]<<" ";
        cout<<endl;
    }
    cout<<endl;
}
 
void zan(float **s,int a)   //зануление ниже глав диаг
{
    float *m,*m1;
    m=new float [a];
    m1=new float [a];
    float c12,s12;
    for (int g=0;g<a-1;g++) ///столбец по которому считать
    {
        for (int i=g+1;i<a;i++)
        {
            c12=s[g][g]/sqrt(s[g][g]*s[g][g]+s[i][g]*s[i][g]);
            s12=s[i][g]/sqrt(s[g][g]*s[g][g]+s[i][g]*s[i][g]);
            for (int j=0;j<=a;j++)
            {   
                m[j]=s[g][j];
                m1[j]=s[i][j];
            }
            for (int j=0;j<=a;j++)
            {
                s[g][j]*=c12;
                s[i][j]*=s12;
                s[g][j]+=s[i][j];
                s[i][j]=m[j]*s12*(-1)+m1[j]*c12;
            }   
        }   
    }
}
 
void main()
{
    int a,s=0;
    float **matrix,*r,**p,*o;
    setlocale (0,"");
    ifstream f("Text.txt", ios::in);
    f>>a;
    float z;
    o=new float [a];
    matrix=new float *[a];
    p=new float *[a];
    r=new float [a];
    for (int i=0;i<a;i++)
        r[i]=0;
    for (int i=0;i<a;i++)
    {
        matrix[i]=new float [a+1];
        p[i]=new float [a+1];
    }
    for (int i=0;i<a;i++)
        for (int j=0;j<a+1;j++)
        {
            f>>z;
            matrix[i][j]=z;
            p[i][j]=z;
        }
    vivod(matrix,a);
    zan(matrix,a);
    vivod(matrix,a);
    
 
    for (int i=a-1;i>0;i--)
    {
        o[i]=matrix[i][a]/matrix[i][i];
        cout<<o[i]<<" o[i] "<<i<<endl;
        for (int j=0;j<i;j++)
        {
            cout<<j<<"j"<<a<<" "<<i<<" "<<o[i]<<" oi"<<endl;
            
            matrix[j][a]-=o[i]*matrix[j][i];
            matrix[j][i]=0;
            vivod(matrix,a);
        }
    }
    for (int i=0;i<a;i++)
        o[i]=matrix[i][a]/matrix[i][i];
    vivod(matrix,a);
    for (int i=0;i<a;i++)
        cout<<o[i]<<" ";
 
    for (int i=0;i<a;i++)
        for (int j=0;j<a;j++)
            r[i]+=o[j]*p[i][j];
    
//распечатка р-вектора
    cout<<endl<<"Вектор р"<<endl;;
    for (int i=0;i<a;i++)
        cout<<p[i][a]-r[i]<<" ";
 
 
    delete []matrix;
    delete []p;
    delete []r;
    delete []o;
    system ("pause");
}
Оба метода работают. Правильно. Но не знаю как реализовать эти пункты. Вектор b кажется надо браться самому, лин не зависимым.
Кто может, помогите пожалуйста)
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
07.10.2015, 13:04
Ответы с готовыми решениями:

Численные методы.
Добрый день. Мне очень нужна помощь. Надо выполнить лабу по ЧМ задания вот:...

Численные методы
Здравствуйте. Помогите пожалуйста разобраться в численных методах интегрирования. Нужно осовоить...

Численные методы. С++
Написать программу для решения системы линейных алгебраических уравнений методом Гаусса. Написать...

Численные методы
Численные решения дифференциальных уравнений первого порядка методом кутта мерсона

0
07.10.2015, 13:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.10.2015, 13:04
Помогаю со студенческими работами здесь

численные методы
ребят, подскажите пожалуйста литературу, в которой я могу прочитать про численные методы и их...

Численные методы
Здраствуйте форумчане! Если кому не сложно, не могли бы вы немного помочь с вышеуказанными...

Дисциплина численные методы
По дисциплине численные методы задали задания решить на листочке эти задачи. Я не могу догнать что...

Численные методы. Дихотомия
Здравствуйте! Помогите пожалуйста! 1) e^(-x)-2x +1=0; 2) 2x^3-x^2 –x+1=0 с помощью метода...

Сравнить численные решение и аналитические решение и график
Дано sin^2(х) P0=1 PN=0 x Сравнить численные решение и аналитические решение #include...

Численные методы(метод дихотомии)
Найти все корни функции f(x) на интервале методом дихотомии с погрешностью 10-4. f(x)=Cos в...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru