2017-02-04 101 views
0

У меня есть два агента, дистрибьюторы и поставщики. Каждый из этих черепах имеет ряд переменных, некоторые из которых определены глобальными, чтобы их можно было назначать агентам другого типа. Вопрос в том, что я пытаюсь решить систему уравнений для дистрибьюторов, использующих некоторые из ее переменных, следующим образом: (Sales and Coefficients - это некоторые переменные дистрибутивов, которые меняются при каждом запуске) DCoeffiecients = matrix A, sales = matrix C и Я ищу Unknowns = матрицы B (Все переменные, которые я звоню внутри процедуры определены глобальные)расширение матрицы в netlogo для системы уравнений

sales = DCoefficients * Unknowns 

Я использовал «Matrix Extension», чтобы решить эту проблему, но я бегу в эту ошибку "ожидали буквальное значение ", так как у меня есть переменные, а не некоторые постоянные числа!

to Solve-quantity 
ask distributers[ 
let A matrix:from-row-list [[Prod1coeff1 Prod1coeff2 Prod1coeff3 prod1coeff4] [[Prod2coeff1 Prod2coeff2 Prod2coeff3 prod2coeff4][Prod3coeff1 Prod3coeff2 Prod3coeff3 prod3coeff4][Prod4coeff1 Prod4coeff2 Prod4coeff3 prod4coeff4] ] 
let C matrix:from-row-list [[S1] [S2] [S3] [S4]] 
print matrix:solve A C 
]end 

Как исправить эту ошибку и присвоить переменные матрице? Спасибо

+0

Не используйте стенографию скобки для 'list'. – Alan

+0

Извините, не могли бы вы объяснить больше? Я не получил его – Naha

+0

Если 'x' и' y' являются переменными, вы должны написать '(list x y)'. Сокращение скобки '[x y]' не будет работать; он работает только с литералами (номерами и строками). – Alan

ответ

0

Вот краткий пример того, что вам нужно сделать, используя примитив list. Обратите внимание, что я сделал это в одной строке, а затем разбился.

extensions [matrix] 

to go 
    let Prod1coeff1 1 
    let Prod1coeff2 2 
    let prod2coeff1 3 
    let prod2coeff2 4 

    let A matrix:from-row-list (list (list Prod1coeff1 Prod1coeff2) (list Prod2coeff1 Prod2coeff2)) 
    show A 

    let row1 (list Prod1coeff1 Prod1coeff2) 
    let row2 (list Prod2coeff1 Prod2coeff2) 
    let list-of-rows (list row1 row2) 
    let B matrix:from-row-list list-of-rows 
    show B 

end 

Примечания тоже, что я положил скобки вокруг list примитивных, как вы будете нуждаться в них, если список содержит более двух элементов.

HTH, Charles

+0

Спасибо Единственная проблема заключается в том, что, когда я хочу, чтобы назначить переменные, как то, что следует, что до сих пор не работает: \t к Proced1 пусть Prod1coeff1 variablex пусть Prod1coeff2 пусть переменной у prod2coeff1переменной уХотя переменные x, y, z являются глобальными или были определены до этой строки! – Naha

+0

Извините, другой вопрос. Вы имеете в виду, что части, которые вы разбили, эквивалентны, и одного из них хватит? Например, просто: let A matrix: from-row-list (list (list Prod1coeff1 Prod1coeff2) (список Prod2coeff1 Prod2coeff2)) показать A – Naha

+0

Большое спасибо. Оба ваших ответа помогли мне исправить ошибку. – Naha