|
|
这是最近写的 skill
# 1. 脚本语言名称
Aidpanel_C DSL
# 2. 这个脚本语言的用途
用于工程计算、热传递计算、单位换算、公式建模等
# 3. 基本语法
准则1:初始化常量时只能用数字,后续公式推导时可以且必须使用已定义的变量。
规则2:所有的互动小组件函数(如 slider, select)必须作为顶层变量赋值使用,绝对不允许出现在 ''' ''' 代码块内部
准则3:整个脚本禁止出现 python 导入库的语句,环境已默认在后台预置以下别名:`np` (numpy), `sp` (sympy), `math`, `integrate` (scipy.integrate), `optimize` (scipy.optimize)。无需导入,直接使用这些别名前缀即可
准则4:只需要按照我定义的规则写 DSL 脚本即可,不需要考虑求解的问题,我的程序自带求解器
1. 带单位赋值:
变量 = 数值|单位
变量 = 数值
2. 纯数值赋值:
>变量 = 数值|单位
>变量 = 数值
3. 指定单位运算:
变量 = 表达式 |单位
4. 自动生成单位运算:
变量 = 表达式
5. 代码块:
变量 = |单位
'''
代码块内容
'''
6. 互动UI小组件:
变量 = 互动UI关键字函数 |单位
# 4. 特殊符号,关键字函数含义
1. > 表示无视后面单位赋值
3. | 表示指定单位
4. # 小字注释及行尾注释
5. ## 中号字体注释
6. ### 大字注释
7. \div 分割线
8. @图片名.png 800 插入特定目录的图片,800是指定图片的显示宽度,不写即显示源大小
9. '''代码块''' 代码块标志,'''是代码块开始和结束的标志,代码块需要完全符合Python语法,代码块内的代码不需要导入库
10. A = slider(最下值, 最大值, 初始值,步长) 拖动条,互动小组件,可以在渲染界面形成互动的拖动条,输出选项的数值
11. A = select("初始选项", "Option1", "Option2", "Option3") 下拉菜单,互动小组件,可以在渲染界面形成互动的下拉菜单,输出选项的数值
12. matA = matrix(行数, 列数, [[2, 1, 31], [-1, 2, 3], [0, 0, 0]]) 矩阵,互动小组件,可以在渲染界面形成互动的矩阵表格,括号里面的数值是预填数值,也可以是赋值过的变量,matrix 后面如果无括号,即生成3x3空白矩阵
13. A = radio("初始选项", "Option1", "Option2", "Option3") 圆心单选框,互动小组件,可以在渲染界面形成n个圆点单选选项, 输出选项的数值
14. A = checkbox(1) 这里是一个复选框,1为 True,0为 False
15. ~~~是自定义块语法(aid.plot; aid.solve)出现的标志
# 5. 单位系统
变量 = 数值|单位:代表数值和单位要一起带入后续的运算
>变量 = 数值|单位:仅数值会带入后续运算,单位为空
变量 = 表达式:不输入单位为运算行的正常使用方式,单位会根据前面的变量的自动进行量纲运算,自动生成单位
变量 = 表达式|单位:为该结果强行指定单位,后续运算会使用结果数值+指定单位参与运算
单位必须写在 | 后面。
温差单位写 Δ°F、ΔK。
# 5. 变量命名规则
可以使用英文字母、数字、下划线、希腊字母、下标数字。
使用希腊字母本身,不要使用音译单词,如:σ, 不是 sigma.
不允许空格
大小写敏感
# 6. 表达式规则
例如:
乘法用 *
除法用 /
幂运算用 **
括号用 ()
允许使用Math, Numpy, Sympy, Scipy 函数,如 np.sin(), integrate.quad(f, 1, 2, args=(-1, 1)), optimize.minimize(objective, x0)
# 7. 自定义函数
1. aid.solve
sol1 =
~~~
aid.solve(
x_1 + x_2**2 = h
x_1**2 - x_2 = j_1
guess: x_1=0.7, x_2=0.7
)
~~~
2. aid.plot
fig =
~~~
aid.plot(
x, y1, "r-",
x, y2, "g--",
x, y3, "b-.",
)
~~~
或者
y = aid.plot(x, np.sin(K*x), 'r-', x, np.cos(K*x), 'b--', legend=['正弦波', '余弦波'])
#8. 脚本检查
1. 必须检查所有变量是否被赋值或者定义
2. 必须检查赋值语句中,用来赋值的是数值
3. 仅输出符合 Aidpanel_C DSL 语法的代码,不要包含任何 Markdown 代码块外的解释性文字
4. 当用户提供的物理公式缺失必要参数时,主动声明缺失的变量,而不是伪造数值
5. 你只需要按照用户的意图写出带单位的表达式即可,不要自行计算最终结果的单位,单位推导由编译器在后台完成
#9. 示例:
示例1:
>ΔT2 = 120 |Δ°F
>L = 4/12 |ft
h_c = 0.29*(ΔT2/L)**(0.25) |Btu/(hr*ft²*Δ°F)
>ΔT1 = 120/1.8 |Δ°F
>P = 4 |in
h = 0.0022*(ΔT1/P)**(0.25) |W/(in²*ΔK)
h1 = 2*h
ΔT3 = 120/1.8 |Δ°F
A = 4 |in²
Q = h1*A*ΔT3
示例2:
### 使用 numpy / sympy / scipy 进行计算
## 并在同一张图中画多条曲线
# 1) 使用 numpy 构造自变量
x = np.linspace(0, 2*np.pi, 400)
# 2) 使用 sympy 做符号推导:f(x) = sin(x) + 0.3 x
sp_var = sp.symbols('x')
f_sym = sp.sin(sp_var) + 0.3*sp_var
f_diff_sym = sp.diff(f_sym, sp_var)
f_lamb = sp.lambdify(sp_var, f_sym, 'numpy')
f_diff_lamb = sp.lambdify(sp_var, f_diff_sym, 'numpy')
y1 = np.sin(x)
y2 = f_lamb(x)
y3 = f_diff_lamb(x)
# 3) 使用 scipy 进行定积分:∫_0^{2π} sin(x) dx
I = integrate.quad(lambda t: math.sin(t), 0, 2*math.pi)
# 4) 在同一张图里画三条曲线
fig =
```
aid.plot(
x, y1, "r-",
x, y2, "g--",
x, y3, "b-.",
)
```
示例3:
# 1. 声明一个拖动条,例如弹簧系数 K
K = slider(1, 10, 3.9000000000000004, 0.1)
# 2. 画出正弦波受到 K 值影响的变化
x = np.linspace(0, 10, 500)
y = aid.plot(x, np.sin(K*x), 'r-', x, np.cos(K*x), 'b--', legend=['正弦波', '余弦波'])
z = aid.plot(x, np.cos(K * x))
g = aid.plot(x, np.tanh(K * x))
h = aid.plot(x, np.sin(K*x), x, np.cos(K*x))
这里有一个示例
https://wwaqw.lanzoue.com/itwqK3t6fz4d
基本的Mathcad功能都实现了,计算,绘图,单位系统,互动UI组件,自定义函数,编程,等等。
|
|