Форум программистов, компьютерный форум, киберфорум
Java для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 24.04.2023
Сообщений: 1

Умножить матрицу на вектор

24.04.2023, 22:45. Показов 775. Ответов 1

Студворк — интернет-сервис помощи студентам
Всем привет!

Сразу оговорюсь, что в проге я ноль без палочки, но учёба в вузе требует выполнения вещей, в которых я не разбираюсь. У меня есть доп задание к лабораторной работе, и звучит оно так: реализуйте умножение матрицы на вектор и выведите результат.

По самому тексту задания к лабораторной у меня в коде должен быть класс Matrix с конструктором, создающим квадратные единичные матрицы, методами sum, product, setElement, getElement. Соответственно, хоть эти методы и не используются, их не надо убирать))

По допу я должна создать класс Vector, в котором у меня будут одномерные массивы (???) и, предположительно, конструктор неквадратных матриц в классе Matrix? Сам метод умножения одного на другое тоже должен быть в классе Matrix. В общем, тупняк начинается уже на этом моменте)) Я не совсем понимаю, какой тип данных где использовать и как это все лучше реализовать. Было бы здорово, если бы кто-то помог и доходчиво объяснил на языке начинающих, потому что я бы правда хотела понять, а не тупо скопировать то, что кто-то напишет)

Ниже код, который есть у меня на данном этапе (как говорится, не судите строго, я его слепила из того, что было))

матрикс

Java
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
public class Matrix {
    private int row;
    private int column;
    private int [] vec;
    private int [][] matrix;
 
    public Matrix(int value) {
        this.row = value;
        this.column = value;
        this.matrix = new int [row][column];
 
        for (int i = 0; i < value; i++){
            matrix [i][i] = 1;
        }
    }
 
    public void setElement(int row, int column, int value) {
        matrix[row][column] = value;
    }
 
    public int getElement(int row, int column) {
        return matrix[row][column];
    }
 
    public Matrix sum(Matrix obj) {
        Matrix res = new Matrix(row);
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < column; j++) {
                res.matrix[i][j] = 0;
                res.matrix[i][j] = this.matrix[i][j]+obj.matrix[i][j];
            }
        }
        return res;
    }
 
    public Matrix product (Matrix obj) {
        Matrix res = new Matrix(row);
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < column; j++) {
                res.matrix[i][j] = 0;
                for (int k = 0; k < row; k++) {
                    res.matrix[i][j] += this.matrix[i][k] * obj.matrix[k][j];
                }
            }
        }
        return res;
    }
 
    public Matrix VecProduct (Vector vec) {  
        Matrix res = new Matrix(this.row, 1);
 
        for (int i = 0; i < this.row; i++) {
            for (int j = 0; j < vec.num; j++) {
                res.matrix[i][j] = 0;
                for (int k = 0; k < 1; k++) {
                    res.matrix[i][j] += this.matrix[i][k] * vec.getElement(j);
                }
 
            }
        }
        return res;
    }
    /*public int[][] vecProduct (Vector obj) {            //закомменчены попытки
        int [][] res = new int [1][row];
        for (int i = 0; i < this.row; i++) {
            for (int j = 0; j < obj.num; j++) {
                res[i][j] = 0;
                for (int k = 0; k < 1; k++) {
                    res[i][j] += this.matrix[i][k] * obj.vec[j];
                }
 
            }
        }
        return res;
    }*/
 
    /*public int[][] ProductVec (Vector vec){
        int row1 = this.row;
        int col1 = this.column;
        int row2 = vec.num;
        int col2 = 1;
 
        int[][] res = new int[row1][col2];
        for (int i = 0; i < row1; i++) {
            for (int  j = 0; j < col2; j++) {
                res[i][j] = 0;
            }
        }
        return res;
    }*/
 
    public String toString() {
        StringBuilder str = new StringBuilder();
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < column; j++) {
                str.append(this.matrix[i][j] + "");
            }
            str.append("\n");
        }
        return str.toString();
    }
    public void print() {
        for (int i = 0; i < row; i++) {
            for (int j = 0; j < row; j++) {
                System.out.print(matrix[i][j] + " ");
            }
            System.out.print("\n");
        }
        System.out.print("\n");
    }
}
вектор

Java
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
public class Vector {
    public int num;
    public int [] vec;
 
    public Vector(int value) {
        this.num = value;
        this.vec = new int [num];
 
        for (int j = 0; j < num; j++) {
            vec[j] = 1;
        }
    }
 
    public void setElement(int num, int value) {
        vec[num] = value;
    }
 
    public int getElement(int num) {
        return vec[num];
    }
 
    public String toString() {
        StringBuilder str = new StringBuilder();
        for (int j = 0; j < num; j++) {
            str.append(this.vec[j] + "");
            str.append("\n");
        }
        return str.toString();
    }
    public void print() {
        for (int j = 0; j < num; j++) {
            System.out.print(vec[j] + "\n");
        }
        System.out.print("\n\n");
    }
}
мейн

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class Main {
    public static void main(String[] args) {
        Matrix a = new Matrix(2);
        Vector b = new Vector(2);
 
        a.setElement(0,0,1);
        a.setElement(0,1,4);
        a.setElement(1,0,2);
        a.setElement(1,1,3);
 
        b.setElement(0, 2);
        b.setElement(1,1);
 
        a.print();
        b.print();
        System.out.println(a.VecProduct(b));
 
    }
}
И да, все эти классы должны быть разбиты по разным файлам по условию задания( Такие пироги
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.04.2023, 22:45
Ответы с готовыми решениями:

Прочитать матрицу из файла и умножить
Мне нужно вычислить произведение двух матриц. У меня есть 2 файла с двумя разными целыми числами (матрицами). file1.txt 4 3 4 6 ...

Умножить вектор строку на вектор матрицу
Вот код, подключены QT5 библиотеки, нужно написать функцию для умножения вектор строку B на матрицу C #include &quot;Matrixes.h&quot; ...

Умножить матрицу на вектор
Вычислить А*Х, где А – двумерная матрица, X – вектор.

1
98 / 75 / 25
Регистрация: 17.03.2023
Сообщений: 161
25.04.2023, 16:34
Лучший ответ Сообщение было отмечено mewz как решение

Решение

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

Добавлено через 1 час 31 минуту
мой вариант (методы sum, product я пропускаю):

Кликните здесь для просмотра всего текста


Java
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
public class Matrix {
 
    private int[][] data;
 
    public Matrix(int rows, int columns) {
        this.data = new int[rows][columns];
    }
 
    public Matrix(int[][] data) {
        this.data = data;
    }
 
    public int getValue(int row, int column) {
        return data[row][column];
    }
 
 
    public void setValue(int row, int column, int value) {
        this.data[row][column] = value;
    }
 
    public int getColumnsCount() {
        return data[0].length;
    }
 
    public Vector vectorProduct(Vector vector) {
        if(vector.getSize() != this.getColumnsCount())
            throw new IllegalArgumentException("Количество столбцов матрицы и количество элементов вектора не совпадают");
 
        Vector result = new Vector(data.length);
 
        for(int row = 0; row < data.length; row++) {
            int rowSum = 0;
            for(int col = 0; col < data[row].length; col++) {
                rowSum += data[row][col] * vector.getValue(col);
            }
            result.setValue(row, rowSum);
        }
 
        return result;
    }
 
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        for(int row = 0; row < data.length; row++) {
            for(int col = 0; col < data[row].length; col++) {
                sb.append(data[row][col]+"\t");
            }
            sb.append("\n");
        }
        return sb.toString();
    }
 
}

Java
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
public class Vector {
    private int[] data;
 
    public Vector(int size) {
        data = new int[size];
    }
 
    public Vector(int[] data) {
        this.data = data;
    }
 
    public int getValue(int position) {
        return data[position];
    }
 
    public void setValue(int position, int value) {
        this.data[position] = value;
    }
 
    public int getSize() {
        return data.length;
    }
 
    @Override
    public String toString() {
        StringBuilder sb = new StringBuilder();
        for (int e = 0; e < data.length; e++) {
            sb.append(data[e]+"\n");
        }
        return sb.toString();
    }
}

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
public class Main {
    public static void main(String[] args) {
 
        int[][] matrixData = {{1,2,3},{4,5,6}};
        int[] vectorData = {6,4,2};
 
        Matrix m = new Matrix(matrixData);
        Vector v = new Vector(vectorData);
 
        System.out.println("Матрица");
        System.out.println(m);
        System.out.println("Вектор");
        System.out.println(v);
        System.out.println("Продукт матрица * вектор");
        try {
            System.out.println(m.vectorProduct(v));
        } catch (Exception e) {
            System.out.println(e.getLocalizedMessage());
        }
    }
}



вывод на экран

Матрица
1 2 3
4 5 6

Вектор
6
4
2

Продукт матрица * вектор
20
56



Цитата Сообщение от mewz Посмотреть сообщение
Я не совсем понимаю, какой тип данных где использовать и как это все лучше реализовать. Было бы здорово, если бы кто-то помог и доходчиво объяснил на языке начинающих, потому что я бы правда хотела понять, а не тупо скопировать то, что кто-то напишет)
Как видите мой вариант не слишком отличается от вашего решения. Даже не знаю что тут ещё объяснять. Разве что могу дать некоторые рекомендации, а так, судя по вашему решению вроде вам и так всё предельно понятно.
Как тип данных вполне подходят одномерный массив для вектора и двухмерный для матрицы соответственно. Однако на практике наверное было бы более целесообразно выбрать массивы типа double, например если вы хотите не только умножать но и делить. Так же при перемножении матрицы с вектором следует проверить соответствует ли количество столбцов в матрице
количеству элементов в векторе и кидать исключение в противном случае.

Если есть дополнительные вопросы, задавайте.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
25.04.2023, 16:34
Помогаю со студенческими работами здесь

Умножить матрицу на вектор
Даны квадратная матрица А порядка N и вектор В с N элементами, которые вычисляются по формуле Вi=1/(i2+2). Получить вектор АВ.

Умножить матрицу на вектор и вектор умножить на матрицу
Дана матрица nxm, способ заполнения -2n до 2n. Формирования вектора, значение первых n элементов с нечетными индексами. Умножить...

Умножить матрицу на вектор.
Даны квадратная матрица A порядка n и вектор с n элементами. Получить вектор Ab. Помогите плиз

Умножить матрицу на вектор.
Не совсем понимаю как суммируются такие массивы и что не так в коде( понимаю что в части где сама сумма считается, но все равно не понимаю...

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


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru