news 2026/9/8 19:17:33

Python CasADi初步教程

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
Python CasADi初步教程

文章目录

    • 简介和安装
    • 符号表达式SX
    • 牛刀小试

简介和安装

CasADi 是一个开源的符号计算与数值优化框架,提供了Python、MATLAB和C++ 接口。其核心机制是将数学表达式构建为有向无环图(DAG)形式的计算图,并在此基础上实现精确的自动微分,并生成高效的 C 代码,适用于大规模非线性规划(NLP)和最优控制问题(如模型预测控制 MPC)的建模与求解,在模型预测控制、机器人学与轨迹优化、电力系统等领域有着重要应用。

Python可以用pip安装

pip install casadi -i https://pypi.tuna.tsinghua.edu.cn/simple

符号表达式SX

在CasADi中,符号表达式(Symbol eXpression)用来表示数学公式的内部对象,支持定义变量和公式并构建计算图,甚至可以自动求导。

例如,∂ ( x 2 + sin ⁡ y ) ∂ x = 2 x \frac{\partial(x^2+\sin y)}{\partial x}=2xx(x2+siny)=2x,示例如下

importcasadiasca x=ca.SX.sym("x")y=ca.SX.sym("y")f=x**2+ca.sin(y)ca.gradient(f,x)# SX((x+x))

但需要注意的是,符号表达式并不能直接带入数值,在CasADi中,需要在构造Function之后,才能带入数值进行计算。下面令x = [ 2 , 3 ] , y = 3 x=[2,3], y=3x=[2,3],y=3,进行计算

F=ca.Function("F",[x,y],[f])F([2,3],3)# DM([4.14112, 9.14112])importnumpyasnp np.array(F([2,3],3))

在经过数值计算后,Function的返回值是DM类型,此为数据矩阵(Data Matrix, DM),可以无缝转为数组。

在CasADi中,有两种构建SX的方法,分别是SX(n,m)SX.sym(name, n, m),从表达式可以看出来,二者在结构上完全一致,都是n × m n\times mn×m的数组,但后者是个带有名字的表达式,从而在交互时更加便捷。比如SX.zeros(n,m), SX.ones(n,m), SX.eye(n),顾名思义不必多说。

除了SX之外,CasADi还提供了矩阵表达式(Matrix eXpression, MX)这种数据结构,二者区别在于,在SX中,矩阵中的每个元素,都被看成独立的标量表达式;而在MX中,则将矩阵本身作为一个整体对象来运算,从而在大规模稀疏线性代数中效率更高。

牛刀小试

下面考虑一个常见的非线性规划问题

min ⁡ x , y ( x − 2 ) 2 + ( y + 1 ) 2 \min_{x,y} (x-2)^2+(y+1)^2x,ymin(x2)2+(y+1)2

这题很简单,一瞪眼就知道结果是( 2 , − 1 ) (2,-1)(2,1),下面调用CasADi中的IPOPT求解器进行优化,结果如下

x=ca.SX.sym("x")y=ca.SX.sym("y")obj=(x-2)**2+(y+1)**2nlp={"x":ca.vertcat(x,y),"f":obj}solver=ca.nlpsol("solver","ipopt",nlp)sol=solver(x0=[0,0])print(sol["x"])# DM([2, -1])
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/8 19:16:39

牛顿拉夫逊法潮流计算原理与MATLAB实现全解析

简介:面向电力系统专业学生与研究人员的牛顿拉夫逊法潮流计算MATLAB程序包,针对潮流计算中非线性方程组的迭代求解问题,给出了从数学模型到代码实现的完整方案。程序涵盖节点导纳矩阵构建、雅可比矩阵计算、功率不平衡量求解及迭代收敛判断等…

作者头像 李华
网站建设 2026/9/8 19:12:58

车间工况下工控触控屏故障预防与维护实战指南

车间里最怕的不是设备坏,是设备坏得不明不白。尤其工控触控屏这种天天被操作工手指头戳、被油污喷、被粉尘糊的部件,它一旦抽风,整条线都得停下来等。我见过太多因为触摸失灵、误触发、屏幕漂移导致的停线事故,产线一停就是几万块…

作者头像 李华
网站建设 2026/9/8 19:10:44

基于微信小程序的新能源汽车租赁换电管理系统毕业设计项目源码

温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:本人主页置顶文章(点我)开头有 CSDN 平台…

作者头像 李华
网站建设 2026/9/8 19:08:24

Spring Boot中实现RAG问答系统:源码架构设计与踩坑实践

简介:这是一份供Java开发者参考的Spring项目检索增强生成(RAG)设计源码,面向希望将AI大模型能力引入企业级Spring应用、并借RAG机制构建专家知识库的开发者和架构师。压缩包共46个文件,大小2.52MB,其中21个…

作者头像 李华