Форум Flasher.ru
Ближайшие курсы в Школе RealTime
Список интенсивных курсов: [см.]  
  
Специальные предложения: [см.]  
  
 
Блоги Правила Справка Пользователи Календарь Сообщения за день
 

Вернуться   Форум Flasher.ru > Flash > ActionScript 3.0

Версия для печати  Отправить по электронной почте    « Предыдущая тема | Следующая тема »  
Опции темы Опции просмотра
 
Создать новую тему Ответ
Старый 16.03.2011, 00:21
linnard вне форума Посмотреть профиль Отправить личное сообщение для linnard Найти все сообщения от linnard
  № 1  
Ответить с цитированием
linnard

Регистрация: Oct 2010
Сообщений: 53
По умолчанию Ошибка в алгоритме умножения двух матриц

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

Код AS3:
var table_res:Array =new Array();
var column_res:Array = null;
for(i = 0; i < num_ans; i++)
	column_res = new Array(); 
	table_res.push(column_res);
    for(j = 0; j < num_ans; j++){
 
      for(var k:int = 0; k < num_ans; k++)
        //table_res[i][j] += table[i][k] * table2[k][j];
   column_res.push(table[i][k].text * table2[k][j].text); 
	}

Старый 16.03.2011, 00:26
bav вне форума Посмотреть профиль Отправить личное сообщение для bav Найти все сообщения от bav
  № 2  
Ответить с цитированием
bav
 
Аватар для bav

Регистрация: Oct 2010
Сообщений: 1,049
Отправить сообщение для bav с помощью ICQ
Судя по всему table[i][k] и table[k][j] у вас текстовые поля. Раз так, то воспользуйтесь функцией parseInt (parseFloat) для перевода строк из свойства text в числа.

Старый 16.03.2011, 00:33
linnard вне форума Посмотреть профиль Отправить личное сообщение для linnard Найти все сообщения от linnard
  № 3  
Ответить с цитированием
linnard

Регистрация: Oct 2010
Сообщений: 53
Цитата:
Сообщение от bav Посмотреть сообщение
Судя по всему table[i][k] и table[k][j] у вас текстовые поля. Раз так, то воспользуйтесь функцией parseInt (parseFloat) для перевода строк из свойства text в числа.
Перевел, всеравно не работает

Добавлено через 56 минут
Код исправил, программа запускается. однако результат выдает неправильный.
Если умножить две матрицы 2 Х 2, где все элементы равны 2. результат выходит такой:
4 4
4 4

Хотя должно быть:
8 8
8 8


Подскажите пожалуйста что не так?


Последний раз редактировалось linnard; 16.03.2011 в 01:31.
Старый 16.03.2011, 01:50
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 4  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
Пожалуйста, подсказываем:
Код AS3:
var mA:Array = [ [ 111, 112, 113, 114 ],
                 [ 121, 122, 123, 124 ],
                 [ 131, 132, 133, 134 ] ];
 
var mB:Array = [ [ 211, 212 ],
                 [ 221, 222 ],
                 [ 231, 232 ],
                 [ 241, 242 ] ];
 
var mRes:Array = multiplyMatricies( mA, mB,  3, 4, 2 );
 
 
trace( matrixToString( mRes,  3, 2 ) );
 
 
function multiplyMatricies( matA:Array, matB:Array, rowsA:uint=0, colsArowsB:uint=0, colsB:uint=0 ):Array
{
	/*
	 * Matrix dimensions:
	 *
	 * matA [rowsA x colsArowsB]
	 * matB [colsArowsB x colsB]
	 * matR [rowsA x colsB]
	 */
 
	var matR:Array = [];
	var sum:Number;
	var i, j, k:int;
	for (i=0; i<rowsA; i++)
	{
		matR[i] = [];
		for (j=0; j<colsB; j++)
		{
			sum = 0;
			for (k=0; k<colsArowsB; k++)
			{
				sum += matA[i][k] * matB[k][j];
			}
			matR[i][j] = sum;
		}
	}
 
	return matR;
}
 
function matrixToString( mat:Array, rows:uint=0, cols:uint=0, numLength:uint=10, precision:uint=2 ):String
{
	var s:String = "[" + rows.toString() + "x" + cols.toString() + "]:";
	var sp:String;
	var i, j:int;
	for (i=0; i<rows; i++)
	{
		s += "\n| ";
		sp = "";
		for (j=0; j<cols; j++)
		{
			s += sp + numberToString( mat[i][j], numLength, precision );
			sp = "  ";
		}
		s += " |";
	}
	return s;
}
 
function numberToString( num:Number, outLength:uint=10, precision:uint=2, toRight:Boolean=false ):String
{
	var s:String = num.toFixed( precision );
 
	if( s.length >= outLength )
		return s.substr( 0, outLength );
 
	const SPACES:String = "                    ";
 
	if( toRight )
	{
		s = SPACES + s;
		return s.substr( s.length - outLength - 1, outLength );
	}
	else
	{
		return (s + SPACES).substr( 0, outLength );
	}
}
трейс:
Код:
[3x2]:
| 101750.00   102200.00  |
| 110790.00   111280.00  |
| 119830.00   120360.00  |
Заодно для себя прояснил тему матриц


Последний раз редактировалось i.o.; 16.03.2011 в 01:56.
Старый 16.03.2011, 01:54
linnard вне форума Посмотреть профиль Отправить личное сообщение для linnard Найти все сообщения от linnard
  № 5  
Ответить с цитированием
linnard

Регистрация: Oct 2010
Сообщений: 53
Спасибо большое i.o.!

Старый 16.03.2011, 01:55
i.o. вне форума Посмотреть профиль Отправить личное сообщение для i.o. Найти все сообщения от i.o.
  № 6  
Ответить с цитированием
i.o.
 
Аватар для i.o.

Регистрация: Apr 2010
Адрес: Earth
Сообщений: 1,897
всегда пожалуйста

Создать новую тему Ответ Часовой пояс GMT +4, время: 12:59.
Быстрый переход
  « Предыдущая тема | Следующая тема »  

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.


 


Часовой пояс GMT +4, время: 12:59.


Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.