MATLAB: предварительное выделение матрицы дает ошибку - PullRequest
2 голосов
/ 23 февраля 2010

Я пишу простую MATLAB программу для решения проекта Эйлера .

Программа создает матрицу 900 x 900. Перед созданием этой матрицы c программой, я предварительно выделил ее следующим образом:

c = zeros(900,900);

В результате появляется оранжевое сообщение об ошибке: "Значение, присвоенное переменной 'c', может быть не использовано" .

Позже в программе матрица c заполнена числами. Так почему же сообщение об ошибке?

Ответы [ 2 ]

6 голосов
/ 23 февраля 2010

Это сообщение MINTINT WARNING.Не совсем ошибка.Ошибка помешает вашему коду работать.Предупреждения MLINT просто указывают на неэффективность, когда ваш код, возможно, был написан неэффективно.

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

В общем случае, только предварительно выделите массив, в котором вы позже будете назначать только отдельные элементы (или небольшие группы элементов) этого массива, возможно, в цикле.

3 голосов
/ 23 февраля 2010

Когда вы говорите «оранжевое сообщение об ошибке», вы имеете в виду сообщение в редакторе MATLAB? Это результат M-Lint , который пытается отловить типичные «ошибки» кодирования, которые подчиняются синтаксису языка, но могут быть ошибками. Как c заполняется числами? Если у вас есть что-то вроде

c = zeros(900,900);
....stuff happens...
c = myfunction();

, тогда MATLAB перераспределяет c, даже если myfunction возвращает матрицу 900x900. Вы просмотрели код, чтобы убедиться, что c не перезаписывается и не заменяется после первоначального объявления? Я видел, как М-Линт портился, но не часто.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...