2013-12-01 11 views
0

Решая сложную формулу f(u,v)==0, гдеошибки Набор :: записи при использовании для цикла

Поручаю некоторую постоянную величину, чтобы ¯u и затем решить v.

Я может решить его без для цикла, но возникают ошибки при добавлении For[] ограждающих коды,

, где говоря

Set::write: Tag Times in "Solve[] with exact coefficients solns is Protected. 

простой пример, чтобы проиллюстрировать мою мысль:

For[ i = 1, i < 5, i++, 

     f = x^2 + y^2 - 10; 
     x = i; 
     eqn = (f == 0); 
     soln = Solve[eqn, y] 

    ] 

получит ошибку:

Set::write: "Tag Times in (-9+y^2) is Protected." 

Только когда я добавляю для [] снаружи кода

(внутренний код 4 строки отлично работает без цикл)

Таким образом, кажется, что существует переменная вопрос о назначении разрешения в цикле for

Как его избежать?

+1

Вам не хватает ',' после 'i ​​++'. –

+0

спасибо за исправление. –

ответ

0

У меня больше не установлен Mathematica 7, и ваш код работает (хотя и без печатного выхода ...) на Mathematica 10. На основе сообщения об ошибке кажется, что вам нужно Clear[f] перед тем, как его переназначить.

For[i = 1, i < 5, i++, 
Clear[f]; 
f = x^2 + y^2 - 10; 
x = i; 
eqn = (f == 0); 
soln = Solve[eqn, y]; 
Print[soln] 
] 

Однако, вы по-прежнему действительно смешиваете вещи. Рассмотрим, что происходит с вашим кодом, когда цикл выполняется. Сначала она начинается с I = 1 и говорит:

  • Clear[f] - или нет, это не единственная проблема
  • f = x^2 + y^2 - 10 - Это дает мне выражение с символами x и y
  • x=i - Это устанавливает x=1 так i=1 уже

на данный момент, выражение для f стало у^2 - 9`. В следующий раз он приходит, он будет повторять:

  • f = x^2 + y^2 - 10 - Но x больше не является символом !! Так что теперь он все еще лечит x=1 ...

Это становится кошмаром. Я мог бы попытаться взломать ваш код на работу с минимальными изменениями (например, сделать его Clear[f,x] или что-то в этом роде), но это не лучший совет.

Более общая конструкция будет что-то вроде:

Eqn[x_,y_]=(x^2+y^2-10==0); 
For[i=1,i<5,i++, 
Print[Solve[Eqn[i,y],y]]; 
]; 

Вашей функции f является функцией, так что вы должны сделать это функцией, как f[x_,y_]=something. Еще лучше, просто превратите все уравнение в функцию, как указано выше. Таким образом, вы никогда не изменяете значения x или y и не попадаете в проблемы в вашем цикле.

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

Смежные вопросы