Форум программистов, компьютерный форум, киберфорум
Наши страницы

Assembler: математика, вычисления

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 35, средняя оценка - 4.89
Svikator
0 / 0 / 0
Регистрация: 05.11.2010
Сообщений: 67
#1

Возведение матрицы в квадрат - Assembler

28.10.2011, 10:57. Просмотров 4537. Ответов 10
Метки нет (Все метки)

Доброго времени суток господа.Необходимо возвести матрицу "B" в квадрат.Возник вопрос как это сделать?Как при перемножении матриц или другим способом?
Pascal
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
program kursach;
const
 maxn=10;
var
 matrA,matrB,matrC:array[1..maxn,1..maxn] of shortint;
 matrP,tempmatrP:array[1..maxn,1..maxn] of shortint;
 i,j,k,n,m,p:integer;
 s:shortint;
 baseA,baseB,baseC,baseP:integer;
begin
 write('Vvedite kolichestvo strok matrici B:');
 readln(m);
 write('Vvedite kolichestvo stolbcov matrici B:');
 readln(p);
 
 writeln('Vvedite elementi matrici B:');
 for i:=1 to m do
  for j:=1 to p do
   write('matrB[',i,',',j,']=');
   readln(matrB[i,j]);
 
asm
mov i,0
mov baseP,0
@@cicli:
 
mov j,0
@@ciclj:
 
mov s,0
mov k,0
mov baseB,0
@@ciclk:
 
mov bx,baseP
mov si,k
mov al,byte ptr matrB[bx+si]
mov ah,0
mov bx,baseB
mov si,j
imul byte ptr matrB[bx+si]
add s,al
 
inc k
add baseB,maxn
mov ax,m
cmp k,ax
jl @@ciklk
 
mov bx,baseP
mov si,j
mov al,s
mov byte ptr matrP[bx+si],al
 
inc j
mov ax,p
cmp j,ax
jl @@ciclj
 
inc i
add baseP,maxn
mov ax, m
cmp i,ax
jl @@cicli
end;
 
writeln('ASM result Matrica P:');
for i:=1 to  m do
 begin
 for j:=1 to p do
  write(matrP[i,j],' ');
  writeln;
 end;
 
end.
Выдаёт ошибку в цикле k ошибка 82 (@@ciclk)
Ошибка в конце программы.После end.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.10.2011, 10:57
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Возведение матрицы в квадрат (Assembler):

Возведение числа (float) в квадрат - Assembler
Нужно возвести число с плавающей точкой в квадрат.

Возведение матрицы в степень - Assembler
Сори за то что пложу темы..Люди кто нибудь скажет как возвести на ассемблере матрицу в степень?А то уже весь гугл перыл ничего точно никто...

Возведение в квадрат - Assembler
Необходима помощь в курсовой работе! работаю с МП КР580 запнулся на одном месте: задан массив из ста 8-разрядных чисел,необходимо...

Возведение в степень - Assembler
Если не трудно помогите реализовать такое уравнение.Нужен только код самого уравнения переменые заданны как My_A ...

Возведение числа в степень - Assembler
Здравствуйте! Дана задача возвести число в степень(степень и число известны и их не надо вводить с клавиатуры). Написал сам код, но...

Возведение числа в степень - Assembler
Сижу на экзамене, надо решить прогу у=2 в степени 3.1 помогите пожалуйста)) заранее спасибо!!!

10
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25539 / 17092 / 5419
Регистрация: 22.10.2011
Сообщений: 30,267
Записей в блоге: 7
28.10.2011, 11:11 #2
Цитата Сообщение от Svikator Посмотреть сообщение
Выдаёт ошибку в цикле k ошибка 82 (@@ciclk)
У тебя по-разному записана метка. В одном случае - @@ciclk, а другом - @@ciklk. Исправь либо в одном, либо в другом месте.
Цитата Сообщение от Svikator Посмотреть сообщение
Возник вопрос как это сделать?Как при перемножении матриц или другим способом?
Возведение матрицы в квадрат - это умножение ее саму на себя, так что это и есть перемножение матриц.
0
Mikl___
Автор FAQ
11329 / 5872 / 524
Регистрация: 11.11.2010
Сообщений: 10,912
28.10.2011, 11:15 #3
UI, написав "Возник вопрос как это сделать?Как при перемножении матриц или другим способом?" Svikator какбэ намекает, что он не ограничивает других в способах написании программы за него
0
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25539 / 17092 / 5419
Регистрация: 22.10.2011
Сообщений: 30,267
Записей в блоге: 7
28.10.2011, 11:17 #4
У него ж приведена реализация умножения матриц. Зачем еще раз писать что-то, если ТС уже все сделал? Ошибся в метке - бывает...
0
Mikl___
Автор FAQ
11329 / 5872 / 524
Регистрация: 11.11.2010
Сообщений: 10,912
28.10.2011, 12:26 #5
UI, ВИКИ выдало алгоритмы быстрого перемножения матриц
Алгоритм Штрассена
Первый алгоритм быстрого умножения матриц был разработан В. Штрассеном. В основе алгоритма лежит рекурсивное разбиение матриц на блоки. На каждом этапе рекурсии выполняется семь умножений вместо восьми. Недостатком данного метода является бо́льшая сложность программирования по сравнению со стандартным алгоритмом, численная неустойчивость и большой объём используемой памяти.
Разработано большое количество алгоритмов на основе метода Штрассена, которые улучшают его численную устойчивость и объём используемой памяти.
Алгоритм Пана
Пан предложил свой метод умножения матриц.
Алгоритм Бини
В 1979 группа итальянских учёных во главе с Бини разработала алгоритм умножения матриц с использованием тензоров.
Алгоритмы Шёнхаге
Шёнхаге представил метод, который он назвал частичным матричным умножением.
Затем Шёнхаге создал метод, названный методом прямых сумм.
Алгоритм Копперсмита — Винограда (1990)
Копперсмит и Виноград опубликовали алгоритм, умножающий матрицы. Этот алгоритм использует идеи, схожие с алгоритмом Штрассена. На сегодняшний день алгоритм Копперсмита-Винограда является наиболее асимптотически быстрым, но он эффективен только на очень больших матрицах и поэтому не применяется.
Алгоритмы с использованием теории групп
Кох и др. рассмотрели в своих работах алгоритмы Штрассена и Копперсмита-Винограда в контексте теории групп. Они показали возможность существования алгоритмов умножения матриц.

Может быть один из этих алгоритмов ТС и имел в виду
0
Svikator
0 / 0 / 0
Регистрация: 05.11.2010
Сообщений: 67
28.10.2011, 12:52  [ТС] #6
Что то не пойму считает только одно значение из всей матрицы
0
Миниатюры
Возведение матрицы в квадрат  
Mikl___
Автор FAQ
11329 / 5872 / 524
Регистрация: 11.11.2010
Сообщений: 10,912
28.10.2011, 14:16 #7
Svikator, Результат можно проверить здесь
Ahttp://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{vmatrix} 4  4 \\  4  4 \end{vmatrix}× Bhttp://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{vmatrix} 4  4 \\  4  4 \end{vmatrix} = Chttp://www.cyberforum.ru/cgi-bin/latex.cgi?\begin{vmatrix} 32   32 \\  32   32 \end{vmatrix}
http://www.cyberforum.ru/cgi-bin/latex.cgi?C_{11} = http://www.cyberforum.ru/cgi-bin/latex.cgi?A_{11}×http://www.cyberforum.ru/cgi-bin/latex.cgi?B_{11}+http://www.cyberforum.ru/cgi-bin/latex.cgi?A_{12}×http://www.cyberforum.ru/cgi-bin/latex.cgi?B_{21} = (4)×(4)+(4)×(4) = 32
http://www.cyberforum.ru/cgi-bin/latex.cgi?C_{12} = http://www.cyberforum.ru/cgi-bin/latex.cgi?A_{11}×http://www.cyberforum.ru/cgi-bin/latex.cgi?B_{12}+http://www.cyberforum.ru/cgi-bin/latex.cgi?A_{12}×http://www.cyberforum.ru/cgi-bin/latex.cgi?B_{22} = (4)×(4)+(4)×(4) = 32
http://www.cyberforum.ru/cgi-bin/latex.cgi?C_{21} = http://www.cyberforum.ru/cgi-bin/latex.cgi?A_{21}*http://www.cyberforum.ru/cgi-bin/latex.cgi?B_{11}+http://www.cyberforum.ru/cgi-bin/latex.cgi?A_{22}×http://www.cyberforum.ru/cgi-bin/latex.cgi?B_{21} = (4)×(4)+(4)×(4) = 32
http://www.cyberforum.ru/cgi-bin/latex.cgi?C_{22} = http://www.cyberforum.ru/cgi-bin/latex.cgi?A_{21}*http://www.cyberforum.ru/cgi-bin/latex.cgi?B_{12}+http://www.cyberforum.ru/cgi-bin/latex.cgi?A_{22}×http://www.cyberforum.ru/cgi-bin/latex.cgi?B_{22} = (4)×(4)+(4)×(4) = 32
наверное алгоритм неправильный -- видимо ТС ошибся не только в метке
0
Svikator
0 / 0 / 0
Регистрация: 05.11.2010
Сообщений: 67
28.10.2011, 14:16  [ТС] #8
как перемножать матрицы в математике я знаю...вот где ошибка в программе?
0
Mikl___
Автор FAQ
11329 / 5872 / 524
Регистрация: 11.11.2010
Сообщений: 10,912
28.10.2011, 14:30 #9
Svikator, твоя программа -- ты и ищи

если алгоритм перемножения описан правильно и если судить по тому, что у тебя получилось на картинке
C11 = (A11)*(B11)+(A12)*(B21) = (0)*(0)+(0)*(0) = 0
C12 = (A11)*(B12)+(A12)*(B22) = (0)*(0)+(0)*(4) = 0
C21 = (A21)*(B11)+(A22)*(B21) = (0)*(0)+(4)*(0) = 0
C22 = (A21)*(B12)+(A22)*(B22) = (0)*(0)+(4)*(4) = 16
то значение получил только элемент (B22) = 4 а остальные элементы нулевые
1
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
25539 / 17092 / 5419
Регистрация: 22.10.2011
Сообщений: 30,267
Записей в блоге: 7
28.10.2011, 15:47 #10
Цитата Сообщение от Mikl___ Посмотреть сообщение
наверное алгоритм неправильный -- видимо ТС ошибся не только в метке
С ассемблерной частью все нормально. Ошибка - в паскалевской, не хватает операторных скобок:

Pascal
1
2
3
4
5
6
7
   writeln('Vvedite elementi matrici B:');
   for i:=1 to m do
      for j:=1 to p do
      begin { <--- }
         write('matrB[',i,',',j,']=');
         readln(matrB[i,j]);
      end; { <--- }
Svikator, неужели даже то, что ты вводишь только одно значение вместо нескольких, не навело тебя на мысль, что что-то со вводом не то?
1
Svikator
0 / 0 / 0
Регистрация: 05.11.2010
Сообщений: 67
28.10.2011, 16:45  [ТС] #11
Всем спасибо всё получилось...Пришлось ещё кое что исправить но в целом получилось.
0
28.10.2011, 16:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.10.2011, 16:45
Привет! Вот еще темы с ответами:

Возведение вещественного числа в вещественную степень - Assembler
Добрый день, такая проблема: Chuto: .686 .model flat, stdcall .mmx .xmm include macroses.inc .data include vars.inc B...

FPU возведение в степень. Если возводить 10^2=50.0 то не верно! - Assembler
Взял код: fld y ;Загружаем основание и степени fld x fyl2x ;Стек FPU теперь содержит: ST(0)=z ;Теперь считаем 2**z: ...

Возведение матрицы в квадрат - Delphi
Есть 2 компонента StringGrid . В один вводим данные в матрицу размером 4х4 . В другом отображается матрица умноженная сама на себя , по...

Возведение квадратной матрицы в квадрат - C#
Может есть у кого написанный метод на С#, который возводит матрицу в квадрат? В инете найти не могу и сама что-то не понимаю как...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru