We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
This project will be mentored by @HydrogenSulfate
符号计算又称计算机代数计算,通俗地说就是用计算机推导数学公式,如对表达式进行因式分解、化简、微分、积分、解代数方程、求解常微分方程等。PaddleScience 目前的方程计算路径主要通过用户传递 Equation 下子类内置的 python function,或者手写的 python function,这种方式虽然给用户带来了较高的方程构造自由度,但损失了简便性和可读性,用户需要手写完整的 python 代码,从接受输入,到计算所有的中间变量,最后返回计算结果。下面通过一个简单的例子来说明符号计算和手写 python 代码的区别,假设我们需要计算如下一条比较复杂的表达式:
$$ navier_{x} = \rho(\dfrac{\partial^2 u}{\partial t^2}) - (\lambda + \mu)(\dfrac{\partial^2 u}{\partial x^2}+\dfrac{\partial^2 v}{\partial y \partial x} + \dfrac{\partial^2 w}{\partial z \partial x}) - \mu(\dfrac{\partial^2 u}{\partial x^2} + \dfrac{\partial^2 u}{\partial y^2} + \dfrac{\partial^2 u}{\partial z^2}) $$
目前 PaddleScience 使用手写 python function,如下所示,可以看到整体流程比较繁琐。会出现无法避免的if-else判断,容易出现不小心写错的情况,可读性差
# step1. 手写 python function def navier_x_compute_func(out): x, y, u, v = ( out["x"], out["y"], out["u"], out["v"], ) duxvywz = jacobian(u, x) + jacobian(v, y) duxxuyyuzz = hessian(u, x) + hessian(u, y) if self.dim == 3: z, w = out["z"], out["w"] duxvywz += jacobian(w, z) duxxuyyuzz += hessian(u, z) navier_x = ( -(self.lambda_ + self.mu) * jacobian(duxvywz, x) - self.mu * duxxuyyuzz ) if self.time: t = out["t"] navier_x += rho * hessian(u, t) return navier_x # step2. 传入必要的数据,计算方程结果 out = {....} navier_x_value = navier_x_compute_func(out)
在使用符号计算的情况下,结构更加清晰,可读性大大增强,并且支持公式打印,不容易写错
# step1. 定义 navier_x 的符号化公式 navier_x = ( rho * ((u.diff(t)).diff(t)) - (lambda_ + mu) * (u.diff(x) + v.diff(y) + w.diff(z)).diff(x) - mu * ((u.diff(x)).diff(x) + (u.diff(y)).diff(y) + (u.diff(z)).diff(z)) ) # 将符号计算公式转换成 function,这一步由代码内部完成,不需要用户转换 navier_x_compute_func = symbolic_to_function(navier_x) # step2. 传入必要的数据,计算方程结果 out = {....} navier_x_value = navier_x_compute_func(out)
使用符号计算,除了上述优点,还有以下优势:
下载安装 PaddleScience 套件:https://paddlescience-docs.readthedocs.io/zh/latest/zh/install_setup/#121-git 注:本任务不涉及复杂几何,因此不需要安装 pymesh、open3d 等安装文档中提及的可选安装包
参考 sympy to func project 设计方案进行开发
参考 PaddleScience文档-贡献指南-整理代码并提交
800 京东卡
The text was updated successfully, but these errors were encountered:
close due the following PR is merged:
Sorry, something went wrong.
luotao1
HydrogenSulfate
No branches or pull requests
背景
符号计算又称计算机代数计算,通俗地说就是用计算机推导数学公式,如对表达式进行因式分解、化简、微分、积分、解代数方程、求解常微分方程等。PaddleScience 目前的方程计算路径主要通过用户传递 Equation 下子类内置的 python function,或者手写的 python function,这种方式虽然给用户带来了较高的方程构造自由度,但损失了简便性和可读性,用户需要手写完整的 python 代码,从接受输入,到计算所有的中间变量,最后返回计算结果。下面通过一个简单的例子来说明符号计算和手写 python 代码的区别,假设我们需要计算如下一条比较复杂的表达式:
1.1 Python Function
目前 PaddleScience 使用手写 python function,如下所示,可以看到整体流程比较繁琐。会出现无法避免的if-else判断,容易出现不小心写错的情况,可读性差
1.2 Sympy 符号计算
在使用符号计算的情况下,结构更加清晰,可读性大大增强,并且支持公式打印,不容易写错
使用符号计算,除了上述优点,还有以下优势:
2. 收益
2.1 开发者个人收益
2.2 PaddleScience 收益
3. 开发流程
3.1 安装 PaddleScience
下载安装 PaddleScience 套件:https://paddlescience-docs.readthedocs.io/zh/latest/zh/install_setup/#121-git
注:本任务不涉及复杂几何,因此不需要安装 pymesh、open3d 等安装文档中提及的可选安装包
3.2 代码开发
参考 sympy to func project 设计方案进行开发
3.3 整理代码并提交PR
参考 PaddleScience文档-贡献指南-整理代码并提交
4. 参考资料
奖励
800 京东卡
The text was updated successfully, but these errors were encountered: