0

我寫了一個程序,它定義了兩個分段函數「gradino[x_]」和「gradino1[x_]」,其中x是m個分量的向量。Mathematica:集成符號向量函數

我不能使用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

回覆:「它不工作」發佈實際的錯誤信息通常是一個好主意,在這種情況下 「零件規格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作爲一個列表,然後它的工作原理:

NIntegrate[ f[x] , {x[[1]], 0, 1}, {x[[2]], 0, 1}] 

(*error Tag Part in x[[1]] is Protected *) 

你需要使用明確的元素:

x = Array[z, 2]; 
Integrate[ f[x] , {x[[1]], 0, 1}, {x[[2]], 0, 1}] 

(*1/4*) 

注意你不能nintegrate做到這一點:

NIntegrate[ f[x] , {z[1], 0, 1}, {z[2], 0, 1}] 
(* 0.25 *) 
0

根據mo德爾以上,以

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}] 

唯一不同的是改變噸內融入Exp[t]