最有效的方法来解决一个象征性的方程系统有超过2 k未知数

4视图(30天)
我面对的任务计算大型电力网络至少有2000个节点,可能最多10000个节点,尽可能的高效。这包含了一些交叉依赖和非线性组件。我使用的建模符号数学工具箱,这部分就完成了。
把它简单,结果是一个线性方程组的形式 。在G是2 k * 2 k的导纳矩阵值和x和s是每一列向量长度为2 k的。所有的符号矩阵/向量。
G是对称的,稀疏的但不是正定。在多数地方是0。向量x只包含值 我感兴趣的,而s和G只包含值 从前面步骤以及大约12个网络常数和动态的值的来源
那样好,我不能让方程组解决象征性地在有限的时间。如果有一个方法我不知道,让我知道!
现在我真正的问题。我可能想要模拟的动态行为网络以每秒10000步。与潜艇()代替常量后我需要做这样的:
2 = 1:步骤
%该药的所有Vn (k - 1)和Uq (k)符号在G和年代与潜艇()
%变换双G和年代
V (k) = linsolve (G, s)
结束
这个方法并不奏效,因为一步已经需要1秒的计算时间,这里的主要瓶颈是象征性的阵列的转换成一个双(0.9秒)。如果我不把数组,连接器需要更多的时间。
我从来没有解决这样的大型系统方程的关键,所以我不知道如果有更好的选择的这些步骤或专门解决此类问题。我欢迎任何暗示我可以试试。
顺便说一句:小奖金问题。它某种程度上可以设置只有少数显式方程n的Vn (k)而不是总解决系统中所有值向量x ?
6个评论
沃尔特·罗伯森
沃尔特·罗伯森 2023年1月29日
target_time = 1/10000;
Kvals =[5: 80年,81:100];
nK =长度(Kvals);
time_required = 0 (nK, 1);
Kidx = 1:长度(Kvals)
K = Kvals (Kidx);
rng (655321);
= sprand (K, K, 0.1) +眼(K);B =兰德(K, 1);
时间T = (@ \ B (), 0);
time_required (Kidx) = T;
结束
情节(Kvals time_required);
estimated_K = interp1 (time_required Kvals target_time)
estimated_K = 95.4491
我得到同样的结果(老)桌面——85到95的范围内。在这些大小,结果不改变如果=兰德(K, K)——一个稠密矩阵——而不是sprand()——一个稀疏矩阵。
这estimated_K的估计矩阵尺寸是实际维持每秒10000次迭代。

登录置评。

答案(1)

约翰D 'Errico
约翰D 'Errico 2023年1月28日
编辑:约翰D 'Errico 2023年1月28日
符号动力学缓慢。嗯,这样比较。这部分是因为他们使用精度高。计算,如果他们真的是象征性的,意味着你将有数百万(当然更多)的术语,在矩阵的每个元素。所以随着问题规模的增加,计算时间增长远远快于它解决数值,数字一起结合成每个元素只有一个号码。例如……
=符号(“一个”,(2,2))
一个=
rhs =符号(“b”1 [2]);
x = A \园艺学会
x =
但现在与一个更大的矩阵,会发生什么?
=符号(“一个”,5,5])
一个=
rhs =符号(“b”1 [5]);
x = A \园艺学会
x =
所以2 x2的区别符号解决,和5 x5象征性的解决具有重要意义。认真对待。
你有2 kx2k问题,或者10 kx10k问题。解决这些问题是不会发生在一个有限的时间。即使你的矩阵不像完全是象征性的,你仍将永远不会找到一个解决方案。
这不是一个问题,最有效的方式。没有有效的方法。

类别

找到更多的在稀疏矩阵帮助中心文件交换

下载188bet金宝搏


释放

R2021a

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!