现在我有一些代码,其中一些函数func
在其定义中给定特定参数时以我想要的方式执行(因此我将其定义为func[x1_,x2_]:=...
,然后稍后我将其定义为func[x1_,x2_,x3_]:=...
而不改变任何其他内容,它按照我想要的方式工作)。是否有一种自动替换我指定的任何参数来代替这个函数的方法?
更新:
我还没有分离出问题代码,但是这里的代码不是我想要的:
(* Clear all stuff each time before running, just to be safe! *)
\
Clear["Global`*"]
data = {{238.2, 0.049}, {246.8, 0.055}, {255.8, 0.059}, {267.5,
0.063}, {280.5, 0.063}, {294.3, 0.066}, {307.7, 0.069}, {318.2,
0.069}};
errors = {{x1, 0.004}, {x2, 0.005}};
getX[x1_, x2_] := 1/x2^2
getY[x__] =
Evaluate[Simplify[
Sqrt[Sum[(D[getX[x], errors[[i]][[1]]] errors[[i]][[2]])^2, {i,
Length[errors]}]]]]
map[action_, list_] := action @@@ list
y = map[getY, data];
y
getY[2, 3]
这段代码的作用是:(将y的值设为{67.9989, 48.0841, 38.9524, 31.994, 31.994, 27.8265, 24.3525, 24.3525}
)
(* Clear all stuff each time before running, just to be safe! *) \ Clear["Global`*"]
data = {{238.2, 0.049}, {246.8,
0.055}, {255.8, 0.059}, {267.5,
0.063}, {280.5, 0.063}, {294.3, 0.066}, {307.7, 0.069}, {318.2,
0.069}}; errors = {{x2, 0.004}, {x1, 0.005}};
getX[x1_, x2_] := 1/x2^2
getY[x1_, x2_] := Evaluate[Simplify[ Sqrt[Sum[(D[getX[x1, x2], errors[[i]][[1]]]
errors[[i]][[2]])^2, {i, Length[errors]}]]]]
map[action_, list_] := action @@@ list
y = map[getY, data]; y
getY[2, 3]
更新2:
我的计算方法是:
我打算对getX
函数的所有偏导数的平方和进行开方,从而得到getY
函数的主体。然后我想要针对不同的x1
和x2
值来评估该表达式。因此,我有了getY
的参数。
getY
函数中。由于getX
函数只“理解”两个变量,所以在getY
函数中的表达式getX[x]
将会出现问题。因此,您需要定义您希望从将getY
应用于超过 2 个变量中获得什么结果,然后您可以确定getX
函数必须扮演什么角色。例如,给定列表{a,b,c}
,求和中的每一项是否依赖于列表中的连续项,即您应该对{{a,b},{b,c}}
进行求和? - rcollyergetY[a,b,c]
会得到getX[a,b,c]
,但由于它没有被定义,所以不会被计算,这就是你的代码不能正确计算的关键。我可以说更多,但Sasha已经说过了。 - rcollyer