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

метод вращений - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ С++ http://www.cyberforum.ru/cpp-beginners/thread203990.html
Здравствуйте. Помогите пожалуйста с решением нескольких задач. Прошу помощи не потому что лень взяться и написать, а потому что я заочник и учусь по мере возможностей, но удаётся не всегда это делать. вот задачи: Матрицы и указатели Использовать для работы с матрицами указатели и операции вида *p++, p++ и т.д. Матрицы динамические, размер вводится с клавиатуры. Числовые значения считать...
C++ матрица Здравствуйте, помогите пожалуйста написать программу я в информатике вообще ничего не понимаю!!!! дана матрица (5*3) 1)найти строку, содержащую минимальный элемент матрицы и вывести её на экран 2) найденную строку поменять местами с 4 строкой!!!!!! помогите пожалуйста очень нужно http://www.cyberforum.ru/cpp-beginners/thread203989.html
C++ Как разбить строку на вектор из строк?
Здравствуйте. Хочу написать программу, которая текст преобразует в вектор,каждый элемент которого-отдельное слово. Создаю два объекта string s(собственно,текст) и s2. Дальше следующий код: string::iterator cur,next; string::iterator it; cur=s.begin(); for(it=s.begin();it<s.end();it++) { next=find(cur,s.end(),' '); copy(cur,next,inserter(s2,s2.begin()));
замкнутость многоугольника C++
добрый вечер.пишу игру точки.подскажите,плз,как можно реализовать вычисление замкнутости многоугольника?вот как в рисунке:надо знать,окружил ли многоугольник какую-нибудь площадь.
C++ МАССИВ http://www.cyberforum.ru/cpp-beginners/thread203959.html
Массив Х размером n=20 прочитать из текстового файла ,сформировать массив А,каждый элемент которго равен элементу массива Х разделенному на сумму последуюших за ним элементов массива.Модифицированный массив А записать в текстовый файл.
C++ Перевести с Pascal на С (Pure C) Помогите перевести, пожалуйста. uses crt; const max=19; var m:array of integer; n,i,j,k,p:integer; begin clrscr; repeat write('Количество прямых от 3 до ',max,' n='); подробнее

Показать сообщение отдельно
papirus
 Аватар для papirus
2 / 2 / 0
Регистрация: 21.07.2009
Сообщений: 49
05.12.2010, 18:31     метод вращений
нужно найти собственные значения и векторы: вот прога тока она кажется путает индесы элемента http://www.cyberforum.ru/cgi-bin/latex.cgi?a_{ij} из-за этого не правильно считает, пытался другую матрицу задать, она вообще зацикливается
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
#include <iostream>
#include <math.h>
#include <stdio.h>
#define eps 0.001
const int n = 2;
double max_el(int& i, int& j);
void multi_m(double m[n][n], double p[n][n], double (&t)[n][n] );
void print_m(double m[n][n]);
void tr_m(double (&m)[n][n]);
void sled(double m[n][n]);
 
double a[n][n] = {
/*  {1.8, 1.6, 1.7, 1.8}, 
    {1.6, 2.8, 1.5, 1.3},
    {1.7, 1.5, 3.8, 1.4},
    {1.8, 1.3, 1.4, 4.3}
    {5,1,2},                //если на этом примере, то прога зацикливается
    {1,4,1},
    {2,1,3}
*/
    {2,1},   //а на этом вообще не работает
    {1,3}
    };
int main() {
int im , jm;
int p = 1;
printf("\n Матрица A:");
print_m(a);
while (fabs(max_el(im, jm)) > eps) {
    printf("\nИтерация: %d" ,p);
    sled(a);
 
    double maxij = max_el(im,jm);
    printf("\nmax:a[%d,%d]= %4.8f", im, jm, maxij);
    double fi = atan(2*maxij/(a[im][im]-a[jm][jm]))/2;
    printf("\nfi=  %4.8f",fi);
    double cosfi = cos(fi), sinfi = sin(fi);
    printf("\ncosfi=%4.8f sinfi=%4.8f",cosfi,sinfi);
    double hi[n][n];
 
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++) {
            if (i == j)
                hi[i][j] = 1;
            else hi[i][j] = 0;
        }
    hi[im][im] = cosfi;
    hi[jm][jm] = cosfi;
    hi[im][jm] = -sinfi;
    hi[jm][im] = sinfi;
 
    printf("\nматрица вращения H:");
    print_m(hi);
 
    double hic[n][n];  //вспомогательная матрица для умножения
    for (int i = 0; i < n; i++)
        for (int j = 0; j < n; j++)
            hic[i][j] = hi[i][j];
 
    tr_m(hi);
 
    double b[n][n];
    multi_m(hi, a, b);
    multi_m(b, hic, a);
    printf("\nСледующее приближение:");
    print_m(a);
    ++p;
}
}
 
void sled(double m[n][n]) {
    double s = 0;
    for (int i = 0; i < n; i++)
        s += a[i][i];
    printf("\nслед= %f",s);
};
 
double max_el(int& f, int& g) {
double max = a[0][1];
for (int j = 1; j < n; j++)
    for (int i = 0; i < j; i++) {
        if (a[i][j] > max) {
            max = a[i][j];
            f = i; g = j;
        }
    }
return max;
 }
 
void tr_m(double (&m)[n][n]) {
    for (int i = 1; i < n; i++)
        for (int j = 0; j < i; j++) {
            double buf = m[i][j];
            m[i][j] = m[j][i];
            m[j][i] = buf;
        }
}
 
void multi_m(double m[n][n], double p[n][n], double (&t)[n][n]) {
    for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++) {
            double s = 0;
            for (int l = 0; l < n; l++)
                s += m[i][l]*p[l][j];
            t[i][j] = s;
    }
 }
 
void print_m(double m[n][n]) {
    printf("\n");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++)
            printf("%4.8f ", m[i][j]);
    printf("\n");
    };
 }
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 00:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru