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 заданный нижним векторным IB должен иметь то же число элементов как I или быть скалярным значением.

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

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

Для многомерных массивов, a(I,J,K,...) = b присвоения b к указанным элементам aB должен быть length(I)- length(J)- 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™.

Генерация кода графического процессора
Сгенерируйте код CUDA® для NVIDIA® графические процессоры с помощью GPU Coder™.

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

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