Форум программистов, компьютерный форум CyberForum.ru
CyberForum.ru - форум программистов и сисадминов > > >
Восстановить пароль Регистрация
 
Вишенка
Новичок
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 6
22.11.2009, 19:38     возведение в степень матрицы   #1
Помогите, пожалуйста, написала программу в си# возведение в степень матрицы, выводит ответ, но неправильный(((, в чём ошибка?
Вот фрагмент кода

Код C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private void buttonExponentiation_Click(object sender, EventArgs e)
        {
            double S = 0;
            for (int i = 0; i < m; i++)
                for (int j = 0; j < n; j++)
                {
                    S = 0;
                    S = Math.Pow(A[i, j], f);
                    f = Convert.ToInt32(textBoxP.Text);
                    B[i, j] = S;
                }
           
            FillDG();
        }
 
        void FillDG()
        {
            for (int i = 0; i < m; i++)
                for (int j = 0; j < n; j++)
                    dataGridViewMatrixB.Rows[i].Cells[j].Value
                        = B[i, j].ToString();
        }
AdAgent
Объявления
22.11.2009, 19:38     возведение в степень матрицы
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.11.2009, 19:38     возведение в степень матрицы
Посмотрите здесь:

C# Возведение в степень
C# Возведение матрицы в степень.
C# Возведение в степень многочлена
C# Возведение матрицы в степень
C# .NET 3.x Скобки и бинарное возведение в степень
M128K145
Форумчанин
Эксперт C++
8188 / 3410 / 70
Регистрация: 03.07.2009
Сообщений: 10,637
22.11.2009, 19:55     возведение в степень матрицы   #2
В код не вникал, но попробуй так
Код C#
1
2
3
4
int i, j;
for (i = 0; i < m; ++i)
    for (j = 0; j < n; ++j)
        B[i, j] = Math.Pow(A[i, j], Convert.ToInt32(textBoxP.Text));
Goldywhite
Форумчанин
43 / 43 / 2
Регистрация: 19.10.2009
Сообщений: 119
22.11.2009, 20:22     возведение в степень матрицы   #3
потому что это не возведение в степень.
A^2 = A*A. Ищи формулу умножения матриц и используй её.

Добавлено через 3 минуты
насколько я знаю матрица должна быть квадратной для возведения в степень.
Вроде так:
Код C#
1
2
3
4
5
6
var B = new int[n,n];
for(var i = 0; i<n; i++)
for(var j=0; j<n; j++) {
for(var k =0; k<n; k++)
B[i,j]+=A[i,k]*A[k,j];
}
Вишенка
Новичок
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 6
22.11.2009, 21:02  [ТС]     возведение в степень матрицы   #4
Goldywhite, мне же надо не только в квадрат возвести эту матрицу, степенью может быть любое число
Goldywhite
Форумчанин
43 / 43 / 2
Регистрация: 19.10.2009
Сообщений: 119
22.11.2009, 21:27     возведение в степень матрицы   #5
Как-то так:

Код C#
1
2
3
4
5
6
7
8
9
10
11
var C = A;
for(var p =0; p<pow; p++){
var B = new int[n,n];
for(var i = 0; i<n; i++)
for(var j=0; j<n; j++) {
for(var k =0; k<n; k++)
B[i,j]+=C[i,k]*A[k,j];
}
C=B;
}
return C;
Добавлено через 9 минут
Работает?
AdAgent
Объявления
22.11.2009, 21:27     возведение в степень матрицы
Вишенка
Новичок
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 6
22.11.2009, 21:37  [ТС]     возведение в степень матрицы   #6
Нет, выходит ошибка, связанная с return

Добавлено через 2 минуты
Хотя работает, но всё равно ответ неправильный
Goldywhite
Форумчанин
43 / 43 / 2
Регистрация: 19.10.2009
Сообщений: 119
22.11.2009, 21:39     возведение в степень матрицы   #7
потому что это тело функции с такой сигнатурой:
Код C#
1
int[,] MatrixPow(int[,] A, int n, int pow)
Добавлено через 52 секунды
Цитата Сообщение от Вишенка Посмотреть сообщение
Хотя работает, но всё равно ответ неправильный
Какая матрица и какой правильный ответ?
Вишенка
Новичок
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 6
22.11.2009, 22:03  [ТС]     возведение в степень матрицы   #8
Всё равно ошибка return, ввожу матрицу 3 2, возвожу в квадрат, правильный ответ 11 14, а выводит 18 8
1 4 7 18 2 32

Добавлено через 1 минуту
Матрицы квадратные, цифры сместились

Добавлено через 43 секунды
Всё равно ошибка return, ввожу матрицу 3 2, возвожу в квадрат, правильный ответ 11 14, а выводит 18 8
1 4 7 18 2 32
Goldywhite
Форумчанин
43 / 43 / 2
Регистрация: 19.10.2009
Сообщений: 119
22.11.2009, 22:08     возведение в степень матрицы   #9
что такое матрица 3 2?
Вишенка
Новичок
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 6
22.11.2009, 22:10  [ТС]     возведение в степень матрицы   #10
Матрица 2 3 4 1, квадратная
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2009, 22:36     возведение в степень матрицы
Еще ссылки по теме:

C# Возведение в степень булевых матриц
C# Рекурсия. Возведение в степень
C# возведение в степень
Goldywhite
Форумчанин
43 / 43 / 2
Регистрация: 19.10.2009
Сообщений: 119
22.11.2009, 22:36     возведение в степень матрицы   #11
1 2 * 5 6 = (1*5+6*3) (1*6+2*8)
3 4 7 8 (3*5+4*7) (3*6+4*8)

единичная матрица в квадрате:
1 0 * 1 0 = (1*1+0*0) (1*0+0*1) = 1 0
0 1 | 0 1 | (0*1+1*0) (0*0+1*1) | 0 1

Добавлено через 6 минут
Цитата Сообщение от Вишенка Посмотреть сообщение
Матрица 2 3 4 1, квадратная
2 3 4 1
это:
2 3
4 1
так?

2 3 4 1 * 2 3 4 1 = (2*2+3*4) (2*3+3*1) (4*2+1*4) (4*3+1*1) = 16 9 12 13

Добавлено через 9 минут
Вот консольное приложение. Там ошибка была - pow-1 Должно быть:
Код 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
class Program
    {
        public static int[,] Pow(int[,] A, int rank, int pow)
        {
            var C = A;
            for (var p = 0; p < pow-1; p++)
            {
                var B = new int[rank, rank];
                for (var i = 0; i < rank; i++)
                    for (var j = 0; j < rank; j++)
                    {
                        for (var k = 0; k < rank; k++)
                            B[i, j] += C[i, k] * A[k, j];
                    }
                C = B;
            }
            return C;
        }
        
        static void Main(string[] args)
        {
            var A = new int[2,2];
            A[0, 0] = 2;
            A[0, 1] = 3;
            A[1, 0] = 4;
            A[1, 1] = 1;
            var B = Pow(A, 2, 2);
            for (var i = 0; i < 2; i++ )
            {
                Console.WriteLine("{0}\t{1}", B[i, 0], B[i, 1]);
            }
                Console.ReadLine();
        }
 
        
    }
Добавлено через 8 минут
если вставишь мою функцию Pow то твоя будет выглядеть так:
Код C#
1
2
3
4
5
6
7
8
9
10
11
private void buttonExponentiation_Click(object sender, EventArgs e)
        {
if(m!=n) {
MessageBox.Show("Матрица должна быть квадратной");
return;
}
var rank = m;
var pow = Convert.ToInt32(textBoxP.Text);
B = Pow(A, rank, pow);
FillDG();
}
Естественно A и B должны быть int[m,m]
Yandex
Объявления
22.11.2009, 22:36     возведение в степень матрицы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Опции темы

Текущее время: 20:49. Часовой пояс GMT +4.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.7 PL3
Copyright ©2000 - 2014, vBulletin Solutions, Inc.
Яндекс.Метрика