Python和MATLAB锂电铅蓄电化学微分模型和等效电路

🎯要点

  1. 对比三种电化学颗粒模型:电化学的锂离子电池模型、单粒子模型和带电解质的单粒子模型。
  2. 求解粒子域内边界通量与局部电流密度有关的扩散方程。
  3. 扩展为两个相的负或正电极复合电极粒子模型。
  4. 模拟四种耦合机制下活性物质损失情况。
  5. 模拟锂离子电池三参数模型等效电路。

🍁电池解析模型

在这里插入图片描述

🍪语言内容分比

在这里插入图片描述
在这里插入图片描述

🍇Python和MATLAB符号微分

计算导数的常用方法有 3 种:

  • 数值微分
  • 符号微分
  • 自动微分

数值微分依赖于导数的定义:
f ′ ( x ) = lim ⁡ h → 0 f ( x + h ) − f ( x ) h f^{\prime}(x)=\lim _{h \rightarrow 0} \frac{f(x+h)-f(x)}{h} f(x)=h0limhf(x+h)f(x)
其中,你把一个非常小的 h h h 和评估函数放在两个地方。这是最基本的公式,在实践中,人们使用其他公式,这些公式给出的估计误差更小。这种计算导数的方法主要适用于你不知道你的函数并且只能对其进行采样的情况。此外,对于高维函数,它需要大量的计算。

符号微分操纵数学表达式。如果你曾经使用过 matlab 或 mathematica,那么你会看到类似这样的内容

d d x ( x 2 cos ⁡ ( x − 7 ) sin ⁡ ( x ) ) = x 2 sin ⁡ ( 7 − x ) csc ⁡ ( x ) + x 2 ( − cos ⁡ ( 7 − x ) ) cot ⁡ ( x ) csc ⁡ ( x ) + 2 x cos ⁡ ( 7 − x ) csc ⁡ ( x ) \begin{aligned} & \frac{d}{d x}\left(\frac{x^2 \cos (x-7)}{\sin (x)}\right)= \\ & x^2 \sin (7-x) \csc (x)+x^2(-\cos (7-x)) \cot (x) \csc (x)+2 x \cos (7-x) \csc (x) \end{aligned} dxd(sin(x)x2cos(x7))=x2sin(7x)csc(x)+x2(cos(7x))cot(x)csc(x)+2xcos(7x)csc(x)
在这里,他们知道每个数学表达式的导数,并使用各种规则(乘积规则、链式规则)来计算最终的导数。然后他们简化表达式以获得最终表达式。

自动微分可操纵计算机程序块。微分器具有对程序的每个元素求导的规则。它还使用链式法则将复杂表达式分解为更简单的表达式。

Python符号微分

导数规则要求一个项有 2 个子项,即二元运算(例如 *),以及一个一元运算(例如 sin)。

term.py:

from functools import reduceclass Term:def __init__(self, label: str or int, children=None):self.label = labelself.children = children if children else []def __repr__(self):if self.children:return f"({self.label} " + reduce(lambda str1, str2: str1+" "+str2, (repr(child) for child in self.children)) + ")"else:return f"{self.label}"@classmethoddef copy(cls, obj):"""makes a copy of obj"""return cls(obj.label, [cls.copy(child) for child in obj.children])

symbols_table:

MUL = '*'
ADD = '+'
SUB = '-'
DIV = '/'
POW = '^'
LOG = 'log'
SIN = 'sin'
COS = 'cos'
TAN = 'tan'
OPEN_BR = '('
CLOSE_BR = ')'
VAR = 'x'symbols = {LOG, SIN, COS, TAN, MUL, ADD, SUB, DIV, POW, OPEN_BR, CLOSE_BR, VAR}
from term import Term
from symbols_table import *
import numbersdef calculate_derivative(term1: Term, rules: dict) -> Term:if isinstance(term1.label, numbers.Number):return Term(0)elif term1.label == VAR:return Term(1)else:return rules[term1.label](term1, rules)def mul_derivative(term1: Term, rules) -> Term:child1, child2 = term1.children  return Term(ADD, [Term(MUL, [calculate_derivative(child1, rules), child2]), Term(MUL, [child1, calculate_derivative(child2, rules)])])def div_derivative(term1: Term, rules) -> Term:child1, child2 = term1.children  return Term(DIV, [Term(SUB, [Term(MUL, [calculate_derivative(child1, rules), child2]), Term(MUL, [child1, calculate_derivative(child2, rules)])]),Term(POW, [child2, Term(2)])])def sum_derivative(term1: Term, rules) -> Term:child1, child2 = term1.children  return Term(term1.label, [calculate_derivative(child1, rules), calculate_derivative(child2, rules)])def power_derivative(term1: Term, rules) -> Term:child1, child2 = term1.children  return Term(ADD,[Term(MUL, [calculate_derivative(child2, rules), Term(LOG, [child1]), Term(POW, [child1, child2])]),Term(MUL, [calculate_derivative(child1, rules), child2, Term(POW, [child1, Term(SUB, [child2, Term(1)])])])])def sin_derivative(term1: Term, rules) -> Term:return Term(MUL, [Term(COS, [term1.children[0]]), calculate_derivative(term1.children[0], rules)])def cos_derivative(term1: Term, rules) -> Term:return Term(MUL, [Term(-1), Term(SIN, [term1.children[0]]), calculate_derivative(term1.children[0], rules)])def tan_derivative(term1: Term, rules) -> Term:arg = Term.copy(term1.children[0])return Term(ADD, [calculate_derivative(arg, rules), Term(MUL, [calculate_derivative(arg, rules), Term(POW, [term1, Term(2)])])])def log_derivative(term1: Term, rules) -> Term:return Term(DIV, [calculate_derivative(term1.children[0], rules), term1.children[0]])rules_for_differentiation = {MUL: mul_derivative, ADD: sum_derivative, SUB: sum_derivative,COS: cos_derivative, SIN: sin_derivative, TAN: tan_derivative,POW: power_derivative, DIV: div_derivative, LOG: log_derivative}def derivative(term1):return calculate_derivative(term1, rules_for_differentiation)

MATLAB符号微分

求函数 y = f ( x ) 2 d f d x y=f(x)^2 \frac{d f}{d x} y=f(x)2dxdf 关于 f ( x ) f(x) f(x) 的导数

syms f(x) y
y = f(x)^2*diff(f(x),x);
Dy = diff(y,f(x))

D y = 2 f ( x ) ∂ ∂ x f ( x ) \begin{aligned} & Dy = \\ & \qquad 2 f(x) \frac{\partial}{\partial x} f(x)\end{aligned} Dy=2f(x)xf(x)

找到描述质量弹簧系统运动的欧拉-拉格朗日方程。定义系统的动能和势能。

syms x(t) m k
T = m/2*diff(x(t),t)^2;
V = k/2*x(t)^2;

定义拉格朗日量。

L = T - V

L = m ( ∂ ∂ t x ( t ) ) 2 2 − k x ( t ) 2 2 \begin{aligned} & L = \\ & \frac{m\left(\frac{\partial}{\partial t} x(t)\right)^2}{2}-\frac{k x(t)^2}{2}\end{aligned} L=2m(tx(t))22kx(t)2

欧拉-拉格朗日方程如下

0 = d d t ∂ L ( t , x , x ˙ ) ∂ x ˙ − ∂ L ( t , x , x ˙ ) ∂ x 0=\frac{d}{d t} \frac{\partial L(t, x, \dot{x})}{\partial \dot{x}}-\frac{\partial L(t, x, \dot{x})}{\partial x} 0=dtdx˙L(t,x,x˙)xL(t,x,x˙)

计算项 ∂ L / ∂ x ˙ \partial L / \partial \dot{x} L/x˙

D1 = diff(L,diff(x(t),t))

D 1 = m ∂ ∂ t x ( t ) \begin{aligned} & D 1= \\ & m \frac{\partial}{\partial t} x(t)\end{aligned} D1=mtx(t)

计算第二项 ∂ L / ∂ x \partial L / \partial x L/x

D2 = diff(L,x)

D 2 ( t ) = − k x ( t ) D 2( t )=-k x(t) D2(t)=kx(t)

找到质量弹簧系统的欧拉-拉格朗日运动方程。

diff(D1,t) - D2 == 0

ans ⁡ ( t ) = m ∂ 2 ∂ t 2 x ( t ) + k x ( t ) = 0 \begin{aligned} & \operatorname{ans}(t)= \\ & m \frac{\partial^2}{\partial t^2} x(t)+k x(t)=0 \end{aligned} ans(t)=mt22x(t)+kx(t)=0

👉更新:亚图跨际

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/882353.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【PhpSpreadsheet】ThinkPHP5+PhpSpreadsheet实现批量导出数据

目录 前言 一、安装 二、API使用 三、完整实例 四、效果图 前言 为什么使用PhpSpreadsheet? 由于PHPExcel不再维护,所以建议使用PhpSpreadsheet来导出exlcel,但是PhpSpreadsheet由于是个新的类库,所以只支持PHP7.1及以上的版…

服务器数据恢复—RAID5阵列上层Linux操作系统中节点损坏的数据恢复案例

服务器数据恢复环境: 一台服务器上有一组由5块硬盘(4块数据盘1块热备盘)组建的raid5阵列。服务器安装Linux Redhat操作系统,运行一套基于oracle数据库的OA系统。 服务器故障: 这组raid5阵列中一块磁盘离线&#xff0c…

观测云 AI 助手上线:智能运维,从此触手可及!

在当前的云原生时代,运维的复杂性和数据的爆炸式增长给企业带来了前所未有的挑战。为了帮助企业高效应对这些挑战,观测云自豪地推出了 AI 助手——智能化的运维助手,让每位用户都能轻松驾驭复杂的可观测性场景。 01 你身边的 PE 助手&#x…

《重置MobaXterm密码并连接Linux虚拟机的完整操作指南》

目录 引言 一、双击MobaXterm_Personal_24.2进入,但是忘记密码。 那么接下来请跟着我操作。 二、点击此链接,重设密码。 三、下载完成后,现在把这个exe文件解压。注意解压要与MobaXterm_Personal_24.2.exe在同一目录下哦,不然…

vim编辑器交换文件的产生与处理方法

文章目录 问题附图交换文件的作用和产生原因报错信息解读解决方法恢复文件使用命令行删除在文件管理器中删除在文本编辑器中处理 问题附图 简要分析 这个报错信息是由 vim 编辑器产生的,它表明在你尝试打开文件 /opt/software/openGauss/clusterconfig.xml 时&#…

MyBatis实践:提高持久层数据处理效率

文章目录 1 Mybatis简介1.1 简介1.2 持久层框架对比 2 快速入门2.1 准备数据库2.2 项目搭建2.3 依赖导入2.4 准备MyBatis配置文件2.5 实体类准备2.6 准备Mapper接口和MapperXML文件2.7 运行和测试 3. 核心配置文件4. MyBatis进阶使用4.0 以包为单位,引入所有的映射文…

一次性入门三款分布式定时任务调度框架:Quartz、ElasticJob3.0、xxl-job

分布式定时任务调度框架(文末有源码) 前言1、Quartz1.1 数据库1.2 maven依赖1.3 代码实现1.3.1 创建一个job1.3.1 为job设置trigger 1.4 配置文件1.5 启动、测试1.1 单机1.2 集群 2、ElasticJob2.1 下载zk2.2 新建三个类型的作业2.3 配置文件2.4 启动项目…

Nature?拿捏~

之前有分享过很多《Nature》论文插图,想着为大家提供更加广阔的作图思路。 但有人说,这些图好看是好看,可惜也就大佬们能画,跟我这个小卡拉米没啥关系。 此言差矣。 如果我说,Matlab就能画呢? 比如&…

AIGC助力小学生编程梦:C++入门不再难!

文章目录 一、AIGC时代下的编程教育新趋势二、小学生C入门趣味编程的意义三、小学生C入门趣味编程的实践策略四、面临的挑战与应对策略五、AIGC技术在小学生C编程中的应用与前景《小学生C趣味编程从入门到精通》编辑推荐内容简介作者简介目录 随着人工智能生成内容(…

C++初阶——入门

目录 1、C发展历史 2、C版本更新 3、C参考文档 4、C书籍推荐 5、C的程序 6、命名空间 6.1 namespace的作用 6.2 namespace的定义 6.3 namespace的使用 7、C输入&输出 8、缺省参数 9、函数重载 10、引用 10.1 引用的概念和定义 10.2 引用的特性 10.3 引用的使…

10月9日

肯定是对x求导 刨根问底求导数解析式 区间再现均值不等式 没利用B-E 0 同解方程组 趋于0的时候,看1次项 没有考虑x -1的情况 还要加一,非齐次解

AdaTAD(CVPR 2024)视频动作检测方法详解

前言 论文:End-to-End Temporal Action Detection with 1B Parameters Across 1000 Frames 代码:AdaTAD 从论文标题可以看出,AdaTAD 可以在 1B 参数且输入视频在 1000 帧的情况下实现端到端的训练,核心创新点是引入 Temporal-Inf…

STM32_实验4_控制蜂鸣器

1.设置 PB2 引脚,生成代码。 2.打开蜂鸣器 // 循环反复HAL_GPIO_WritePin(GPIOB, GPIO_PIN_2, GPIO_PIN_SET); // 开启蜂鸣器printf("beep on\n");HAL_Delay(500); // 等待响500msHAL_GPIO_WritePin(…

解锁C++多态的魔力:灵活与高效的编码艺术(下)

文章目录 前言🎱四、多态的原理🔮4.1 虚函数表(vtable)🔮4.2 派生类对象中的虚函数表4.2.1 编写程序去访问虚函数表4.2.2 虚表存储位置的验证 🎱五、 多态的静态绑定和动态绑定🔮5.1 静态绑定&a…

spring底层原理

本文参考黑马程序员的spring底层讲解,想要更详细的可以去看视频。 另外文章会每日更新,大概持续1个月!!!每天更新一讲 这部分比较抽象,要经常复习!!! 一、BeanFactory与A…

【JPCS独立出版 | 福州大学主办 | 有确定的ISSN号】第三届可再生能源与电气科技国际学术会议(ICREET 2024)

第三届可再生能源与电气科技国际学术会议(ICREET 2024) 2024 3rd International Conference on Renewable Energy and Electrical Technology ICREET 2024已成功申请JPCS - Journal of Physics: Conference Series (ISSN:1742-6596) 独立出版&#xf…

引领智慧文旅新纪元,开启未来旅游新境界

融合创新科技,重塑旅游体验,智慧文旅项目定义旅游新未来 在全球化的浪潮中,旅游已成为连接世界的重要纽带。智慧文旅项目,不仅仅是一次技术的革新,更是对旅游行业未来发展的一次深刻思考。信鸥科技通过运用云计算、大数…

Vue3动态组件原来是这样

什么是Vue3动态组件 在Vue3中&#xff0c;动态组件简单来说就是根据不同的条件进行不同组件的渲染&#xff0c;可以联想一下在前端中常用到的动态样式 基本使用 在Vue3中&#xff0c;动态组件的使用也是非常简单的&#xff0c;只需要使用<component>标签&#xff0c;并…

WPFDeveloper正式版发布

WPFDeveloper WPFDeveloper一个基于WPF自定义高级控件的WPF开发人员UI库&#xff0c;它提供了众多的自定义控件。 该项目的创建者和主要维护者是现役微软MVP 闫驚鏵: https://github.com/yanjinhuagood 该项目还有众多的维护者&#xff0c;详情可以访问github上的README&…

Redis 高可用:从主从到集群的全面解析

目录 一、主从复制 (基础)1. 同步复制a. 全量数据同步b. 增量数据同步c. 可能带来的数据不一致 2. 环形缓冲区a. 动态调整槽位 3. runid4. 主从复制解决单点故障a. 单点故障b. 可用性问题 5. 注意事项a. Replica 主动向 Master 建立连接b. Replica 主动向 Master 拉取数据 二、…