Перевод subscripted assignment dimension mismatch

Озадачивает «Subscripted assignment dimension mismatch» только во время цикла с использованием portopt & ewstats

Я рву на себе волосы из-за этого.

У меня есть набор ежедневных доходностей 4 активов, используя 10-дневное окно, которое я перебираю по всему набору данных (от i = 1 до 50), выполняя ряд вычислений и создавая оптимальные портфели. Это включает в себя использование portopt .

Входные сигналы, ExpReturn и ExpCovariance генерируются с использованием ewstats

Теперь, на последней 50-й итерации (и только 50-й-все предыдущие работают нормально), я получаю следующую ошибку:

Обратите внимание, что я не вижу проблемы с RetSeries , поскольку ExpReturn и ExpCovariance , созданные ewstats , имеют размер и соответственно.

Я пробовал все, что мог придумать, чтобы выследить ошибку, включая проверку size() , использование точек останова,предварительное распределение матриц и т. д. и т. д. Как ни странно, если я удалю цикл, установите i = 50 , он работает. Кроме того, если вместо ewstats я просто использую mean() и cov() — они работают на 50-й итерации. Если я заменю один, например, ExpReturn на mean(RetSeries) , он работает. Аналогично, замена ExpCovariance на cov(RetSeries) -работает. Но и ExpReturn , и ExpCovariance вместе всегда терпят неудачу.

Что вызывает ошибку?

Используя dbstop if error , я вижу:

Итак, проблема заключается в PortWts , но я не понимаю, почему сейчас это не правильные размеры, когда это было для 49 других итераций. Кроме того, оскорбительная строка ошибки-это первая точка в цикле PortWts , поэтому ничего не происходит с ней заранее

1 ответ

В большинстве случаев MATLAB, которые я использовал, всякий раз, когда у меня была ошибка в моем коде, сообщение об ошибке в окне командной строки показывало номер строки. Однако на компьютере, который я сейчас использую, он показывает мне только следующее: . Subscripted assignment dimension.

При попытке использовать решатель генетического алгоритма в MATLAB, я получаю следующую ошибку Subscripted assignment dimension mismatch: сообщение об ошибке Pastebin Теперь он говорит, что ошибка связана с функцией фитнеса в конце, но когда я тестирую свою функцию фитнеса отдельно, она работает.

Попробуйте установить dbstop if error и снова запустите код. MATLAB перейдет в режим отладки в точном месте возникновения ошибки.

Вот скринкаст Дуга Халла, показывающий, как

Изменить ошибочную строку в:

затем назначьте каждому по отдельности:

Теперь, когда он терпит неудачу, он покажет вам, какой именно выход не имеет ожидаемого размера. В сочетании с вышеприведенным трюком теперь вы можете проверить переменные в своем рабочем пространстве во время ошибки и выяснить, что не так..

EDIT2

Кроме того, добавьте следующий тест между ними (перед назначением):

Похожие вопросы:

У меня есть разное распределение для разных времен ( t ) с каждым распределением, имеющим 10,000 элементов. У меня есть следующая строка кода, которая вычисляет CDF для различных распределений.

Я новичок в этом форуме. Позвольте мне начать: я работаю на MATLAB и постоянно получаю ошибки. Наконец-то я нашел такой хороший форум, как ваш. Моя проблема заключается в следующем: у меня есть.

Рассмотрим следующий код, который составляет случайный набор данных и соответствует полиномам порядка от 1 до 5 против данных: x=1:100; data=exp(-rand(1).*x); for ii = 1:1:5; polyfit(x,data,ii); end.

В большинстве случаев MATLAB, которые я использовал, всякий раз, когда у меня была ошибка в моем коде, сообщение об ошибке в окне командной строки показывало номер строки. Однако на компьютере.

При попытке использовать решатель генетического алгоритма в MATLAB, я получаю следующую ошибку Subscripted assignment dimension mismatch: сообщение об ошибке Pastebin Теперь он говорит, что ошибка.

Я попытался повернуть это: for r=1:fsize for c=1:fsize mask(r,c) = exp(-(((r-centre)^2+(c-centre)^2)/2*(sigma^2))); end end в mask(1:fsize,1:fsize) =.

В директории у меня есть коллекция из 20 файлов. Я хочу: повторите цикл по этим 20 файлам, извлеките из них x и y данных и поместите эти данные в матрицу 2D, созданную в цикле Обратите внимание, что.

Я новичок в Matlab и программировании в целом. Я пытаюсь написать цикл for, где я могу сохранить сгенерированные векторы неравномерной длины в матрицу. Вот мой основной цикл: G1 = [1 2 3 4]; for G1.

Обращение? array(1:3) = cellArray<1:3>; % this fails: Subscripted assignment dimension mismatch. примечание: Я знаю, как сделать это в цикле. Ищу matlab прямой маршрут. %% Содержание cellArray %%.

Источник

Ошибка несоответствия размера подзаголовки для переменной ‘char’

Я получаю ошибку . Subscripted assignment dimension mismatch. . Subscripted assignment dimension mismatch. когда значение days достигает 13 потому что, вероятно, размер столбца legend_vec для 7-й строки достигает 13.

Как я могу избежать ошибки и хранить все дни, пока я legend_vec в legend_vec ? Благодарю.

dimension char matlab store

2 ответа

1 Решение ely [2012-04-11 23:11:00]

Когда вы пытаетесь сохранить составную строку в массиве, она сохранит ее как список номеров символов Ascii или Unicode. Поэтому, если я попытаюсь вставить строку «Hello world» в качестве первой строки массива, то эта первая строка будет на самом деле:

Обратите внимание, что это неявно делает my_strs в my_strs 1 на 11. Если я попытаюсь добавить строку как вторую строку, но она не оценивает наличие 11 кодов символов длины, это даст ошибку:

Таким образом, вам нужно добавить лишние пробелы для заполнения всех ваших дней, когда они станут строками (так что все ваши строки имеют равномерную длину) или сделать что-то более удобное, например, хранить все строки в массиве ячеек, где они могут иметь разную длину,

Чтобы сделать это с помощью массива ячеек, вы сделали бы что-то вроде этого:

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

Полное раскрытие: я тестирую вышеуказанный код с помощью Octave, потому что лично я предпочитаю бойкотировать Matlab. Вы можете спросить в мета или что-то, если вам интересно, почему это так, но для целей этого вопроса я не думаю, что тестирование в Octave имеет какое-то значение в правильном ответе.

1 Pursuit [2012-04-11 23:22:00]

Используйте массив ячеек строк. Ячейки ячеек (определенные символами <> ) предназначены для обработки массивов разнородных объектов, например, разных типов данных или разных строк длины.

Чтобы использовать массивы ячеек, измените код следующим образом:

Так как это обычное использование, команда legend может принять это как вход.

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

Или, если вы абсолютно должны иметь прямоугольный массив символов, Matlab поддерживает следующее соглашение, чтобы вернуть вас туда, где вы начали:

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

Источник

Оцените статью
( Пока оценок нет )
Поделиться с друзьями
Uchenik.top - научные работы и подготовка
0 0 голоса
Article Rating
Подписаться
Уведомить о
guest
0 Комментарий
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии