小编Sjo*_*ies的帖子

使用PatternSequence和Mathematica中的Case来查找峰值

给定坐标对

data = {{1, 0}, {2, 0}, {3, 1}, {4, 2}, {5, 1}, 
        {6, 2}, {7, 3}, {8, 4}, {9, 3}, {10, 2}}
Run Code Online (Sandbox Code Playgroud)

我想提取山峰和山谷,因此:

{{4, 2}, {5, 1}, {8, 4}}
Run Code Online (Sandbox Code Playgroud)

我目前的解决方案是这种笨拙:

Cases[
 Partition[data, 3, 1],
 {{ta_, a_}, {tb_, b_}, {tc_, c_}} /; Or[a < b > c, a > b < c] :> {tb, b}
]
Run Code Online (Sandbox Code Playgroud)

您可以看到,通过使用三倍大小的数据集开始Partition.我认为可以使用CasesPatternSequence提取这些信息,但这种尝试不起作用:

Cases[
 data,
 ({___, PatternSequence[{_, a_}, {t_, b_}, {_, c_}], ___} 
         /; Or[a < b > c, a …
Run Code Online (Sandbox Code Playgroud)

design-patterns wolfram-mathematica

5
推荐指数
2
解决办法
1061
查看次数

试图让Mathematica逼近积分

我试图让Mathematica近似一个积分,它是各种参数的函数.我不需要它非常精确 - 答案将是一小部分,5位数将是不错的,但我会满足于2.
问题是,主要有一个象征性的积分积分,我不能使用NIntegrate,因为它的符号.

    F[x_, c_] := (1 - (1 - x)^c)^c;
    a[n_, c_, x_] := F[a[n - 1, c, x], c];
    a[0, c_, x_] = x;

    MyIntegral[n_,c_] := 
      NIntegrate[Integrate[(D[a[n,c,y],y]*y)/(1-a[n,c,x]),{y,x,1}],{x,0,1}]
Run Code Online (Sandbox Code Playgroud)

Mathematica在n 大于2且c大于3 时开始悬挂(通常为两者n并且c稍微高一些).

有没有重写这个表达式的技巧,以便更容易评估它?我已经打了不同的WorkingPrecisionAccuracyGoalPrecisionGoal上外的选项NIntegrate,但没有帮助内积分,这就是问题的所在.事实上,对于更高的nc,我甚至不能让Mathematica扩展内在导数,即

Expand[D[a[4,6,y],y]] 
Run Code Online (Sandbox Code Playgroud)

挂起.

我正在为学生使用Mathematica 8.

如果有人有任何关于我如何让M近似这个的提示,我将不胜感激.

wolfram-mathematica

5
推荐指数
1
解决办法
1344
查看次数

Mathematica动态绘制矩阵数据

我试图使用Mathematica 7动态绘制矩阵中包含的数据.数据包含在其中,通过化学模型获得.

[year  H    He     Li     C     ...  C8H14+,Grain- ]
[0     0    0.03   0.009  1E-3  ...  0             ]
[100   .1   0.03   0.009  1E-3  ...  0             ]
[200   .2   0.03   0.009  1E-3  ...  0             ]
[300   .2   0.03   0.009  1E-3  ...  0             ]
[...   ...  ...   ...     ...   ...  ...           ]
[1E6   .5   0.03   0.003  1E-8  ...  1E-25         ]
Run Code Online (Sandbox Code Playgroud)

事实是,矩阵维度是2001*1476(2000步和名称的第一行,1475个化合物+ 1年的列),非常沉重.我试图绘制任何具有浓度/年份图的化合物.这有效

Manipulate[
  ListLogLogPlot[data[[All, {1, i}]], PlotLabel -> data[[1, i]] ], 
  {{i, 2, "Compound"}, 2, compounds, 1}
]
Run Code Online (Sandbox Code Playgroud)

其中数据是矩阵,并且化合物 …

plot wolfram-mathematica dynamic matrix

5
推荐指数
2
解决办法
1069
查看次数

特殊运算符在Mathematica中的定义

如何在Mathematica中定义一个特殊的运算符,例如一种特殊类型的加法或乘法运算符?我过去做过,但我不记得我把代码放在哪里了.我尝试在两个矩阵上定义这个填充的小圆运算符:

A_\[FilledSmallCircle] B_ := 
  Which[(MatrixQ[A] || VectorQ[A]) && (MatrixQ[B] || VectorQ[B]), 
   A.B, ! (MatrixQ[A] || VectorQ[A]) && (MatrixQ[B] || VectorQ[B]), 
   A@B, (MatrixQ[A] || VectorQ[A]) && ! (MatrixQ[B] || VectorQ[B]), 
   Transpose[B@Transpose[A]]];
Run Code Online (Sandbox Code Playgroud)

但它不起作用.我究竟做错了什么?

wolfram-mathematica definition operators

4
推荐指数
1
解决办法
1451
查看次数

查找共享公共属性的变量

我正在使用Mathematica并且有一组变量(A,B,C,D,...),其属性A =(蓝色,大,圆形),B =(红色,小,尖尖),等等.这些属性在变量之间可能很常见.查找共享共同属性(例如,小)的所有变量的最佳通用方法是什么?谢谢.

variables wolfram-mathematica properties

4
推荐指数
1
解决办法
214
查看次数

为什么不从自定义Palette更新局部变量颜色运行ClearAll ["Global`*"]?

我创建了一个自定义调色板,并ActionMenu执行ClearAll["Global`*"].它执行所需的操作,但前端不会立即将颜色从黑色更新为蓝色(标准),因为它ClearAll["Global`*"]直接从笔记本单元格执行时发生(它仅在执行其他操作后更新).有没有办法启动刷新前端显示状态?

编辑:显然,当我从调色板加载包时(蓝色不会立即更新为黑色)也会发生同样的情况.

wolfram-mathematica mathematica-frontend

4
推荐指数
1
解决办法
2581
查看次数

如何在InputStream上进行Get?

编码包的一个令人讨厌的事情是它们必须在一个单独的文件中.如果我们想要分发一个简单的自包含app(编码),我们需要提供两个文件:app"interface"和app包.

如果我将编码文件的所有内容放在一个字符串中,并将该字符串转换为一个InputStream,那么我将该包内容视为一个文件.

但Get,据我所知,这是唯一具有解码功能的操作(也被Needs使用),不适用于Streams.它只适用于真实文件.

有人能找到一种获取流的方法吗?

drm wolfram-mathematica

4
推荐指数
1
解决办法
196
查看次数

Clear []和ClearAll []如何运作?清除[]无法清除两个不同的Manipulate []使用的变量

我有两个不同的Mathematica笔记本,具有相似但不同的功能.当它们是唯一开放的笔记本时,两者都可以正常工作.尽管我(自由)使用Clear []来清除相关变量,但是当其他笔记本打开时,其中一个始终失败.

称之为GlobalManipulate

ClearAll["Global`*"]
Clear["Global`*"]
Definition[linear]
linear[x_] := a x;
quad[x_] := a x^2;
functionList := {linear, quad};
Manipulate[
  Plot[function[dummy], {dummy, -10, 10}], 
  {function, functionList}, {a, -10, 10},
  LocalizeVariables -> False, TrackedSymbols -> All
]
Run Code Online (Sandbox Code Playgroud)

称之为LocalManipulate

Clear["Global`*"]; 
Manipulate[
   {
      linear := a x; quad := a x^2; 
      linear, quad, function, 
      Plot[ReleaseHold@function, {x, -10, 10}]
   }, 
   {function, {HoldForm@linear, HoldForm@quad}}, 
   {a, -10, 10}, TrackedSymbols -> All
]
Run Code Online (Sandbox Code Playgroud)

当它自己运行时,GlobalManipulate按预期工作,我看到更新的图a更改.线性产生的定义Null.

当LocalManipulate打开,运行时,GlobalManipulate不再有效.即使它重新运行它的情节会出现一秒然后消失.

我使用Mathematica 8的本地副本和Mathematica 7的远程副本重现了这一点.

问题必须涉及功能linear[x_] …

wolfram-mathematica

4
推荐指数
1
解决办法
2288
查看次数

有没有办法在mathematica中绘制一组具有相同原点的线?

我有一个由这个列表给出的一组点:

list1 = {{3, 1}, {1, 3}, {-1, 2}, {-1, -1}, {1, -2}};

我希望Mathematica从原点到上面的所有点绘制一条线.换句话说,从原点(0,0)到上述集合中的所有单个点绘制矢量.有没有办法做到这一点?到目前为止,我已经试过了Filling选项,PlotPoints以及VectorPlot,但他们似乎并不能够做我想做的.

wolfram-mathematica

4
推荐指数
2
解决办法
409
查看次数

Mathematica函数变为红色,不起作用

我正在尝试使用Mathematica找到最小的跨越树,我想使用Combinatorica中的MinimumSpanningTree函数.我正在使用以下代码.

Needs["Combinatorica`"] 
MinimumSpanningTree[GraphPlot[m]]
Run Code Online (Sandbox Code Playgroud)

其中m是矩阵.但是,MinimumSpanningTree变为红色并且不起作用.输出给出

out = MinimumSpanningTree[<maximum spanned tree>]  //can't show the tree here
Run Code Online (Sandbox Code Playgroud)

如何使MinimumSpanningTree工作?它为什么变成红色?

wolfram-mathematica function minimum-spanning-tree

3
推荐指数
2
解决办法
1207
查看次数