Wolfram mathematica &引用;(…)中的标签部件受保护;

Wolfram mathematica &引用;(…)中的标签部件受保护;,wolfram-mathematica,Wolfram Mathematica,我目前正在编写一个模块,该模块将获取一些二维函数的数据点(一个3xN矩阵),并根据这些点绘制近似等高线图(拟合函数和变量由用户提供)。 “标题”如下所示: project4[dataPoints_, functionList_, fittingVarsList_, plotArgs___] := Module[{fitFunc, functionContourPlot, dataPointsXY, pointsPlot, xList, yList}, 用法示例: project4[

我目前正在编写一个模块,该模块将获取一些二维函数的数据点(一个3xN矩阵),并根据这些点绘制近似等高线图(拟合函数和变量由用户提供)。 “标题”如下所示:

project4[dataPoints_, functionList_, fittingVarsList_, plotArgs___] := 
 Module[{fitFunc, functionContourPlot, dataPointsXY, pointsPlot, 
   xList, yList},
用法示例:

project4[data, {1, x, y, x y, x^2, y^2}, {x, y}]
(其中数据={x1,y1,f1}…)

检查参数是否有效后,我执行以下操作:

fitFunc = Fit[dataPoints, functionList, fittingVarsList];
以获得近似值。 然后我想通过这样做来获得它的曲线图:

functionContourPlot = ContourPlot[fitFunc, {fittingVarsList[[1]], xMin, xMax},{fittingVarsList[[2]],yMin, yMax};
这会导致错误:

ContourPlot::write:{x,y}[[1]]中的标记部分受保护。显示::gcomb: “无法在中组合图形对象。” 显示[ContourPlot[fitFunc$2187,{x,y}[[1]],xMin,xMax},{x,y}[[2]],yMin,yMax}],”


我做错了什么?

问题是
轮廓图
具有属性
HoldAll
,这会阻止
零件
评估

Attributes@ContourPlot

你可以这样修理它

data = {{6, 4, 7.92}, {6, 5, 9.31}, {6, 6, 9.74},
   {7, 4, 11.24}, {7, 5, 12.09}, {7, 6, 12.62},
   {8, 4, 14.31}, {8, 5, 14.58}, {8, 6, 16.16}};

fittingVarsList = {x, y};
{xMin, xMax} = Through[{Min, Max}@data[[All, 1]]];
{yMin, yMax} = Through[{Min, Max}@data[[All, 2]]];

fitFunc = Fit[data, {1, x, y}, {x, y}]

这再现了问题:-

functionContourPlot = ContourPlot[fitFunc,
   {fittingVarsList[[1]], xMin, xMax},
   {fittingVarsList[[2]], yMin, yMax}];

使用
创建局部变量可以解决此问题:-

functionContourPlot = 
 With[{a = fittingVarsList[[1]], b = fittingVarsList[[2]]},
  ContourPlot[fitFunc, {a, xMin, xMax}, {b, yMin, yMax}]]

如果从
ContourPlot
的属性中删除
HoldAll
,则第一个版本可以工作

Unprotect@ContourPlot;
ClearAttributes[ContourPlot, HoldAll]

…但那将是鲁莽的编程。

你文章的标题应该是一个问题。