相关疑难解决方法(0)

Mathematica中的树数据结构

我主要使用mathematica作为数学工作台,并编写相对较小的ad-hoc程序.然而,我正在设计一个我打算在Mathematica中编程的系统.我需要将数据存储在树中,并搜索和遍历树.虽然我知道如何实现树,但我更喜欢标准的,经过测试的代码.我在Mathematica用户维基上查看了基本数据结构的类型.我没有找到,尽管Mathematica文档中有一个小例子.

现在问我的问题:

  1. 是否有可用的数据结构(开源)包?

  2. 您在数据结构方面使用了什么方法?逐步开发自己的util包?

(这不是一个问题,只是一个评论.也许......缺乏(大量可用的)开源软件包是Mathematica没有应有的动力的原因.我害怕鸡/蛋问题.)

wolfram-mathematica

39
推荐指数
2
解决办法
9412
查看次数

使用With对比绘图使用Block(Mathematica)绘图

我想描述我一直有一个问题与Plot使用With,以保持定义的参数"本地".我不一定要求解决问题:我遇到的问题是理解问题.

有时候我使用如下的结构来获得一个Plot:

方法1

plot1 = With[{vmax = 10, km = 10}, 
  Plot[Evaluate@((vmax x)/(km + x)), {x, 0, 100}, 
   AxesOrigin -> {0, 0}]]
Run Code Online (Sandbox Code Playgroud)

我喜欢这种方法,即使对于非Mathematica用户来说,它也是相当清楚的.

当要绘制的方程式变得更加复杂时,我喜欢在绘图外部定义它们(使用SetDelayed).例如:

f[x_] := (vmax x)/(km + x)
Run Code Online (Sandbox Code Playgroud)

但是,以下不起作用

方法2

plot2 = With[{vmax = 10, km = 10}, 
  Plot[Evaluate@f[x], {x, 0, 100}, AxesOrigin -> {0, 0}]]
Run Code Online (Sandbox Code Playgroud)

我一直天真地认为它应该.但是,基于Help语句

Plot将变量x视为本地,有效地使用Block

我使用过各种解决方法,大多数情况如下

方法3

plot3 = Plot[With[{vmax = 10, km = 10}, Evaluate@f[x]], {x, 0, 100}, 
  AxesOrigin -> {0, 0}]
Run Code Online (Sandbox Code Playgroud)

这个看起来很尴尬,甚至通常需要对Mathematica用户进一步解释.

绘图输出

在此输入图像描述

但是,最近我发现偶然的机会,取代 …

wolfram-mathematica

28
推荐指数
1
解决办法
3679
查看次数

Mathematica中的结构数据类型?

在使用Mathematica的符号和数字功能之后,我发现它也是一种不错的编程语言.但是,作为通用语言使其不那么吸引人的东西是缺少类似C的结构数据类型(或Pascal中已知的记录类型).我怎样才能解决这个问题?

struct types wolfram-mathematica

15
推荐指数
2
解决办法
4162
查看次数

面向对象的数学编程

我想知道如何一般地做到这一点,最好的策略是什么等等.我已经看到了一些解决方案,其中一些看起来非常难/乏味.我工作的那个使用纯函数来实现对象函数和头像OBJECT [].在类编码方面使用起来非常困难.在定义函数和构造函数时(特别是继承部分很难),我感到头晕目眩.

因此,我的问题的编码是关于类的编码部分的优点.理想情况下,我正在寻找可以如下工作的东西.首先,我们定义一个类,例如汽车如下:

beginClass["vehicle"];
   public startTheEngine;
   private fuel;
   vehicle[args_]:=Block[{},...];
   startTheEngine[thrust_]:=Block[{}...];
endClass

beginClass["car", "vehicle"];
public TurnTheRadioOn;
private frequency;
car[args_] := Block[{...},];
TurnTheRadioOn[]:=
   Block[{},
      use private variable frequency
   ]
endClass;
Run Code Online (Sandbox Code Playgroud)

请注意,私有/公共函数的定义几乎与"普通"mathematica代码一样非常重要.这就是主要要求.

该课程将被用作

car1 = newObject["car", args];
car1.StartTheEngine[];
car1.TurnOnTheRadio[];
Run Code Online (Sandbox Code Playgroud)

我很好奇那个人要考虑什么?为了构建像上面这样的东西可能涉及Mathematica的许多方面,例如如何修复".".语法等.如果您建议现有的软件包,我将不胜感激,如果您可以原则上评论它是如何工作的.

我天真的期望是封装部分可以通过BeginPackage结构修复.所有对象都可以存储在专门为每个类设计的名称空间中.我认为对象看起来像

car1 = OBJECT["car"][fuel$1,frequency$1,....];
car2 = OBJECT["car"][fuel$2,frequency$2,....];
Run Code Online (Sandbox Code Playgroud)

我认为必须构建类似编译器的东西,将上面的类定义代码转换为类.m文件.此外,在某种程度上,第二个主要问题是如何构建这样的编译器.

关心佐兰

ps我之所以问这个问题,是因为我真的需要多次这样的东西.

wolfram-mathematica

10
推荐指数
2
解决办法
9144
查看次数

使用Manipulate中的结构来帮助管理控制变量,如何初始化

我不确定如何初始化Mathematica中的结构以与Manipulate一起使用,以帮助我更好地组织我拥有的许多控制变量.

我将举几个例子,这有助于说明问题.

这是最基本的操作:

方法1

Clear["Global`*"]
Manipulate[process[a, b],

 {{a, 1, "a"}, -10, 10, 1},
 {{b, 2, "b"}, -10, 10, 1},

 Initialization :> 
  {
   process[a_, b_] := Module[{}, Row[{"a=", a, " b=", b}]]
   }
 ]
Run Code Online (Sandbox Code Playgroud)

在我写的一个演示中,我有更多的控件.一些函数(例如上面名为process []的函数)最终必须使用15个或更多参数调用,这使得我很难维护.(我别无选择,不能真正考虑它).

所以,我正在尝试使用结构来收集这些变量.相关问题是这样的

在Mathematica中安全地设置"结构"

所以,接下来我尝试了下面的内容:(我知道在Mathematica中制作结构的选择不是最好的,但我想先看看它是否可行)

方法2

Clear["Global`*"]
Manipulate[process[myData],

 {{myData["a"], 1, "a"}, -10, 10, 1},
 {{myData["b"], 1, "b"}, -10, 10, 1},

 Initialization :> 
  {
   process[myData_] := 
    Module[{}, Row[{"a=", myData["a"], " b=", myData["b"]}]]
   }
 ]
Run Code Online (Sandbox Code Playgroud)

但上述方法无效.我明白了

Manipulate::vsform does not have the correct form for a variable specification
Run Code Online (Sandbox Code Playgroud)

所以,我想,好吧,让我自己填写结构,然后调用process []函数,所以我这样做了: …

struct wolfram-mathematica initialization

5
推荐指数
0
解决办法
760
查看次数