使用方法
- 01选择一个内核
JavaScript 和 MATLAB / Octave 在本地运行;Python (Pyodide) 和 R (webR) 需要下载运行时。 - 02在提示符处输入并按 Enter。Shift+Enter 换行,↑/↓ 翻阅历史,Ctrl/Cmd+L 清屏。未完成的语句——未闭合的括号、MATLAB 的
... 行、以 : 结尾的 Python 行——会把提示符变成 …,按 Enter 继续。 - 03切换到 Cells 使用笔记本。每个单元格有自己的内核选择器,因此 JavaScript 和 Python 单元格可以放在同一文档中;Ctrl+Enter 运行一个单元格,Run above 运行它和它之前的单元格,Run all 遍历整个列表。
- 04在 Vars 面板中移动数据。Pull all 把会话变量复制到数据工作区;Push all 把它们注入会话——这是语言之间唯一的桥梁。
- 05查看 Figures 面板。MATLAB 和 JavaScript 的
plot 输出下载为 SVG 或 PNG;matplotlib 图表以 PNG 图像形式到达。
示例
在 MATLAB 内核中求解一个方程组,然后在共享工作区上用 JavaScript 验证。下面的每个读数都能由同一输入复现。
在 Vars 面板按 Pull all:工作区得到 A(3×3 矩阵)以及 b、x(3 元向量,预览分别为 8 -11 -3 和 2 3 -1)。切换到 JavaScript,按 Push all,同样的值就进入会话:
残差不为零——求解是双精度的,所以 8.8817841970013e-16 已是浮点能达到的极限。
#1>> A = [2 1 -1; -3 -1 2; -2 1 2]; b = [8; -11; -3];
>> x = A\b
x =
2.0000
3.0000
-1.0000
>> norm(A*x - b)
ans = 8.8818e-16
#2> math.multiply(A, x)
[8, -11, -3]
> math.norm(math.subtract(math.multiply(A, x), b))
8.8817841970013e-16
各内核是什么
- JavaScript 运行在注入项目库的 mathjs 上(
math、cas、stats、fin、logic、graph、latex、currency、date、family、print、ws、plot);无需下载;会话从源重建(见注意事项)。
- MATLAB / Octave 是覆盖常用子集的 TypeScript 解释器:列主序 double、元胞、字符串、控制流和约 120 个内置函数,不支持 struct、类、复数、稀疏或整数类型。它在 4 × 10⁷ 次运算或 8 秒预算内本地运行。
- Python(Pyodide 0.28.3) 首次使用时下载约 12 MB;import 会触发包加载器,matplotlib 图表以捕获的 PNG 返回,拉取的 numpy 数组和 pandas DataFrame 变为矩阵/向量和表格变量。
- R(webR 0.6.0) 下载约 30 MB,在多次运行之间保留 webR 的基础 R 全局环境,且不返回图表——请在 R 中使用文本,或在 Python 中使用 matplotlib。
需要记住的限制
- 无法中断。
- 代码在主线程上同步运行——没有 Ctrl+C 或停止按钮;请把长任务分块,且只有 MATLAB 有内部预算。
- 会话随页面结束。
- 转录、历史和笔记本文本在重新加载后保留;会话变量不会。只有工作区变量会持久保存(每个最多 20,000 个元素)——Vars 面板就是保存按钮。
- 首次使用需要网络。
- Python 和 R 从 cdn.jsdelivr.net 获取;下载失败会提供重试,成功后会缓存。
- 它不做什么。
- 它不是 MathWorks MATLAB,也不是包管理器:没有工具箱、Simulink、struct、复数或稀疏类型;Python 限于 Pyodide 的包集合;R 不返回图形。通过数据工作区引入数据;无代码的矩阵计算请用数学工具,汇总与检验请用统计,单个输入表达式请用科学计算器。
JavaScript 会话只被扫描,不被解释
只有顶层 let/const/var 声明和简单的 name = … 赋值会被采集。两个后果几乎人人中招:
- 首次在块或函数体内创建的变量永远不会进入会话。执行
if (true) { let hidden = 41; } 后,typeof hidden 读出 undefined——没有任何错误行提醒你。
- 抛出异常的运行不会写回任何内容,因此错误前计算出的变量会丢失。运行
let before = 1; throw new Error('boom'),读到 boom 错误后再读 typeof before 是 undefined;顶层 let kept = 41 仍会用 42 回答 kept + 1。
Python、R 和 MATLAB 原生保留会话,所以这是 JavaScript 特有的。
适用场景
用第二种语言交叉核对计算
如上所示,在 MATLAB 中求解,再在共享工作区上用 JavaScript 重算残差:两个实现一致到 8.8817841970013e-16。把笔记本导出为 JSON 可保留代码(结果会被丢弃,重新运行即可复现),或把某一语言的单元格导出为原生脚本(notebook.js、notebook.m、notebook.py、notebook.R)。
在语言之间移动数据
在 Python 中清洗表格,然后 Pull all 进工作区,再 Push all 到 R 或 MATLAB 进行下一步——或者用数据工作区跨页面保留变量。拉取的向量可以直接进入统计做汇总与检验。
隐私
你的代码、控制台转录和变量都留在浏览器中;只有 Python 和 R 运行时从 cdn.jsdelivr.net 获取一次。
本页计算器
精选工具,点开即用;小工具可直接试算,数值会带入完整计算器。