Mathematica: интегрировать символьную векторную функцию

Я написал программу, определяющую две кусочные функции «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...].


person Enrico Palumbo    schedule 12.06.2013    source источник


Ответы (2)


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 *)
person agentp    schedule 13.06.2013

Согласно приведенной выше модели, с

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

person Juha M    schedule 04.07.2014