Прикрепление пользовательских данных (строковый тег) к объекту MATLAB cfit

У меня есть код где cfit объекты передаются туда и обратно между функциями \ классами, и я хотел бы иметь "тег", который содержит некоторую информацию о моем соответствии (то есть его имени), чтобы я мог создать его экземпляр в какой-то момент и получить к нему доступ позже, когда это будет необходимо.

В идеале это должно быть прямо внутри объекта, так что когда бы мне ни понадобился доступ к информации, она доступна без необходимости перетаскивать (или в appdata) дополнительные векторы \ клетки.

Попытки и Мысли

Обычно, просто подкласс cfit и добавьте свойство, которое содержит эти данные. Тем не менее, декларация cfit (см. ниже) говорит нам, что это Sealed и, следовательно, не может быть разделено на подклассы.

classdef (Sealed = true) cfit < fittype

В качестве альтернативы, мы можем попытаться "захватить" некое свойство, которое не используется текущими объектами, и использовать его для хранения требуемых данных ( не то, чтобы это была техническая проблема, но это эквивалентно игнорированию предупреждений разработчиков о том, что эти свойства не должны). не трогай).

Кроме того, из вышесказанного classdef мы также узнаем, что это подкласс fittype которые могут иметь некоторые свойства \ методы, которые мы могли бы использовать для этой цели.

Наконец, остается вопрос - как лучше всего сохранить мой дополнительный бит данных, чтобы было удобно устанавливать \ получать (удобно означает, что если я хочу получить к нему доступ внутри цикла, мне не нужно использовать eval()), и не мешает нормальной работе cfit объекты?

2 ответа

Решение

Один способ, который, кажется, работает, - это доступ к .p структура cfit объект и добавление к нему чего угодно:

До:

>> F378

F378 = 

     Shape-preserving (pchip) interpolant:
       F378(x) = piecewise polynomial computed from p
     Coefficients:
       p = coefficient structure

>> F378.p

ans = 

      form: 'pp'
    breaks: [1x40 double]
     coefs: [39x4 double]
    pieces: 39
     order: 4
       dim: 1

После F378.p.tag = '3.78';:

F378.p

ans = 

  form: 'pp'
breaks: [1x40 double]
 coefs: [39x4 double]
pieces: 39
 order: 4
   dim: 1
   tag: '3.78'

Я нашел это из следующей ошибки:

Error using cfit/subsref (line 18)
The name 'probnames' is not a coefficient or a problem parameter. You can only use dot 
notation to access the coefficients and problem parameters of a cfit or sfit, for example 
'f.p'.

For the current object the properties you can access like this are:

p

Рекомендуется осторожность: я не проверял, мешает ли это решение нормальной работе.

Вместо того, чтобы подкласс cfitсоздать новый класс и сохранить cfit объект как свойство вместе с вашим тегом как другое свойство.

Другие вопросы по тегам