我编写了一个程序来定义两个分段函数“gradino[x_]
”和“gradino1[x_]
”,其中x是m个分量的向量。
我无法使用x_i显式编写这些函数,我需要将x保持为向量。
我需要测量这两个函数之间的距离:
Integrate[Abs[gradino[x]-gradino1[x]],{x[[1]],0,100},{x[[2],0,100},{x[[3]],0,100}...{x[[m]],0,100}]
但它不起作用。
知道怎么做吗?记住,我不能简单地表达gradino[x1_,x2_ etc...]
。
答案 0 :(得分:0)
re:“它不工作”发布实际的错误消息通常是一个好主意, 在这种情况下,“零件规格x [[1]]比对象的深度长。”..告诉你究竟是什么问题。如果x尚未定义为列表,则不能将列表元素用作集成变量。
f[y_] := y[[1]] y[[2]];
Integrate[ f[x] , {x[[1]], 0, 1}, {x[[2]], 0, 1}]
(* error Part specification x[[1]] is longer than depth of object. *)
如果您首先将x定义为列表,那么它可以工作:
x = Array[z, 2];
Integrate[ f[x] , {x[[1]], 0, 1}, {x[[2]], 0, 1}]
(*1/4*)
注意你不能用nintegrate做到这一点:
NIntegrate[ f[x] , {x[[1]], 0, 1}, {x[[2]], 0, 1}]
(*error Tag Part in x[[1]] is Protected *)
您需要使用显式元素:
NIntegrate[ f[x] , {z[1], 0, 1}, {z[2], 0, 1}]
(* 0.25 *)
答案 1 :(得分:0)
根据上面的模型,
x = Array[z, 2];
为什么以下是可以的:
f[y_] := NIntegrate[y[[1]] y[[2]] t, {t, 0, 1}];
NIntegrate[f[x], {z[1], 0, 1}, {z[2], 0, 1}]
但以下不是:
f[y_] := NIntegrate[y[[1]] y[[2]] Exp[t], {t, 0, 1}];
NIntegrate[f[x], {z[1], 0, 1}, {z[2], 0, 1}]
唯一的区别是将内部集成中的t改为Exp[t]
。