zoupaper的个人博客分享 http://blog.sciencenet.cn/u/zoupaper

博文

矩阵思维---从潮流计算说起

已有 3934 次阅读 2019-3-11 14:35 |系统分类:科研笔记

     潮流计算是电力系统分析中最基本的计算,在本科生课程《电力系统分析》中就有完整的介绍。优秀的本科生,或者普通的硕士研究生,应当有能力独立编写完整的潮流计算程序。

    但是不同的潮流计算程序是有不同层次的。

    第一层次,是初学者水平。特点是把教科书中的公式亦步亦趋的写入程序,基于已有的框架(MATLAB或者Python)。没有考虑到性能优化、软件的功能设计。这一层次的潮流计算程序可能只有几百行。

第二层次,是工业级的水平。这一层次的程序必须考虑到工业现场部署潮流计算程序,对于性能和功能的需求极高。因此需要采用许多技术措施,例如稀疏矩阵的处理(包括压缩存储、节点排序、高性能的因子分解计算等)。这一层次的潮流计算程序可能有几千行甚至上万行。

第三层次,是基于现代软件技术的水平。在程序实现时,优先将矩阵计算交给高性能库专门实现。常规的应用编程的主要作用相当于一个中介,把应用问题转化为高性能库所能处理的问题,同时在设计上更便于软件维护。在设计上,充分发挥现代编程特性对于传统设计模式的改造(例如C++中的bind/function简化模块间的耦合)。这一层次的程序,其代码长度可能跟第一层次的多不了太多,也就千行左右吧。对于外行人来说,似乎实现的功能也差不多,但是从本质上已经是天壤之别了。

从第一层次到第三层次,其实是一个否定-之否定的过程。大部分所谓的“高手”,实际上是停留在了第二层次。以我的工作经验,停留在第二层次,软件开发维护的效率非常低。电力系统分析的理论真的有那么复杂吗?理论上一两个人能搞定的事情,常常需要十人以上的团队才能维护。另一方面,第二层次号称是“工业级”的,但是性能跟第三层次程序的比起来,差距可能超出大部分人的预计。

实现第三层次的编程,非常强调“矩阵思维”。教科书上的推导虽然是基于矩阵的,但是大部分人未必真正的理解。他们需要一个实例,按照循环把矩阵中的每个元素推导出来。在程序实现过程中,大家都习惯写出大量的循环语句,而不是直接对矩阵进行操作。

下面列举一个实例。牛顿法潮流计算,雅克比矩阵的形成非常重要。常规上都是循环求解雅克比矩阵的元素。但是康奈尔大学的MATPOWER软件形成雅克比矩阵非常有参考价值,直接用矩阵运算求出复数形式的雅克比矩阵:

dS_dVm = diagV * conj(Ybus * diagVnorm) + conj(diagIbus) * diagVnorm

dS_dVa = 1j * diagV * conj(diagIbus - Ybus * diagV)

dS_dVm是复数功率向量对电压幅值向量;dS_dVa是复数功率向量对电压角度向量。   我原本以为,这种求解方法与常规方法在数学上是等效的。没想到经过实测,收敛性也大幅度提高了。可见基于矩阵的推导的确抓住了问题的本质。(补充一点:如果采用GPU加速,由于并行的粒度要求非常小,完全基于矩阵操作可能不太适用,需要更细节的编程处理。但整体框架基于矩阵设计是没有任何问题的)

  基于矩阵的计算,一方面可以调用最优秀的计算机科学家编写的高性能矩阵库;在对问题本身的理解上,也更本质,而且矩阵方面有大量的数学工具可以用(想想张贤达老师的书那么厚)。所以,电力系统方向要做的深入,学习矩阵知识非常必要。



https://blog.sciencenet.cn/blog-3316223-1166936.html

上一篇:电力系统中的下垂控制
下一篇:设计模式与现代C++ 连载(一)
收藏 IP: 218.94.96.*| 热度|

0

该博文允许注册用户评论 请点击登录 评论 (0 个评论)

数据加载中...
扫一扫,分享此博文

Archiver|手机版|科学网 ( 京ICP备07017567号-12 )

GMT+8, 2024-12-22 13:55

Powered by ScienceNet.cn

Copyright © 2007- 中国科学报社

返回顶部