0

我编写了一个程序,它定义了两个分段函数“ 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...]

4

2 回答 2

0

回复:“它不工作”发布实际的错误消息通常是一个好主意,在这种情况下,“零件规格 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 *)
于 2013-06-13T14:22:26.390 回答
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]

于 2014-07-04T11:15:20.623 回答