Юлия - функция создания SymPy - PullRequest
1 голос
/ 24 апреля 2020

Я пытаюсь создать функцию в операторе for. Но это не сработало.

Пример:

using SymPy
list=[1,1,-1]
a(x)=2^x
b(x)=3^x
c(x)=4^x
x = symbols("x")

for i=1:length(list) 
   if list[i]==1
      a(x)=a(x)*b(x)
   elseif list[i]==-1         
      a(x)=a(x)*c(x)
   end
end

То есть я бы хотел уступить,

a(x)=2^x*3^x*3^x*4^x

Однако, он только вернул оригинальная функция.

a(x)=2^x

Я не уверен, работает ли он или нет. Спасибо:)

1 Ответ

1 голос
/ 24 апреля 2020

Это похоже на проблему с областью видимости, проверьте документы здесь: https://docs.julialang.org/en/v1/manual/variables-and-scoping/

for l oop представляет свою собственную область, поэтому глобальный a(x), который вы заявляете, что вне l oop не влияет то, что происходит в вашем l oop.

Вы можете либо обернуть все, что вы делаете в функции:

function main()
    list = [1, 1, -1]
    ...
    return a(x)
end

или аннотировать a(x) в вашем l oop как global. Обычно глобальные переменные плохо влияют на производительность и их лучше избегать в Julia, поэтому вам следует подумать о том, как вы можете структурировать свой код в функции.

(FWIW Я получаю StackOverflowError для обоих решений, которые я упомянул здесь, но это, вероятно, проблема с тем, как вы используете SymPy, о которой я, к сожалению, ничего не знаю!)

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