Форум программистов, компьютерный форум CyberForum.ru
CyberForum.ru - форум программистов и сисадминов > > >
Восстановить пароль Регистрация

Ответ Создать новую тему
 
Вишенка
Новичок
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 6
22.11.2009, 18: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, 18:38
M128K145
Форумчанин
Эксперт C++
8182 / 3404 / 68
Регистрация: 03.07.2009
Сообщений: 10,631
22.11.2009, 18: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
Регистрация: 18.10.2009
Сообщений: 119
22.11.2009, 19: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, 20:02  [ТС]
  #4
Goldywhite, мне же надо не только в квадрат возвести эту матрицу, степенью может быть любое число
Goldywhite
Форумчанин
43 / 43 / 2
Регистрация: 18.10.2009
Сообщений: 119
22.11.2009, 20: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 минут
Работает?
Вишенка
Новичок
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 6
22.11.2009, 20:37  [ТС]
  #6
Нет, выходит ошибка, связанная с return

Добавлено через 2 минуты
Хотя работает, но всё равно ответ неправильный
Goldywhite
Форумчанин
43 / 43 / 2
Регистрация: 18.10.2009
Сообщений: 119
22.11.2009, 20:39
  #7
потому что это тело функции с такой сигнатурой:
Код C#
1
int[,] MatrixPow(int[,] A, int n, int pow)
Добавлено через 52 секунды
Цитата Сообщение от Вишенка Посмотреть сообщение
Хотя работает, но всё равно ответ неправильный
Какая матрица и какой правильный ответ?
Вишенка
Новичок
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 6
22.11.2009, 21: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
Регистрация: 18.10.2009
Сообщений: 119
22.11.2009, 21:08
  #9
что такое матрица 3 2?
Вишенка
Новичок
0 / 0 / 0
Регистрация: 18.11.2009
Сообщений: 6
22.11.2009, 21:10  [ТС]
  #10
Матрица 2 3 4 1, квадратная
Goldywhite
Форумчанин
43 / 43 / 2
Регистрация: 18.10.2009
Сообщений: 119
22.11.2009, 21: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, 21:36
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать новую тему

Похожие темы
Тема Раздел Ответов Автор Дата
C# возведение в степень
подскажите как записать cos в степени n-1 *a*x в примере t2 using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace...
C# для начинающих 2 VuU 05.01.2014 15:44
C# Рекурсия. Возведение в степень
Помогите с написанием кода в С# Вот само условие: Напишите рекурсивную функцию возведения в степень, пользующуюся следующим свойством: an=a*an-1. Оцените время работы этой функции в зависимости...
C# для начинающих 7 mon_paradis 06.07.2013 12:03
C# Возведение в степень булевых матриц
Здравствуйте! Нужна помощь, не могу разобраться где ошибка. Требуется возвести в степень булевую матрицу, но в итоге получается не верно. Сам понять где ошибка не могу((( Заранее, спасибо. Вот код: ...
C# для начинающих 4 DolphinLover32 01.05.2013 15:32
C# WinForms Возведение матрицы в степень
доброго времени суток! помогите пожалуйста. необходимо создать винформ возведения матрицы в степень n. Размерность матрицы и степень вводится с помощью numericUpDown. (сделал) сама матрица...
C# Windows Forms 1 shmidt34 05.12.2012 20:48
C# Описать класс степень – возведение рационального числа в целую степень
Разрабатываемый класс должен содержать следующие элементы: скрытые и открытые поля, конструкторы без параметров и с параметрами (имена некоторых полей должны совпадать с идентификаторами параметров),...
C# для начинающих 0 megaslap1 15.11.2012 23:49
C# Возведение в степень многочлена
Подскажите как возвести в степень многочлен, к прмеру: (x-1)^4 = x^4 - 4*x^3 + 6*x^2 - 4*x +1 Думал воспользоваться треугольником паскаля, но не понятен расчет коэффициентов!
C# для начинающих 1 Aikko 05.03.2012 07:46
C# Возведение матрицы в степень.
Тупая семестровая задачка...Вообщем звучит так: "Следом квадратной матрицы называется сумма элементов, расположенных на главной диагонали. Даны квадратная матрица A, натуральное число N. Вычислить...
C# для начинающих 5 sanchopa 19.05.2011 17:38
C# Возведение в степень
Помогите пожалуйста, программа шифрования RSA алгоритмом, нужно возводить в степень (достаточно большую), а за тем делить с получением остатка. Какой тип данных использовать что бы туда поместился...
C# .NET 34 Avalser 25.10.2009 11:32
Опции темы

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