|
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 69
|
||||||||||||||||
Получить вектор (А-Е)*b, где Е – единичная матрица29.07.2013, 21:34. Показов 5494. Ответов 27
Метки нет (Все метки)
День добрый форумчане.
Собственно, без всяких лирических отступлений и прочего. При реализации задачи я столкнулся с некоторой загвосткой. Собственно сама задача: Даны квадратная матрица А порядка n и вектор b с n элементами. Получить вектор (А-Е)*b, где Е – единичная матрица. Определить функции формирования единичной матрицы и умножения квадратной матрицы на вектор. Код:
Казалось бы, простая задача. Ан нет и тут я "спотыкнулся" на ровном месте, а вот "встать" чего-то не могу. Вот в чем моя, так сказать, проблема: В методе multuply компилятор ругается на следующую строчку:
Добавлено через 2 часа 9 минут Вот, немного привел в потребный вид. (Проблема по прежнему осталась)
0
|
||||||||||||||||
| 29.07.2013, 21:34 | |
|
Ответы с готовыми решениями:
27
Получить вектор (А * Е) b, где Е-единичная матрица порядка n
|
|
352 / 162 / 20
Регистрация: 22.12.2011
Сообщений: 352
|
|
| 30.07.2013, 11:24 | |
|
iiyuijkhgfjf, что такое sub у вас в коде? Правильно, метод. Как вы используете sub в коде? Правильно, как объект. А методы они такие, их вызывать нужно сначала. С параметрами даже!
1
|
|
|
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 69
|
|
| 30.07.2013, 13:34 [ТС] | |
|
Здравствуйте.
Sakralbar, можете, пожалуйста, привести пример. Т.к. пробовал, но все равно ругается на sub. Возможно, я чего-то не то делаю. Но пример был бы мне рчень полезен. (Т.к. именно с правильным вызовом методов я испытываю некоторые проблемы).
0
|
|
|
|
||||||
| 30.07.2013, 14:40 | ||||||
|
Выражение
У вас есть объект sub? Нет. Тем более нет никакого поля matrix и никаких строк и столбцов. Поэтому это выражение в рамках приведенного кода лишено смысла. Вам нужно написать выражение вида <Объект класса MatrixMethod>.sub(<Объект класса MatrixMethod>) Должен заметить, что само название класса "MatrixMethod" представляется мне довольно неудачным. Чем вас не устроило просто "Matrix"?
1
|
||||||
|
352 / 162 / 20
Регистрация: 22.12.2011
Сообщений: 352
|
||||||||
| 30.07.2013, 14:52 | ||||||||
|
iiyuijkhgfjf, метод
Не по теме: Сугубо моё мнение: вообще советую вам переписать свой код. 4: "Функция должна делать только одну операцию, она должна делать ее очень хорошо, и большо она ничего делать не должна". Если у вас есть функция sub, то она должна вычитать из матрицы матрицу, а не просто единичную. Есть Функция multuply - должна перемножать матрицы, а не сначала вычитать единичную и потом умножать на вектор. (если что, то вектор - матрица размера 1 x N) ---------------- Старайтесь сразу писать хорошо и правильно, иначе вы сначала себе будете вредить, а потом (если устроитесь программистом) - другим. Считайте, что это - некоторый этикет. ---------------- Вообще идеально было бы сначала написать класс Matrix и реализовать в нем методы вычитания, сложения и умножения матриц. И вообще привыкайте разбивать задачи на подзадачи, легче вам же будет. ---------------- Критика, коллеги? =)
1
|
||||||||
|
|
||||||
| 30.07.2013, 15:09 | ||||||
|
Кроме того, мне представляется неудачным решение создать метод print() внутри класса MatrixMethod. Это не задача матрицы - печататься в консоль. Задача матрицы - по требованию преобразоваться в текстовый вид. Класс не должен брать на себя не свойственных ему функций, так как это делает код запутанным и нелогичным. Общепринятым решением является переопределить метод toString() родительского класса Object. У любого класса должен быть переопределен метод toString(), потому что его реализация в классе Object неинформативна в 99% случаев. Когда другой программист захочет напечатать матрицу, он сделает так:
Понятно, что пока вы учитесь вам все легко и понятно. Но если вы будете работать - вам придется думать не только о своем удобстве но и об удобстве других людей. Не рекомендуется смешивать поля и методы внутри класса. Поля желательно выделить отдельно в начале класса. Совсем здорово будет разделить public/private, выделить отдельно static и final поля. Про единичную матрицу уже сказали - это абсолютно неочевидное поведение. Логичнее создать нулевую матрицу, но никак не единичную.
2
|
||||||
|
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 69
|
|||||||||||
| 31.07.2013, 01:52 [ТС] | |||||||||||
|
Sakralbar, Gibby, спасибо ОГРОМНОЕ за критику и дельные советы.
Добавлено через 3 часа 1 минуту Нет, или я дурак, или я что-то не так делаю. Вот код:
P.S. честно, я не знаю из-за чего но у меня не получается вызвать этот метод. Проверял 2 предыдущих метода - работают нормально, метод multiply - вот в нем что-то не так. Добавлено через 4 часа 34 минуты Дело вот в чем: примерное представление о том, как надо вызывать метод имею. НО в контексте этой задачи я из-за чего-то теряю возможность реализации поставленной цели. Начнем, пожалуй с первого. У меня есть объект sub? Да, вот я его указываю в методе multiply
0
|
|||||||||||
|
|
|||||||||||||||||||||
| 31.07.2013, 09:32 | |||||||||||||||||||||
У вас вообще слишком много всяких matrix. Это путает. Кстати, в какой IDE вы работаете? Мои NetBeans выдают достаточно внятные подсказки об ошибках.
0
|
|||||||||||||||||||||
|
352 / 162 / 20
Регистрация: 22.12.2011
Сообщений: 352
|
|||||
| 31.07.2013, 09:38 | |||||
|
iiyuijkhgfjf,
Так же Еще, ------------------ И да, мы уже вам советовали - разберитесь в своей IDE, они обычно помогают самому выявить ошибки.
0
|
|||||
|
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 69
|
||||||||||||||||||||||||
| 31.07.2013, 22:20 [ТС] | ||||||||||||||||||||||||
|
Здравствуйте.
Gibby, Sakralbar, Sakralbar, Gibby, это, может быть и нагло с моей стороны, но прошу, пожалуйста, курировать меня в реализации данной задачи. Без вас, честное слово, застряну. Добавлено через 1 час 13 минут Немного отредактировал код:
Строка объявления метода sub
Пока компилятор все равно ругается, думаю, что из-за того, что я не присваиваю модификатор static вот в этом месте:
При подстановке static все равно сохраняется проблема.
0
|
||||||||||||||||||||||||
|
|
||||||
| 01.08.2013, 09:56 | ||||||
|
Основная проблема, что вы не задумываясь над архитектурой программы начали писать код. Когда код не захотел работать вы начали вносить в него какие-то случайные изменения, делая код все менее и менее понятным.
Я вам опишу то, как я вижу вашу программу с точки зрения архитектуры:
2
|
||||||
|
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 69
|
|||||||
| 01.08.2013, 17:05 [ТС] | |||||||
|
Здравствуйте.
Основная идея была такая: 1. Сделать метод, создающий еденичную матрицу. 2. Метод, вычитающий обычную квадратную матрицу из единичной. 3. Метод, умножающий результат 2-го пункта на вектор. 4. Вывести полученный результат на экран. Первые 2 пункта и пункт 4 получились и работают. 3-тий отказывается работать. Добавлено через 10 минут Вот что на данный момент имею:
1. Сделать метод, создающий еденичную матрицу. 2. Метод, вычитающий обычную квадратную матрицу из единичной. 3. Метод, умножающий результат 2-го пункта на вектор. 4. Вывести полученный результат на экран.
0
|
|||||||
|
352 / 162 / 20
Регистрация: 22.12.2011
Сообщений: 352
|
|
| 01.08.2013, 17:14 | |
|
iiyuijkhgfjf, вам нужно переименовать метод sub либо переменную sub. Уже говорили об этом.
Советую вам так-же читать и кидать сюда коды ошибок, а так же таки научиться пользоваться IDE. Первоочередной навык же при работе в среде разработки.
1
|
|
|
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 69
|
|||
| 01.08.2013, 22:01 [ТС] | |||
|
Sakralbar, На данный момент мне высвечивается вот такое сообщение об ошибке:
The type of the expression must be an array type but it resolved to Matrix Добавлено через 4 часа 40 минут Вобщем, дело обстоит в следующем. Я не знаю как реализовать задачу, которая на листке бумаги вычисляется меньше минуты. Возможно, я так и не понял что делать. Писал программу с чистого листа и по новой - ничего не получается. Вобщем, если кому не сложно - помогите разобраться вот с этим методом:
0
|
|||
|
|
|
| 01.08.2013, 23:58 | |
|
1. Создаете метод, который вернет квадратную матрицу
2. Создаете метод, который заполнит матрицу элементами 3. Создаете метод, который вернет единичную матрицу 4. Создаете метод, который вычтет из одной матрицы другую и вернет вам матрицу-результат 5. Создаете метод, который вернет вам вектор 6. Используете метод из п.2 чтобы заполнить вектор элементами 7. Создаете метод, который умножит матрицу-результат из п.4 на вектор из п.6
1
|
|
|
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 69
|
|||||||||||||||||||||
| 02.08.2013, 20:37 [ТС] | |||||||||||||||||||||
|
Здравствуйте.
Пробую реализовать свой вариант решения (см. ниже). Также, параллельно, занимаюсь вариантом, предложенным Gibby. На данный момент времени выкладываю свой вариант (компилятор указывает на ошибки - см. комментарии в коде)
Есть 3 метода (создание ед. матрицы, вычитание и умножение) Я в методе main создаю матрицу, из которой будет вычитаться ед. матрица. Далее создаю матрицу-вектор. и умножаю ее на полученный результат вычитания. Как это по идее должно быть приведу в примере вычитания матриц. Вот сам метод:
Вот примерно так я хочу реализовать и вот эту задачу, но сталкиваюсь с проблемами (см. комментарии).
0
|
|||||||||||||||||||||
|
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 69
|
|
| 07.08.2013, 11:55 [ТС] | |
|
Здравствуйте.
Проблема все так же осталась. Честно говоря, уже не знаю, что именно я не так делаю. И обратится, по сути, не к кому за помощью... Честно, укажите что именно я не так делаю. Еще, как назло, при переустановке системы забыл скопировать то что сделал... Вобщем, прошу помощи, SOS.
0
|
|
|
|
|||||||||||
| 07.08.2013, 14:18 | |||||||||||
|
App.java:
1
|
|||||||||||
|
0 / 0 / 0
Регистрация: 15.03.2013
Сообщений: 69
|
||
| 07.08.2013, 15:11 [ТС] | ||
|
Здравствуйте.
Gibby, спасибо, за помощь. Но можете, пожалуйста объяснить почему мой вариант не работает? Пробовал по отдельности каждый метод (в моем варианте) - все работает. Компаную вместе - не работает. Что именно я не так делаю? И еще вопрос: как правильно вызывать методы? Добавлено через 2 минуты И еще вопрос: Разъясните вот данную часть:
0
|
||
|
|
||||||||||||||||||||||||||||||||||||||||||||
| 07.08.2013, 15:29 | ||||||||||||||||||||||||||||||||||||||||||||
Возможно, вам стоило реализовать метод
Аналогично вторая ошибка, где вы тем же варварским способом пытаетесь работать с методом sub:
1
|
||||||||||||||||||||||||||||||||||||||||||||
| 07.08.2013, 15:29 | |
|
Помогаю со студенческими работами здесь
20
Для матриц I=2P-E, где Е-единичная матрица,а Р=Р(n,n), проверить св-во I^2=Е.При помощи метода Гаусса решить СЛАУ Ix=y, где вектор состоит из единиц. Проверить для матрицы H=E-vvT/|v|2 (где E – единичная матрица, а вектор v=v(n) свойство ортогональности HT=H-1 Даны квадратные матрицы A, B порядка n Получить матрицу N=B(A*E), где E- единичная матрица
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога
Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
|
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
|
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога
В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
|
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога
Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
|
|
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога
Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
|
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
|
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования.
Часть библиотеки BedvitCOM
Использованы. . .
|
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога
SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
|