2013-08-01 2 views
0

Я запускаю некоторые моделирования с помощью Mathematica с NDSolve, и мне нужно ввести эффект температуры. Я определяю таблицу случайных чисел, а затем сделать функцию из нее, таким образом:Ошибка Mathematica «не целое»

randomtablex = 
     Table[RandomVariate[NormalDistribution[]], {i, 1, 
     IntegerPart[3 tspacer/deltats] + 1}]; 
    randomtabley = 
     Table[RandomVariate[NormalDistribution[]], {i, 1, 
     IntegerPart[3 tspacer/deltats] + 1}]; 
    randomtablez = 
     Table[RandomVariate[NormalDistribution[]], {i, 1, 
     IntegerPart[3 tspacer/deltats] + 1}]; 
    Bterp[t_] := 
     {randomtablex[[IntegerPart[t/deltats] + 1]], 
     randomtabley[[IntegerPart[t/deltats] + 1]], 
     randomtablez[[IntegerPart[t/deltats] + 1]]}; 

Где 3tspacer время интеграции и deltats время, когда изменения теплового поля. Моделирование работает нормально, и результаты верны, но каждый раз я получаю это сообщение об ошибке:

Часть :: pspec: «Спецификация детали 1 + IntegerPart [1000000000000 t] не является ни целым числом, ни целым числом».

Как я уже сказал, это не проблема, но мне кажется, что она продолжает появляться ... Есть ли способ узнать, откуда она взялась, или мне просто отключить ее?

Спасибо заранее

ответ

1

это будет происходить, если доступ к Bterp[] с символическим аргументом t

Попробуйте это:

ClearAll[Bterp] 
Bterp[t_?NumericQ] := .... 

http://support.wolfram.com/kb/3820

в сторону, IntegerPart[x]+1 такое же, как Ceiling[x] (при условии, что x> 0 ...)

+0

Это действительно работало, но теперь я получаю еще одну ошибку: NDSolve :: ndfdmc: Вычисленные производные не имеют размерности, соответствующей начальным условиям. NDSolve решает дифференциальное векторное уравнение, поэтому я предполагаю, что он имеет какое-то отношение к NDSolve, не рассматривая Bterp вектор после изменения ... – Noel

+0

Вам нужно сыграть тот же трюк на более высоком уровне - убедитесь, что функция напрямую заданный для ndsolve, определяется так, что он оценивает только числовые значения. (очень распространенная проблема, вы могли бы подумать, что NDSolve, NIntegrate и т. д. даже не попытаются выполнить символическую оценку, но они это делают) – agentp