Возведение матрицы степень java

Возведение матрицы в степень методом JAVA

но возврат WAYYY выключен. Только первый (1,1) элемент матрицы находится в точке.

Я пытался использовать этот метод в основном так

// Multiplying matrices for (i = 0; i < row; i++) < for (j = 0; j < column; j++) < for (l = 0; l < row; l++) < sum += matrix[i][l] * matrix[l][j] ; >matrix[i][j] = sum ; sum = 0 ; > > // Solving Power of matrix for (i = 0; i

Где «мощность», «строка» и «столбец» — это целое число, которое вводит пользователь.

Любые идеи, как я могу это сделать?

Вы пытаетесь возвести матрицу в степень, например, для матрицы M «N = M ^ p»? Или вы пытаетесь воздействовать на каждый отдельный элемент матрицы и просто независимо возводить их в степень? — Jason C

в основном МMМ, для м^3 — user3124548

2 ответы

Во-первых, ваш алгоритм возведения в квадрат матрицы имеет (общую) ошибку. У вас есть:

for (i = 0; i < row; i++) < for (j = 0; j < column; j++) < for (l = 0; l < row; l++) < sum += matrix[i][l] * matrix[l][j] ; >matrix[i][j] = sum ; sum = 0 ; > > 

Однако вам нужно сохранить результат во временной второй матрице, потому что когда вы делаете matrix[i][j] = sum , он заменяет значение в этой позиции выводом, после чего более поздние результаты оказываются неверными. Также я предлагаю инициализировать sum в 0 первый, так как кажется, что вы объявляете его вне этого цикла, и его инициализация сначала защищает вас от любого произвольного значения sum может иметь перед входом в цикл. Кроме того, не сразу понятно, что вы имеете в виду под row и column — убедитесь, что вы перебираете всю матрицу. Например:

int temp[][] = new int[matrix.length]; for (i = 0; i < matrix.length; i++) < temp[i] = new int[matrix[i].length]; for (j = 0; j < matrix[i].length; j++) < sum = 0 ; for (l = 0; l < matrix.length; l++) < sum += matrix[i][l] * matrix[l][j] ; >temp[i][j] = sum ; > > // the result is now in 'temp', you could do this if you wanted: matrix = temp; 

Обратите внимание, что matrix.length и matrix[i].length достаточно взаимозаменяемы выше, если матрица квадратная (какой она должна быть, чтобы ее можно было умножить на себя).

Во-вторых, ваше умножение квадраты матрица. Это означает, что если вы неоднократно применяете его, вы продолжаете возводить матрицу в квадрат каждый раз, а это означает, что вы сможете вычислить только степени, которые сами являются степенями двойки.

Ваша третья проблема — ваш последний бит не имеет большого смысла:

Не сразу понятно, что вы пытаетесь здесь сделать. Заключительная часть, кажется, пытается возвысить отдельные элементы до определенной степени. Но это не то же самое, что возведение матрицы в степень.

Что вы необходимость нужно определить правильный метод умножения матриц, который может умножать две произвольные матрицы, например:

int[][] multiplyMatrices (int[][] a, int[][] b) < // compute and return a x b, similar to your existing multiplication // algorithm, and of course taking into account the comments about // the 'temp' output matrix above >

Тогда вычисление мощности становится простым:

int[][] powerMatrix (int[][] a, int p)

Источник

Возведение квадратной матрицы в степень

Возведение матрицы в степень
Добрый день. Не так давно начал изучать Java. И вот наткнулся на проблему. Задача: Дана Квадратная.

Возведение квадратной матрицы в заданную целочисленную степень (в виде модуля)
Добрый день! Задание формулируется следующим образом: разработать программу для возведения.

Реализовать возведение квадратной матрицы в степень, где показатель степени — заданный вектор
Даны квадратная матрица A порядка n и вектор b с n элементами. Получить вектор A^2b. Помогите.

Возведение числа в степень за минимальное количество умножений, не используя возведение в степень (в чем ошибка?)
должно число подводиться в степень за минимальное кол умножения не используя возведение в степень.

for (int k = 0; k  Graph.length; k++){ Res[i][j] += Graph[i][k] * matrix[k][j]; }

dimadima2, не следует впихивать в методы всё, что ни попадя. Если метод должен возводить в степень то пусть этим и занимается. Пишите проще. Как вариант:

public static int[][] power(int[][] matrix, int n) { int[][] output = new int[matrix.length][matrix.length]; for (int i = 0; i  matrix.length; i++) { for (int j = 0; j  matrix.length; j++) { output[i][j] = (int) Math.pow(matrix[i][j], n); } } return output; }

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

Эксперт Java

HOBATOP, возведение матрицы в степень это не возведение в степень её элементов. Это умножение матрицы саму на себя N раз.

KEKCoGEN, да, чего-то затупил, бывает 🙂 День выдался непростой вот и не догнал, что спрашивают за матрицу в математическом смысле, а не за двухмерный массив.

Однако же остаюсь при своём мнении: не для чего в метод пихать всякую всячину. Что касается решения, то вот возможный вариант:

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
public static void main(String[] args) { int pow = 4; int[][] input = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}; int[][] clone = input; int[][] output = new int[input.length][input.length]; for (int i = 0; i  pow - 1; i++) { output = power(input, clone); clone = output; } for (int[] temp : output) { for (int tmp : temp) { System.out.printf("%7d", tmp); } System.out.println(); } } public static int[][] power(int[][] input, int[][] clone) { int[][] output = new int[input.length][input.length]; for (int j = 0; j  input.length; j++) { for (int k = 0; k  input.length; k++) { for (int l = 0; l  input.length; l++) { output[j][k] += input[j][l] * clone[l][k]; } } } return output; }

Источник

Возведение матрицы в степень методом JAVA

Но возврат ПУТЬ выключен. Только первый (1,1) матричный элемент находится на точке.

Я пробовал использовать этот метод в основном так

// Multiplying matrices for (i = 0; i < row; i++) < for (j = 0; j < column; j++) < for (l = 0; l < row; l++) < sum += matrix[i][l] * matrix[l][j] ; >matrix[i][j] = sum ; sum = 0 ; > > // Solving Power of matrix for (i = 0; i

Где «мощность», «строка» и «столбец» — это целое число, которое вводит пользователь.

Любые идеи, как я могу это сделать?

Вы пытаетесь поднять матрицу до степени, например. для матрицы M, «N = M^p»? Или вы пытаетесь воздействовать на каждый отдельный элемент матрицы и просто независимо возводить их в степень?

2 ответа

У вас здесь много проблем.

Во-первых, ваш алгоритм возведения матрицы в квадрат имеет (общую) ошибку. У тебя есть:

for (i = 0; i < row; i++) < for (j = 0; j < column; j++) < for (l = 0; l < row; l++) < sum += matrix[i][l] * matrix[l][j] ; >matrix[i][j] = sum ; sum = 0 ; > > 

Однако вам необходимо сохранить результат во временной второй матрице, потому что, когда вы выполняете matrix[i][j] = sum , он заменяет значение в этой позиции выводом, тогда последующие результаты оказываются неверными. Также я предлагаю инициализировать sum значением 0 сначала , поскольку кажется, что вы объявляете его вне этого цикла, и инициализация сначала защищает вас от любого произвольного значения, которое может иметь sum перед тем, как в петлю. Кроме того, не сразу понятно, что вы имеете в виду под row и column — убедитесь, что вы выполняете итерацию по всей матрице. Например.:

int temp[][] = new int[matrix.length]; for (i = 0; i < matrix.length; i++) < temp[i] = new int[matrix[i].length]; for (j = 0; j < matrix[i].length; j++) < sum = 0 ; for (l = 0; l < matrix.length; l++) < sum += matrix[i][l] * matrix[l][j] ; >temp[i][j] = sum ; > > // the result is now in 'temp', you could do this if you wanted: matrix = temp; 

Обратите внимание, что matrix.length и matrix[i].length в значительной степени взаимозаменяемы выше, если матрица квадратная (что должно быть, чтобы умножить на себя).

Во-вторых, ваше умножение возводит в квадрат матрицу. Это означает, что если вы многократно применяете его, вы будете каждый раз возводить матрицу в квадрат, что означает, что вы сможете вычислять только степени, которые сами по себе являются степенями двойки.

Третья проблема — последний бит не имеет особого смысла:

Не сразу понятно, что вы здесь пытаетесь сделать. Заключительная часть, кажется, пытается поднять отдельные элементы до определенной мощности. Но это не то же самое, что возведение матрицы в степень.

Что вам нужно сделать, так это определить правильный метод умножения матриц, который может умножать две произвольные матрицы, например:

int[][] multiplyMatrices (int[][] a, int[][] b) < // compute and return a x b, similar to your existing multiplication // algorithm, and of course taking into account the comments about // the 'temp' output matrix above >

Тогда вычисление мощности становится простым:

int[][] powerMatrix (int[][] a, int p)

Если я правильно понимаю ваш алгоритм, вы на самом деле возводите каждую матрицу в степень n+1 , а не в степень n . Посмотрите внимательно на свой метод powerMatrix .

Источник

need Help на возведение матриц в степень

Java-университет

need Help на возведение матриц в степень - 1

Всем привет! Возникли трудности с возведением матрицы в степень. Помогите пожалуйста! Дан двумерный массив, необходим возвести в степень n. int[][] matrix = , >;

Этой функции хватит? Если нужно и в отрицательную степень возводить, то нужно еще и обратную матрицу находить

public static int[][] prod(int[][] a, int[][] b) < // предполагается, что a и b - квадратные матрицы одного размера int n = a.length; int[][] c = new int[n][n]; for (int i = 0; i < n; i++) < for (int j = 0; j < n; j++) < for (int k = 0; k < n; k++) < c[i][j] += a[i][k] * b[k][j]; >> > return c; >

JavaRush — это интерактивный онлайн-курс по изучению Java-программирования c нуля. Он содержит 1200 практических задач с проверкой решения в один клик, необходимый минимум теории по основам Java и мотивирующие фишки, которые помогут пройти курс до конца: игры, опросы, интересные проекты и статьи об эффективном обучении и карьере Java‑девелопера.

Этот веб-сайт использует данные cookie, чтобы настроить персонально под вас работу сервиса. Используя веб-сайт, вы даете согласие на применение данных cookie. Больше подробностей — в нашем Пользовательском соглашении.

Источник

Как возводить в степень в Java?

В этой статье мы расскажем о том, как выполнять возведение в степень в языке программирования Java. Читателю будут представлены 5 актуальных способов решения поставленной задачи.

Но прежде чем мы приступим к перечислению способов, давайте для начала вспомним, что же вообще представляет собой операция возведения:

Таким образом, речь идет об умножении числа на свое же значение n-е количество раз. Умножаемое число — это основание степени, а количество операций по умножению — показатель. Результат такого перемножения и будет называться возведением в степень. Для числа 3 3 результат будет равен 27, так как 3 х 3 х 3 = 27.

Теперь давайте рассмотрим, как это все реализуется в языке программирования Java.

Math pow

Использование класса Math — наиболее простой вариант решения поставленной задачи. На практике его применяют в большинстве ситуаций. Public class Math включает в себя математические методы, в том числе те, которые связаны с геометрией и тригонометрией. В этом классе методы реализованы в качестве статических, следовательно, есть возможность вызывать их через имя класса Math, не создавая объект класса.

public static int pow(int value, int powValue)

return (int) Math.pow(value, powValue);

Здесь пришлось использовать операцию приведения типа (int), т. к. этот метод класса Math осуществляет возвращение значения типа double (аргументы, по сути, тоже double , однако там применяется неявное приведение типа).

Теперь рассмотрим несколько дополнительных вариантов решения поставленной задачи.

Значение квадрата числа

Начнем с наиболее простого и напишем метод по возведению в квадрат:

public static void main(String[] args)

Как видим, возведение в квадрат сложностей не вызывает.

Число в степени

Чаще всего нам приходится работать не с квадратным значением числа, а с числом в определенной степени. Усложним предыдущий вариант и задействуем кастомное Java pow-значение:

public static void main(String[] args)

public static int pow(int value, int powValue)

int result = 1;

for (int a = 1; а

return result;

Алгоритм несложен: мы как будто задаем точку отсчета result , а потом умножаем его на значение value столько, сколько будет работать цикл с powValue .

Рекурсия

Следующий вариант является уже более экзотичным.

Вы должны знать, что рекурсия позволяет методу осуществлять вызов самого себя. В языке программирования Java такие методы тоже есть и называются они рекурсивными.

На практике рекурсивно можно решать многие алгоритмические задачи. Наша — не исключение. Давайте выполним возведение в степень рекурсивно:

Как видно из реализации, существуют 2 момента:

  1. Условие выхода из рекурсии. Если возведенное значение степени достигает единицы, нас выбрасывает назад.
    1. Непосредственный механизм умножения value на результат вызова того же самого метода, однако с powValue — 1.

    Для совсем ленивых разработчиков существуют способы «из коробки». Рассмотрим один из них.

    BigInteger

    BigInteger — это класс, который обеспечивает хранение целых чисел произвольной величины. Здесь существуют разные арифметические методы, которые позволяют работать с числами.

    Выполняем возведение посредством BigInteger в Java:

    Тут все предельно просто и не нуждается в дополнительных разъяснениях, не так ли? Однако на сегодня все, теперь вы будете знать о разных способах, позволяющих возводить в степень в «Джава».

    По материалам: https://javarush.ru/groups/posts/2828-kak-vihpolnitjh-vozvedenie-v-stepenjh-v-java.

    Интересуют более продвинутые знания по языку программирования Java? Добро пожаловать на курсы в Otus!

    Источник

    Читайте также:  Html table from text
Оцените статью