Форум программистов, компьютерный форум, киберфорум
Наши страницы
Assembler: математика, вычисления
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.96/25: Рейтинг темы: голосов - 25, средняя оценка - 4.96
Svikator
0 / 0 / 1
Регистрация: 05.11.2010
Сообщений: 67
#1

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

28.10.2011, 10:57. Просмотров 4568. Ответов 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
Ответы с готовыми решениями:

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

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

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

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

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

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

Может быть один из этих алгоритмов ТС и имел в виду
0
Svikator
0 / 0 / 1
Регистрация: 05.11.2010
Сообщений: 67
28.10.2011, 12:52  [ТС] #6
Что то не пойму считает только одно значение из всей матрицы
0
Миниатюры
Возведение матрицы в квадрат  
Mikl___
Автор FAQ
11733 / 6045 / 543
Регистрация: 11.11.2010
Сообщений: 11,027
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 / 1
Регистрация: 05.11.2010
Сообщений: 67
28.10.2011, 14:16  [ТС] #8
как перемножать матрицы в математике я знаю...вот где ошибка в программе?
0
Mikl___
Автор FAQ
11733 / 6045 / 543
Регистрация: 11.11.2010
Сообщений: 11,027
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
25968 / 17412 / 6906
Регистрация: 22.10.2011
Сообщений: 30,659
Записей в блоге: 6
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 / 1
Регистрация: 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

Возведение числа в степень
Здравствуйте! Дана задача возвести число в степень(степень и число известны и...

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

FPU возведение в степень. Если возводить 10^2=50.0 то не верно!
Взял код: fld y ;Загружаем основание и степени fld x fyl2x ;Стек FPU...


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

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

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