Run Mathematica armhf on RaspberryPi aarch64

Why 使用Mathematica + Python web framework提供对外的服务平台,由于机器上运行的都是AARCH64系统,而ARM Mathematica目前只支持32位的v6 v7,需要在aarch64上增加支持armhf v6 v7的运行时库。 Small TIPS 为了能够在Ubuntu 20.04 aarch64 系统上运行Mathematica ARM 32Bit,查阅了很多相关资料,最后试验成功,可以通过以下方式在aarch64系统上运行32位的Mathematica。 最主要的就是这一行:dpkg –add-architecture armhf 添加armhf源,后面就是安装对应的armhf libc libc++ zlib。 Mathematica 的相关程式安装包在这里 FROM ubuntu:20.04 RUN apt-get update RUN dpkg --add-architecture armhf RUN apt-get update RUN apt-get install libc6-dev:armhf libstdc++-9-dev:armhf zlib1g-dev:armhf COPY ./ /tmp/ WORKDIR /tmp RUN apt install ./wolframscript_1.4.0+2020081702_armhf.deb -y RUN apt install ./wolfram-engine_12.1.1+2020081901_armhf -y WORKDIR / Python Web and Wolfram Backend Demo 对应于Mathematica armhf位版本,安装gcc和g++都为armhf版本,所以我们安装的Python和Python Modules也需要对应到armhf。 ...

August 25, 2020

Intro Wolfram Physic Project

回忆 还清楚的记得在初中毕业那段时间对数学和理论物理特别感兴趣,自学了高等数学和大学基础物理学,依旧能回忆起第一次喜欢上一位女生就是因为在一起讨论自然科学压轴题的解题思路,课堂上一起辩论弹簧弹性势能的变化问题,还有因为无缘参加萧山区初中生学科竞赛,自然老师第一时间把竞赛题复印出来让我去做然后帮我评分和批改,从那之后我对探索物理和数学充满了愉悦感,进入高一后每天吃完中午饭都会去图书干翻翻科技杂志,后来第一次参加全国高中生应用物理知识竞赛,记得试卷的最后一道压轴题我用了微积分方式去解题,出考场的时候根本就没有想到自己会获得杭州赛区二等奖的成绩,毕竟自己没受过专业的解题训练,学校萧十一中还专门在学期末表彰大会上表扬了我,发了五百的奖金,那个时候的我心里特别开心,我还是特别感激我们高一时候的班主任兼化学老师姚老师,去学校报名的时候,我看到了他手上的科学分数排名单,然后他告诉我以后我就是班级的化学课代表,在每一次的考试中他都会表扬我某一道题的解题思路很清晰。还记得那个时候自己已经开始接触广义相对论原理,每个周天去学校的路上,都会在新华书店站个一到两个小时翻看和相对论有关的书籍和科普资料。 一转眼十五年过去了,现在听着巴赫的小无《恰空》,鼻子一酸忍不住会留下眼泪,对比以前学校时候的自己,现在自己每天重要的事情是努力赚钱,钻研自己喜欢的领域,十五年之后我想重新开始钻研数学,大学四年我立下自己的目标学会小提琴,毕业之后就喜欢上了计算机,开始系统学习Linux,找到了和计算机相关的工作,中途中也玩了摄影和影视。我想现在继续改变自己,有两件东西我永远不能丢掉理论物理和小提琴,现在已经30岁,我要重新拿起自己初高中那段时间喜欢的理论物理学,包括自己创业阶段也希望能和数学物理沾点边,回到最初的起点,累了就练练小提琴,不给自己留下人生的遗憾。正是从这一点出发,我就建立了这个网站,希望能够将自己的所见所闻所感所想全部记录下来。今天看了Wolfram有关他自己发现和解释宇宙终极理论的文章,所以决定花一周时间学习他的图理论,然后将自己学习到的知识和见解记录在这篇文章中,这就是我写这篇文章的动机。 旅程 Wolfram 所总结的理论就是基于简单的规则,然后给定系统初始状态,根据该规则,系统不断的递归演化自身。 规则 , 符号规则表述 {{x, y}, {x, z}} -> {{x, z}, {x, w}, {y, w}, {z, w}} 初始状态 系统演化过程 规则 符号规则表述 {{1, 2, 3}} -> {{4, 4, 2}, {4, 1, 3}} 初始状态 系统演化过程 这样我们就会去思考能否穷举所有可能的规则,而我们的宇宙正好匹配了我们这些规则中的一部分,比如我们按照相同的开始状态,却按照不同的规则去演化这个系统,我们可以得到如下的样例: 所有这些最终状态的起点都是 这里我们可以想象到弦理论,这个理论告诉我们构成这个世界的最基本形态就是琴弦,琴弦不同的振动频率,就产生了不同的形态,然后这些微小的琴弦经过不断的叠加,最后组成了我们所能看到的物质,Wolfram也是想揭示,宇宙的构成正是由简单的结构加上简单的规则经过不断自身迭代繁衍所产生的。 什么是空间 我们首先基于这条规则{{x, y, y}, {z, x, u}} → {{y, v, y}, {y, z, v}, {u, v, v}}来看下,最后会演化出怎么样的世界。 规则表述: 初始状态: 经过两百步的迭代之后,我们可以得到最终的生成如下,演变过程动画: 这里我们就会发现有些有趣的东西在里面,刚开始是一个简单的自循环结构,然后基于我们的规则开始演化,最后生成了空间中类似片状的网,随着迭代次数继续增加,这个空间中的片演化得越来越稠密,形成了我们熟知的连续可微分流形。 类比我们生活中常见的流水,当我们从稍远的地方看去时,水是一种流体,它的表面都是连续的,但是当我们不对的靠近和放大流水,我们却得到了一个离散的世界,看到了水分子,水分子又由氢原子和氧原子构成,所以我们可以空间是一种离散的组织,通过不断的叠加演化,最终让我们看上去空间好像是连续的。 最后给出上述规则500步的演化动态图: 基于同样的原理,我们能否通过一个简单的规则来演化出一个三维的空间图。 ...

August 10, 2020

Mathematica Json 解析

今天在工作过程中遇到需要解析JSON文件,得到其中的一个关键字,准备用Mathematica练练手,文件如下,需要解析"pubkey"这个字段。 { "apiVersion": "v1", "data": { "voting-keystore.json": "{\"version\": 4, \"pubkey\": \"a94300da6d73a11d8ba72c99dd385b7a9d5043c9ee83ffd4190d89b7677e68d384fbceb556d2a0652e81250ad4b8477d\", \"uuid\": \"09e5c322-bf6b-401a-b90d-1aef6d57996a\", \"crypto\": {\"checksum\": {\"message\": \"704e947d244bc8020ef6d6f0844c4aea08af18ecf345bb98ab999df6441377d7\", \"function\": \"sha256\", \"params\": {}}, \"kdf\": {\"message\": \"\", \"function\": \"scrypt\", \"params\": {\"p\": 1, \"n\": 32768, \"salt\": \"b891518a06f1d3f67a6d485bba8627f5320497f98c08cb52e4391e50071ac97d\", \"dklen\": 32, \"r\": 8}}, \"cipher\": {\"message\": \"bcd85ce03e82e645e13501f717d907c03a23ee1f8dc6bd045c53001719ddc7a5\", \"function\": \"aes-128-ctr\", \"params\": {\"iv\": \"7f05ffce95bcd0157e520c6b949b90b1\"}}}, \"path\": \"\"}" }, "kind": "ConfigMap", "metadata": { "creationTimestamp": "2020-07-25T11:35:24Z", "managedFields": [ { "apiVersion": "v1", "fieldsType": "FieldsV1", "fieldsV1": { "f:data": { ".": {}, "f:voting-keystore.json": {} } }, "manager": "Swagger-Codegen", "operation": "Update", "time": "2020-07-25T11:35:24Z" } ], "name": "lighthouse-validator-a94300da6d73", "namespace": "eth", "resourceVersion": "1200502", "selfLink": "/api/v1/namespaces/eth/configmaps/lighthouse-validator-a94300da6d73", "uid": "05b37640-be81-4944-9c9f-868431b6107f" } } 使用wolfram语言一行搞定: ...

July 27, 2020

Mathemtica 机器学习 卷积神经网络(1)

卷积神经网络 关于卷积 可以抽象成数学表达式: I可以表示一张图像的矩阵,K是卷积核 卷积的计算层 Object Recogition with Gradient-Based Learning 输入层 Input Layer 卷积层 Conv Layer 限定层 RELU Layer 池化层 Pooling Layer 全连接层 Full connected Layer 创建网络 基础学习分辨猫狗归类 (* 创建模型 *) myCatDogModel = NetChain[{ ConvolutionLayer[32, 3], Ramp, PoolingLayer[2, 2], ConvolutionLayer[64, 3], Ramp, PoolingLayer[2, 2], FlattenLayer[], 128, Ramp, 2, SoftmaxLayer[]}, "Input" -> NetEncoder[{"Image", {224, 224}, ColorSpace -> "RGB"}] , "Output" -> NetDecoder[{"Class", {"cat", "dog"}}]] (* 收集样本,训练集和测试集合 *) (* 转换数据集合为Association格式 *) dataSetsConvert[dateSets_] := Module[ {}, File[#] -> StringSplit[FileBaseName[#], "."][[1]] & /@ dateSets] traingDataFiles = RandomSample[dataSetsConvert[traingData]]; testDataFiles = RandomSample[dataSetsConvert[testData]]; SetDirectory[ "/Users/alexchen/datasets/Convolutional_Neural_Networks/dataset"]; FileNames["*.jpg", "training_set/cats/"]; FileNames["*.jpg", "training_set/dogs/"]; traingData = Join[FileNames["*.jpg", "training_set/cats/"], FileNames["*.jpg", "training_set/dogs/"]]; testData = Join[FileNames["*.jpg", "test_set/cats"], FileNames["*.jpg", "test_set/dogs"]]; (* 生成训练集和验证集 *) traingDataFiles = RandomSample[dataSetsConvert[traingData]]; testDataFiles = RandomSample[dataSetsConvert[testData]]; (* 样本随机抽取显示 *) RandomSample[traingDataFiles, 5] (* 训练模型 *) mytrainedModel = NetTrain[catdogModel, traingDataFiles, All, ValidationSet -> testDataFiles, MaxTrainingRounds -> 20] (* 生成训练模型评估报告 *) myModelPlot = mytrainedModel["FinalPlots"] (* 生成训练得到的模型计算模型正确率 *) myTrainedNet = mytrainedModel["TrainedNet"] ClassifierMeasurements[myTrainedNet, testDataFiles, "Accuracy"] ...

May 22, 2020

Epidemic Modeling

SIR Modeling SIR 经典模型主要是在传染病领域用来预测感染人数的未来趋势。 S[t] 表示susceptible易感人群 I[t] 表示infected已经感染的人群 R[t] 表示recovered已经康复人群 参考: MathWorld: SIR Model Kermack-McKendrick Model Kermack-McKendrick Model Kermack-McKendrick 最初的模型是为了解释像在1665-1666年发生的鼠疫,1865年发生的霍乱,感染人群的数量随着时间的变化。 该模型假定总人口是是固定的,传染病的潜伏期是瞬间的,传染持续时间与疾病的周期相同,并且假定人群都是无差异的,无性别及种族差异。 该模型使用了三个非线性常微分方程: beta 表示 infection rate 感染率 gamma 表示 recovery rate 恢复率 i 表示已感染人群 r 表示已恢复健康的人群 s 表示易感染人群 预设值: beta = 20%, gamma = 15%, i(0) = 0.1, r(0) = 0, s[0] = 10 Modelica 源码 model SIRModel parameter Real beta = 0.2; parameter Real gamma = 0.15; Real i; Real r; Real s; initial equation s = 10; i = 0.1; r = 0; equation der(s) = (-1) * beta * i * s; der(i) = (-1) * gamma * i + beta * i * s; der(r) = gamma * i; end SIRModel; 模型预测图: ...

April 6, 2020

Lotka Volterra Model

Lotka Volterra 方程 维基百科解释: Lotka Volterra 该方程组描述了 捕食系统模型 微分方程为: dx/dt = Axy - Bx dy/dt = Cy - Dxy => dy/dx = (Cy - Dxy) / (Axy - Bx) (1.1) {A, B, C, D} 均为模型系数 对微分方程(1.1)求解为: W 为Lambert W function 当系数为 {A -> 0.1, B -> 2, C -> 4, D -> 0.4, x -> {1,30}} y[x] 由于我们需要获得 x,y 关于自变量时间t,在模型系数{A,B,C,D}下的模型图,所以在Mathematica中对该方程组定义和设置模型系数 求该方程的数值解 创建Modelica模型 在0时刻 x[0] = 10, y[0] = 5 model = CreateSystemMod["Hare", Join[predatorPreyEq, {x[0] == 10, y[0] == 5}], t, Association[{"ParameterValues" -> params}]] 建模 Modelica 模型源码 ...

April 3, 2020

Foundations of Modelica systemmodeler with Mathematica (1)

为什么学习 Modelica 之前看到过一本书《模型思维》, 这段时间正好处在CoVid-2019疾病肆虐全球,偶然之间看到关于传染病学的预测模型SEIR,借着这个机会开始研究数学模型,决定重新捡起大学的时候学习的数学分析,常微分方程,偏微分方程,微分几何学等课程。接触到了Modelica这门语言,由于一直在学习Wolfram Mathematica,对Wolfram产品系列的SystemModeler颇有好感,于是下手购买了SystemModeler家庭版,购买了一本《Modelica多领域物理系统建模入门与提高》书籍,开始了对Modelica的探索,预期希望对数学模型的建立能够有一个较深刻的认识,利用数学模型预测某个事件的未来发展规律和在定量数据分析中获得更多的隐藏信息。 建立模型 - 液压系统 语言采用 Mathematica 液体不可压缩 根据Hagen-Poiseuille关系式首先建立方程组: 预设置参数: 假设两边的管子横截面积相同为1 解上述微分方程 h1, h2 的高度变化图 h1[t], h2[t] 方程组如下所示: 最后创建 SystemModeler 模型 model W8918fcdd72d8462a890fa97776822164 parameter Real g = 9.81; parameter Real mu = 1 / 500; parameter Real pipeDia = 0.2; parameter Real pipeLen = 0.1; parameter Real rho = 0.2; Real h1; Real h2; Real p1; Real p2; initial equation h1 = 1; h2 = 0; equation p1 = g * rho * h1; p2 = g * rho * h2; der(h1) = (-1) / 128 * Modelica.Constants.pi * pipeDia ^ 4 * pipeLen ^ (-1) * mu ^ (-1) * (p1 + (-1) * p2); der(h2) = 1 / 128 * Modelica.Constants.pi * pipeDia ^ 4 * pipeLen ^ (-1) * mu ^ (-1) * (p1 + (-1) * p2); »; end W8918fcdd72d8462a890fa97776822164; 将Modelica源码复制到SystemModeler运行,得到如下h1, h2的高度变化图形 ...

March 30, 2020 · FengChen