subsasgn

Преобразованное в нижний индекс присвоение

Синтаксис

a(I) = b
a(I,J) = b
a(I,:) = b
a(:,I) = b
a(I,J,K,...) = b
a = subsasgn(a,S,b)

Описание

a(I) = b присваивает значения b в элементы a, заданного нижним векторным I. b должен иметь то же число элементов как I или быть скалярным значением.

a(I,J) = b присваивает значения b в элементы прямоугольной субматрицы a, заданного нижними векторами I и J. b должен иметь строки LENGTH(I) и столбцы LENGTH(J).

Двоеточие используется в качестве индекса, в качестве в a(I,:) = b или a(:,I) = b указывает на целый столбец или строку.

Для многомерных массивов, a(I,J,K,...) = b присвоения b к указанным элементам a. b должен быть length(I)-by-length(J)-by-length(K)-... или быть подвижным к тому размеру путем добавления или удаления одноэлементных размерностей.

a = subsasgn(a,S,b) называется для синтаксиса a(i)=b, a{i}=b или a.i=b, когда a является объектом. S является массивом структур со следующими полями:

  • введите — Одно из следующего: '()', '{}' или '.', задающий нижний тип

  • нижние индексы — Массив ячеек или вектор символов, содержащий фактические индексы

Например, синтаксис, a(1:2,:) = b вызывает a=subsasgn(a,S,b), где S является структурой 1 на 1 с S.type='()' и S.subs = {1:2,':'}. Двоеточие, используемое в качестве индекса, передается как ':'.

Можно использовать присвоение фиксированной точки, например, a(:) = b, чтобы бросить значение с одним объектом numerictype в другой объект numerictype. Этот преобразованный в нижний индекс оператор присваивания присваивает значение b в a при хранении объекта numerictype a. Преобразованное в нижний индекс присвоение работает одинаково для целочисленных типов данных.

Примеры

свернуть все

Поскольку fi возражает a и b, существует различие между

a = b

и

a(:) = b

В первом случае a = b заменяет a на b, в то время как a принимает значение, объект numerictype и объект fimath, сопоставленный с b. Во втором случае a(:) = b присваивает значение b в a при хранении объекта numerictype a. Можно использовать это, чтобы бросить значение с одним объектом numerictype в другой объект numerictype.

Например, бросьте 16-битный номер в 8-битный номер.

a = fi(0, 1, 8, 7)
a = 
     0

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 8
        FractionLength: 7
b = fi(pi/4, 1, 16, 15)
b = 
    0.7854

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 16
        FractionLength: 15
a(:) = b
a = 
    0.7891

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 8
        FractionLength: 7

Этот пример задает переменную acc, чтобы эмулировать 40-битный аккумулятор DSP. Продукты и суммы в этом примере присвоены в аккумулятор с помощью синтаксиса, значения Присвоения acc(1)=... в аккумулятор похожи на хранение значения в регистре. Чтобы начаться, включите режим журналирования и задайте переменные. В этом примере n является числом точек во входных данных x и выходные данные y, и t представляет время. Остающиеся переменные все заданы, когда fi возражает. Входные данные x являются высокочастотной синусоидой, добавленной к низкочастотной синусоиде.

fipref('LoggingMode', 'on');
n = 100;
t = (0:n-1)/n;
x = fi(sin(2*pi*t) + 0.2*cos(2*pi*50*t));
b = fi([.5 .5]);
y = fi(zeros(size(x)), numerictype(x));
acc = fi(0.0, true, 40, 30);

Следующий цикл берет рабочее среднее значение входа x с помощью коэффициентов в b. Заметьте, что acc присвоен в acc(1)=... по сравнению с использованием acc=..., который перезаписал бы и изменил бы тип данных acc.

for k = 2:n
    acc(1) = b(1)*x(k);
    acc(1) = acc + b(2)*x(k-1);
    y(k) = acc;
end

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

plot(t,x,'x-',t,y,'o-')
legend('input data x','output data y')

Логарифмический отчет показывает минимальные и максимальные регистрируемые значения и области значений используемых переменных. Поскольку acc присвоен в, а не перезаписан, эти журналы отражают накопленные минимальные и максимальные значения.

logreport(x, y, b, acc)
                     minlog         maxlog     lowerbound     upperbound     noverflows    nunderflows
           x      -1.200012       1.197998             -2       1.999939              0              0
           y     -0.9990234      0.9990234             -2       1.999939              0              0
           b            0.5            0.5             -1      0.9999695              0              0
         acc     -0.9990234      0.9989929           -512            512              0              0

Отобразите acc, чтобы проверить, что его тип данных не изменился.

acc
acc = 
   -0.0941

          DataTypeMode: Fixed-point: binary point scaling
            Signedness: Signed
            WordLength: 40
        FractionLength: 30

Сбросьте объект fipref восстановить его значения по умолчанию.

reset(fipref)

Расширенные возможности

Генерация кода C/C++
Генерация кода C и C++ с помощью MATLAB® Coder™.

Смотрите также

Представлено до R2006a