解决复杂的公式f(u,v)==0
,其中
我为 u 分配一些常量值,然后解决 v 。
我可以解决没有 for循环,但是通过添加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循环的情况下正常工作)
所以似乎for循环中存在变量赋值权限问题
我该如何避免呢?
答案 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
的表达式变为y ^ 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
的值,也不会在循环中遇到问题。
在你使用我给你的新代码之前,清除所有内容或者只是退出内核。