exponenta event banner

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)около-length(J)около-length(K)-... или быть изменяемым до этого размера путем добавления или удаления одиночных размеров.

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

  • type - Одно из следующих: '()', '{}', или '.' указание типа подстрочного индекса

  • subs - массив ячеек или символьный вектор, содержащий фактические подстрочные индексы;

Например, синтаксис 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')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent 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 ® с помощью Coder™ графических процессоров

.

См. также

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