Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Индексация массива в MATLAB
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Вопросы системного уровня проектирования
igorenja
Доброе время суток!
Скажите возможно ли в MATLABе изменить индекс начала вектора с 1 на 0, т.е. чтобы начальный элемент был доступен вот так: v(0).

Нимагу от единицы нумеровать после С... crying.gif
mdmitry
Цитата(igorenja @ Mar 10 2010, 11:41) *
Нимагу от единицы нумеровать после С... crying.gif

А обратный переход каков? laughing.gif
Можете индексы в программе сами корректировать, но это не MATLAB-way. В MATLAB хороший стиль не делать явных циклов, по-возможности. Попробуйте написать цикл в стиле С и его правильно реализовать средствами MATLAB, оцените разницу в скоростях выполнения.
jorikdima
Цитата(igorenja @ Mar 10 2010, 11:41) *
Скажите возможно ли в MATLABе изменить индекс начала вектора с 1 на 0, т.е. чтобы начальный элемент был доступен вот так: v(0).

нет
igorenja
Цитата(mdmitry @ Mar 10 2010, 17:14) *
А обратный переход каков? laughing.gif
Можете индексы в программе сами корректировать, но это не MATLAB-way. В MATLAB хороший стиль не делать явных циклов, по-возможности. Попробуйте написать цикл в стиле С и его правильно реализовать средствами MATLAB, оцените разницу в скоростях выполнения.


Мне как таковой MATLAB нужен лишь для того чтобы реализовать алгоритм, который будет работать в железке, ну и соответственно написан он будет на Сях.... Так что MATLAB-way мне не нужен.
igorenja
За что же многие люди брыжжа слюной не понимают как же они без него жили, без ентого чуда под названием MATLAB, еси он вот такую вот фигню сделать НЕ МОЖЕТ:
CODE
>> A=int16(ones(8,8))
A =
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
>> B=int16(ones(8,8))
B =
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
>> A*B
??? Error using ==> mtimes
Integer data types are not fully supported for this operation.
At least one operand must be a scalar.


Это же маразм.....
Andron_
это вы не умеете им пользоваться нормально.

зачем в этом примере тип int16?
igorenja
Цитата(Andron_ @ Mar 11 2010, 15:49) *
это вы не умеете им пользоваться нормально.

нормально это всё считать в double?


Цитата(Andron_ @ Mar 11 2010, 15:49) *
зачем в этом примере тип int16?


В этом примере не зачем... А в том алгоритме, который я пытаюсь реализовать очень даже зачем.
Этот пример показывает что MATLAB матрицы типа int16 множить не умеет.
Andron_
Цитата(igorenja @ Mar 11 2010, 15:55) *
нормально это всё считать в double?

а что такого? жалко 2КБ памяти при 4ГБ имеющихся?



Цитата(igorenja @ Mar 11 2010, 15:55) *
В этом примере не зачем... А в том алгоритме, который я пытаюсь реализовать очень даже зачем.
Этот пример показывает что MATLAB матрицы типа int16 множить не умеет.

напишите свою функцию - начнет уметь. правда зачем это нужно - пока вопрос.
igorenja
Цитата(Andron_ @ Mar 11 2010, 16:03) *
а что такого? жалко 2КБ памяти при 4ГБ имеющихся?

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

Цитата(Andron_ @ Mar 11 2010, 16:03) *
а что такого? жалко 2КБ памяти при напишите свою функцию - начнет уметь. правда зачем это нужно - пока вопрос.

написать то не проблема. Вопрос в том: нафик тогда MATLAB в принципе?
Andron_
Цитата(igorenja @ Mar 11 2010, 16:25) *
да ясное дело что в компе без разницы как считать, а если в микроконтроллере... и считать нужно много...

ну так считайте в контроллере int16. Матлаб при чем? Зачем при моделировании вам нужен именно этот тип данных в расчете?

Вы вопрос конкретный задайте, что хотите получить из каких исходных данных.
igorenja
Цитата(Andron_ @ Mar 11 2010, 16:32) *
Зачем при моделировании вам нужен именно этот тип данных в расчете?

Хочется моделировать реальную ситуацию (а именно целочисленную математику, с возможными переполнениями и т.д.) а не идеальную... Да и вопроса то уже собственно нет... на негоответили в 3 ем посте... это так разговор не о чём.
mdmitry
Цитата(igorenja @ Mar 11 2010, 11:58) *
??? Error using ==> mtimes
Integer data types are not fully supported for this operation.
At least one operand must be a scalar.

Это же маразм.....


В MATLAB различаются операции над матрицами и над скалярами!
* - скалярное умножение, один операнд должен быть скаляром
.* - умножение матрицы на матрицу.

Вам путь на exponenta
Andron_
>>* - скалярное умножение, один операнд должен быть скаляром
из-за ограниченной поддержки типа int16... в общем случае - может быть либо умножение матрицы на матрицу по соответствующим правилам, либо на скаляр...

>>.* - умножение матрицы на матрицу.
поэлементно...
thermit
Цитата
igorenja:
За что же многие люди брыжжа слюной не понимают как же они без него жили, без ентого чуда под названием MATLAB, еси он вот такую вот фигню сделать НЕ МОЖЕТ:
CODE
>> A=int16(ones(8,8))
A =
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
>> B=int16(ones(8,8))
B =
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1
>> A*B
??? Error using ==> mtimes
Integer data types are not fully supported for this operation.
At least one operand must be a scalar.


Это же маразм.....



Маразм - судить о предмете не зная его...
Матлаб ориетирован на вычисления в даблах. Для всех остальных вычислений нужен специальный тулбокс. FixedPoint toolbox. Чтоб его задействовать достаточно объявить данные специальным образом.

Код
A=fi(ones(8,8),1,16,0);% 1- знаковые 16  - разрядность данных  0 скока бит под дробную часть
B=fi(ones(8,8),1,16,0);
A*B
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.