Mathematica代码报错:Tag List受保护,求原因及修复方案
解决Mathematica中"Tag List is protected"错误及生成曲线图像方案
错误原因分析
- 核心触发点:
D是Mathematica的内置系统符号(用于求导操作),属于受保护的系统标识符,不能直接用作自定义变量名,这是引发"Tag List is protected"错误的根本原因。 - 次要问题:
DSolve返回的结果是列表包裹的解结构,直接使用S[t] /. Sol1会得到嵌套列表,后续Table处理时会导致绘图对象结构混乱,无法被Plot正确识别。
修复后的完整代码
-- 替换内置符号D为自定义变量名d0,避免系统冲突 Sol1 = DSolve[{S'[t] == d0 - Er - Es*S[t], S[0] == 1}, S[t], t] -- 提取单解表达式并批量替换参数,避免嵌套列表问题 plots = Table[ Evaluate[First[S[t] /. Sol1] /. {d0 -> d, Er -> er, Es -> es}], {{d, er, es}, {{10, 5, 5}, {10, 4, 3}, {6, 4, 4}}} ] Plot[plots, {t, 0, 10}, PlotLegends -> {"d0 = 10, Er = 5, Es = 5", "d0 = 10, Er = 4, Es = 3", "d0 = 6, Er = 4, Es = 4"} ]
修改说明
- 变量名替换:将原代码中的
D改为d0,彻底避免与内置求导符号冲突。 - 解结构处理:用
First[S[t] /. Sol1]提取DSolve返回的单解表达式(默认返回列表格式的解),确保后续生成的绘图表达式是扁平结构。 - 图例同步更新:调整图例中的变量名称,与代码中的自定义变量保持一致。
内容的提问来源于stack exchange,提问作者Abitatha Roy
相关产品推荐
相关产品推荐

