小编Sjo*_*ies的帖子

如何在Mathematica的Manipulate语句中控制Locator的外观?

如果我有一个Manipulate语句,例如:

Manipulate[
 Graphics[Line[{{0, 0}, pt}], PlotRange -> 2], {{pt, {1, 1}}, 
  Locator}]
Run Code Online (Sandbox Code Playgroud)

Mathematica图形

如何以最简单的方式更改Locator对象的外观?我是否必须采用动态声明?具体来说,我本来希望使定位器不可见.

wolfram-mathematica

6
推荐指数
2
解决办法
847
查看次数

在Mathematica中创建具有不同颜色边缘的图形

我想创建一个图形(图形理论),其中某些边缘与其他边缘具有不同的颜色,这将用于突出图形中从一个顶点到另一个顶点的路径.

以下是一些具有不同颜色边缘的示例http://demonstrations.wolfram.com/AGraphTheoryInterpretationOfTheSumOfTheFirstNIntegers/http://demonstrations.wolfram.com/Ramsey336/.我查看了这些的源代码,但这些解决方案似乎很复杂.我需要一个简单的例子来工作.我估计我需要使用EdgeRenderingFunction作为其中一个选项GraphPlot.

此外,在"更多信息"部分的EdgeRenderingFunction文档中,它说:

Mathematica图形

这看起来很有用,但遗憾的是没有编码示例可供尝试.

从字面上看,我尝试了类似的东西

GraphPlot [{1 - > 2,2 - > 3,3 - > 4,4 - > 1,2 - > 4,4 - > 5,4 - > 6},VertexLabeling - > True,
EdgeRenderingFunction - > g [{ 1,2},{1,2},红色]]

但那不行.它需要更聪明的东西.

wolfram-mathematica graph-theory colors edges

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

如何将定位器约束到有限(但不常规)的位置?

在Mathematica中,可以通过参数LocatorPane (参见LocatorPane文档)将定位器约束到某些屏幕区域.

三个有序对的列表{{{minX, minY}, {maxX, maxY}, {dX, dY}}}通常是确定定位器行为的关键. {minX, minY}{maxX, maxY}设置区域.{dX, dY}设置跳跃大小:无限制为零,每跳的大小为任何其他正数.

在下面的代码中,{{{-.9, 0}, {1, 0}, {0, 0}}}设置定位器的区域和跳转pts.前两个有序对将定位器限制在数字线上的区间[-9,1].有序对{0, 0}不对任何一个定位器施加额外约束.但是,因为y值只能为零,所以由于前两项定义的区域,两个定位器都不能自由离开x轴.

我想将每个定位器限制在x值中myTicks.(在完整的程序中,myTicks会随着时间的推移而改变,具体取决于用户做出的决定.)由于刻度不是沿x均匀分布,因此无法通过为x-jump设置常量值来解决问题.如果该值考虑了定位器的当前位置,则下一个左跳可能与右跳的大小不同.

myTicks = {-.9, 0, .1, .2, .45, .79, 1};
pts = {{.25, 0}, {.75, 0}};

LocatorPane[Dynamic[pts],
  Graphics[{}, 
    Axes -> {True, False}, 
    PlotLabel -> Row[{"locators at: " , Dynamic[pts[[1, 1]]], " and ", 
       Dynamic[pts[[2, 1]]]}], 
    Ticks -> {myTicks, Automatic}],
{{{-.9, 0}, {1, 0}, …
Run Code Online (Sandbox Code Playgroud)

wolfram-mathematica mouseevent

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

Mathematica中的对数滑块控制

我正在为Mathematica中的分压器计算一个小接口.我有两个滑块(z1和z2)代表电阻值,还有几个滑块代表Vin作为正弦曲线.

问题是可用电阻值的范围(在现实世界中)大致为对数{r, 100, 1,000,000}.r但是,如果我将滑块范围设置为,则选择常见的低电阻值是不切实际的.{100, 10,000}.

是否可以创建一个扫过对数范围的滑块?

Manipulate[
 Grid[{{Plot[(VinRCos[t] + VinC), {t, -3, 9}, 
     PlotRange -> {-1, VMax}, AxesLabel -> {t, Vin}]}, {Plot[
     z2/(z1 + z2)(VinR*Cos[t] + VinC), {t, -3, 9}, 
     PlotRange -> {-1, VMax}, AxesLabel -> {t, Vout}]}}, 
  ItemSize -> 20],
 {{z1, 10000}, 10, 1000000, 10}, {z1}, {{z2, 10000}, 10, 
  1000000}, {z2}, Delimiter, {{VinR, 2.5}, 0, 
  5}, {VinR}, {{VinC, 2}, -VMax, VMax}, {VinC}]
Mathematica图形

user-interface wolfram-mathematica widget

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

matlab就像Mathematica中的多线图

所以我有一个值矩阵,行对应于数据集,我想使用ListPlot绘制每一个,但我希望有一个不同于索引的x轴.在matlab中我会:

x = 0:4;

ys = [10 20 40 80 160; 
      20 40 80 160 320; 
      30 60 120 240 480]';

plot(x,ys)
Run Code Online (Sandbox Code Playgroud)

这将给出三行x值为0-4,y值为每列.

我在Mathematica中最接近的是

x = Range[0,4];

ys = {{10, 20, 40, 80, 160},
      {20, 40, 80, 160, 320},
      {30, 60, 120, 240, 480}};

ListPlot[Transpose[{x,#}]& /@ ys]
Run Code Online (Sandbox Code Playgroud)

Mathematica图形

这是正确的方法吗?这看起来有点神秘.希望有一个我缺少的功能或选项.

plot wolfram-mathematica

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

如何使用矩阵的一些非连续行和列形成子矩阵

我有一个10乘10矩阵.我想从这个主矩阵形成一个子矩阵,使用除第1,第2和第8列和行之外的所有行和列.
我知道Part可以用来形成子矩阵,但是这些例子主要是关于仅使用连续的行和列来形成子矩阵.

wolfram-mathematica matrix

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

列表列表中此ReplaceAll的正确语法是什么?

专家们的轻量级问题.我无法想象这个替换的正确语法.我有这个清单

Clear[a, b, c, d]
polesList = {{3, {a, b}}, {5, {c, d}}};
Run Code Online (Sandbox Code Playgroud)

它是一个列表的形式,子列表每个都有{order,{x,y}}的形式,我想生成这个形式的新列表(x + y)^ order

目前这就是我的工作,它有效:

((#[[2, 1]] + #[[2, 2]])^#[[1]]) & /@ polesList

(* ----->   {(a + b)^3, (c + d)^5}  *)  
Run Code Online (Sandbox Code Playgroud)

但我一直在努力学习使用,ReplaceAll因为它比纯函数更清晰,因为我可以更好地看到模式,如下所示:

Clear[a, b, c, d, n]
polesList = {{3, {a, b}}, {5, {c, d}}};
ReplaceAll[polesList, {n_, {x_, y_}} :> (x + y)^n]   (*I thought this will work*)
Run Code Online (Sandbox Code Playgroud)

我得到了奇怪的结果,这是

{(5 + c)^3, {(5 + d)^a, (5 + d)^b}}
Run Code Online (Sandbox Code Playgroud)

使用ReplaceAll而不是使用纯函数方法进行此替换的正确语法是什么?

谢谢

更新:

我发现使用Replace而不是 …

wolfram-mathematica

5
推荐指数
3
解决办法
460
查看次数

使用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
查看次数

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

试图让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
查看次数