关于替换:将常数替换为公式matlab

substitute constant to a formula matlab

我在 MATLAB 中定义:

1
2
syms k2 k3;
k1 = k2/k3;

其中 k2k3 是符号变量。然后输入 k1 给出输出:

1
2
3
k1 =

k2/k3

k2k3赋值:

1
k2 = 1; k3 = 2;

然后我在matlab命令行中输入:

1
2
3
4
5
>> k1

k1 =

k2/k3

是否有任何命令显示结果 k1 = 1/2 = 0.5 而不使用 subs 函数?在我的公式有很多变量的情况下,使用 subs.

很不方便

  • subs(k1) 有什么问题?如果已经设置了附加变量,则不需要将它们作为参数提供。
  • 我很好奇为什么你接受了我的回答,然后几天后又不接受,当时没有其他选择而且它有效?
  • 抱歉,是我的错!


你想使用 eval(k1)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
syms k2 k3;
k1 = k2/k3;

eval(k1) % output k1 = k2/k3

k2 = 1;

eval(k1) % output k1 = 1/k3

k3 = 2;

eval(k1) % output ans = 0.5

k1       % output k1 = k2/k3

编辑:
在评论中已经指出 subs 以相同的方式工作(并且可能更可取)。来自 subs 文档:

subs(s) returns a copy of s replacing symbolic variables in s with their values obtained from the calling function and the MATLAB?? workspace

所以你可以像上面使用eval(k1)一样使用subs(k1)。它为前两个示例提供了相同的输出,最后一个示例利用了结果的精确小数形式,如图所示。

1
subs(k1) % ouput ans = 1/2

  • 那是 eval 的错误版本的文档,它应该是 sym/eval 的。但是,Matlab 似乎不再维护 sym/eval 的文档(除了最小的帮助文件)。这很可能是因为应该使用 subs,即只使用 subs(k1)
  • 感谢您指出@horchler,我已经编辑了我的答案以反映您的意见。
  • 在我有很多常量要替换的情况下,由于替换长数组,subs 可能会不方便。所以我想找到一个解决方案,除了'subs'。
  • 你是什??么意思"替换一个长数组"?