【发布时间】:2011-04-21 16:22:24
【问题描述】:
现在我有代码,其中一些函数 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}}求和? -
@rcollyer 每个术语都独立于后续术语。我不确定您所说的“将 getY 应用于 2 个以上的变量”是什么意思?
-
我认为如果你发布你的数学会更容易提供帮助。
-
我看到它与您的数据无关,但我的意思是
getY[a,b,c]会导致getX[a,b,c]没有被评估,因为它没有定义,这是关键为什么您的代码没有正确评估。我想说的更多,但Sasha 打败了我。