【问题标题】:Mathematica "is not an integer" errorMathematica“不是整数”错误
【发布时间】:2013-08-01 08:48:19
【问题描述】:

我正在使用带有 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 是热场变化时间。 模拟运行良好,结果正确,但每次我收到此错误消息:

Part::pspec: "零件规格 1+IntegerPart[1000000000000 t] 既不是整数也不是整数列表。"

正如我所说,它不是一个真正的问题,但它一直出现让我很烦恼......有什么方法可以知道它来自哪里,或者我应该把它关掉吗?

提前谢谢你

【问题讨论】:

    标签: integer wolfram-mathematica dsolve


    【解决方案1】:

    如果您使用符号参数t 访问Bterp[],就会发生这种情况

    试试这个:

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

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

    另外,IntegerPart[x]+1Ceiling[x] 相同(假设 x>0...)

    【讨论】:

    • 这确实有效,但现在我得到另一个错误:NDSolve::ndfdmc:计算的导数没有与初始条件一致的维度。 NDSolve 求解一个微分向量方程,所以我的猜测是它与 NDSolve 没有考虑 Bterp 变化后的向量有关...
    • 您需要在更高级别上玩同样的技巧 - 确保定义直接提供给 ndsolve 的函数,以便它只计算数值。 (非常常见的问题,你会认为 NDSolve、NIntegrate 等甚至不会尝试符号评估,但他们会)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-10
    • 1970-01-01
    相关资源
    最近更新 更多