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

Решение СЛАУ методом квадратного корня - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 27, средняя оценка - 4.78
slevin_45
1 / 1 / 0
Регистрация: 17.12.2013
Сообщений: 66
18.02.2014, 22:57     Решение СЛАУ методом квадратного корня #1
Здравствуйте!Помогите мне,пожалуйста.
Суть задания написана в теме.Есть блок-схема для данного кода,но он для pasсal,поэтому добавляю к размеру массивов/матриц еденицу. Массив d-диагональная матрица.Массив a-исходный массив.Массив b-массив свободных членов.Массив y-просто массив нужный для подсчётов.Проблема в том,что как написать код я не знаю,ибо нужно высчитывать закономерности,чтобы самому написать решение по данному методу(квадр.корня).Поэтому и дана мне блок-схема.
Выводит чушь ! В вордовском файле указана блок-схема и формулы ,с помощью которых я считал элементы матрицы s и d.
Массив матрица а :
-4.88 1 0 0 0
1 -2 1 0 0
0 1 -2 1 0
0 0 1 -2 1
0 0 0 1 -4.88
матрица b:
0
-8
-8
-8
0
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
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
#include<iostream>
#include<math.h>
using namespace std;
void zapolneniemasabd(double **a,double *d,double *b,int n) //заполнение массива
{ 
    cout<<"zapolnite matricy a";
    int i,j,m=1;
    for(i=1;i<n;i++)
    {
        for(j=1;j<n;j++)
        {
        cin>>a[i][j];
        }
    }
    for(i=1,j=1;i<n;i++,j++)
    {
        d[m]=a[i][j];
        m++;
    }
    cout<<"zapolnite vektor-stolbec b";
    for(i=1;i<n;i++)
    {
        cin>>b[i];
    }
}
double sumd(double *d,double**s,int k,int n)//высчитываем сумму для d[k] которая указана в файле ворд 
{
    int i,sum=0;
    double f;
    for(i=1;i<k-1;i++)
    {
        f=d[i]*fabs(pow(s[i][k],2.));
        sum+=f;
    } 
    return(sum);
}//                                         сумма найдена
    double sumd2(double *d,double **s,int k,int j, int n)//высчитываем сумму вторую для s[k][k]
    {
        int i,suma=0;
        double g;
        for(i=1;i<k-1;i++)
        {
            g=d[i]*s[i][k]*s[i][j];
            suma+=g;
        }
        return(suma);
    }//                                                        сумма найдена
int main(void)//начало поиска корней
{
    double **a,*b,*x,*d,**s,h,*y,sam,fam;
    int n,k,i,j;
    cout<<"vvedite kolvo strok i stolbcov";
    cin>>n;
    n=n+1;
        d=new double[n-1];
    s=new double*[n-1];
    a=new double*[n-1];
    b=new double[n-1];
    x=new double[n-1];
    y=new double[n-1];
    for(i=1;i<n;i++)
    {
      s[i]=new double[n];
      a[i]=new double[n];
    }
    zapolneniemasabd(a,d,b,n);
    for(k=1;k<=n;k++)
    {
        sam=sumd(d,s,k,n);
        for(j=k+1;j<=n;j++)
        {
            fam=sumd2(d,s,k,j,n);
            if(a[k][k]-sam<0)
            {
            d[k]=-1;
            }
            if(a[k][k]-sam>0)
            {
                d[k]=1;
            }
            if(a[k][k]-sam==0)
            {
                d[k]=0;
            }
            s[k][k]=sqrt(fabs(a[k][k]-sam));
            s[k][j]=(a[k][j]-fam)/(s[k][k]*d[k]);
        }
    }
    for(k=1;k<n;k++)
    {
        h=a[k][k];
        if(k!=1)
        {
            for(i=1;i<k-1;i++)
            {
                h=h-d[i]*pow(s[i][k],2);
            }
        }
            if(h>0)
            {
                d[k]=1;
            }
            if(h<0)
            {
                d[k]=-1;
            }
            if(h==0)
            {
                d[k]=0;
            }
            s[k][k]=sqrt(fabs(h));
            for(j=k+1;j<n;j++)
            {
                h=a[k][j];
                if(k!=1)
                {
                    for(i=1;i<k-1;i++)
                    {
                        h=h-d[i]*s[i][k]*s[i][j];
                    }
                }
                s[k][j]=h/(s[k][k]*d[k]);
            }
    }
                y[1]=b[1]/(s[1][1]*b[1]);
                for(i=2;i<n;i++)
                {
                    h=b[i];
                        for(k=1;k<i-1;k++)
                        {
                            h=h-d[k]*y[k]*s[k][i];
                        }
                        y[i]=h/(s[i][i]*d[i]);
                }
                x[n-1]=y[n-1]/s[n-1][n-1];
                for(i=n-1;i>1;i--)
                {
                    h=y[i];
                for(k=i+1;k<n;k++)
                {
                    h=h-x[k]*s[i][k];
                }
                x[i]=h/s[i][i];
                cout<<"koren yravneniya";
                cout<<endl;
                cout<<x[i];
                }
    system("pause");
    return(0);
}
Вложения
Тип файла: docx Блок схема и массивы d и s.docx (40.7 Кб, 65 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.02.2014, 22:57     Решение СЛАУ методом квадратного корня
Посмотрите здесь:

Решение СЛАУ методом Зейделя C++
C++ Решение СЛАУ методом Крамера
C++ СЛАУ(метод квадратного корня)
Решение СЛАУ методом прогонки C++
Решение СЛАУ методом отражений C++
Решение СЛАУ методом отражений C++
Решение СЛАУ методом вращения C++
C++ Решение слау методом релаксации

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
roma 8
0 / 0 / 0
Регистрация: 07.10.2015
Сообщений: 1
07.10.2015, 22:01     Решение СЛАУ методом квадратного корня #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
#include<iostream>
using namespace std;
int main()
{
    setlocale(LC_CTYPE, "ukr");
    float A[10][10];
    float U[10][10];
    float b[10], x[10], y[10];
    int n, k;
    int i, j;
    float temp;
    cout << "введіть розмірність матриці" << endl;
    cin >> n;
label:
    cout << "введіть елементи симетричної  матриці " << n << "x" << n << endl;
    for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
        {
            cin >> A[i][j];
        }
    for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
        {
            U[i][j] = 0;
        }
    //перевірка на симетричність
    for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
        {
            if (A[i][j] != A[j][i])
            {
                cout << "матриця не симетрична" << endl;
                goto label;
            }
        }
    cout << "введіть елементи вектора b" << n << "x" << n << endl;
    for (i = 0; i < n; i++)
    {
        cin >> b[i];
    }
 
    for (int i = 0; i < n; i++)
    {
        temp = 0;
        for (int k = 0; k < i; k++)
            temp = temp + U[k][i] * U[k][i];
        U[i][i] = sqrt(A[i][i] - temp);
        for (j = i; j < n; j++)
        {
            temp = 0;
            for (k = 0; k < i; k++)
                temp = temp + U[k][i] * U[k][j];
            U[i][j] = (A[i][j] - temp) / U[i][i];
        }
    }
    for (i = 0; i < n; i++) {
        for (j = 0; j < n; j++) {
            cout << U[i][j]<<" ";
        }
        cout << endl;
    }
    for (i = 0; i < n; i++)
    {
        temp = 0;
        for (int k = 0; k < i; k++)
            temp = temp + U[k][i] * y[k];
        y[i] = (b[i] - temp) / U[i][i];
    }
    for (i = n - 1; i >= 0; i--)
    {
        temp = 0;
        for (int k = i + 1; k < n; k++)
            temp = temp + U[i][k] * x[k];
        x[i] = (y[i] - temp) / U[i][i];
    }
    for (i = 0; i < n; i++)
        cout << "x" << i << "= " << x[i] << endl;
    system("pause");
}
Yandex
Объявления
07.10.2015, 22:01     Решение СЛАУ методом квадратного корня
Ответ Создать тему
Опции темы

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