|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
x
本帖最后由 orionsnow 于 2010-11-4 19:18 编辑
关于矩阵求逆问题二
原来那个老贴太乱了,所以我这里重新开了一个新贴。
http://www.dolc.de/forum/viewthr ... p;extra=&page=2
我的方程 是一个 含有 n 个未知数向量的线性方程组
比如 未知数向量 为 Ci , Dij, Eijk
C 是 1 by 1 的
D 是 2 by 1 的
E 是 2乘2=4 by 1 的
整个线性方程就是一个1+2+4 =7 的
这个7by7 的矩阵按结构的特殊性可以分为9块
最简单的情况是
A 。{C D E}’ = {f(Y)}’
A=(
c 1 1 1 1 1 1
1 d 0 1 0 0 0
1 0 d 0 1 1 1
1 1 0 e 0 0 0
1 0 1 0 e 0 0
1 0 1 0 0 e 0
1 0 1 0 0 0 e
)
c, d, e 是大于1 的常数。 每次模拟的时候由一些固定的模型参数组合产生。
稍微复杂点的情况,在不同块里头的 0 会被0。5 或者随机数替代。
简单的情况下, 我发现 可以先把 2,3 行相+,4567 行相+, 得到一个33阵,然后把 C 求出来,然后带入到 原方程,把C 消去。 然后可以把2,4 和3567 分成两组+,可以把D 分别求出来。 然后以此类推。
并且这个过程可以数值计算,也可以符号计算。
当 0 被0。5 替代后算法依然有效,不过要增加若干次特殊对称矩阵求逆。
当 0 被正态随机数 替代后算法可能有效,可以通过巧妙构造求一次期望之后求近似解。
虽然我原来用分块求逆的办法来化简的思路还是没有实现,不过现在算有了一种线性时间可以实现的解析算法
问题1
这种算法叫什么?
是一种超稀松矩解法? 或者是叫有特殊结构的矩阵求逆?
recursive algorithm 这个叫法正确么? 因为最后解写出来的形式是
C_i = Mc^-1 Y_i
D_i. = Md^-1 (Y_i-C_i)
E_i.. = Me^-1 (Y_i-C_i-D_i)
问题2
有否 有合适的分块矩阵算法?
我觉得我到推导出分块解不远了, 因为每次那个行求和,都可以通过若干上下三角阵来完成。把他们组合起来应该就有效了。
3
这个应该不算问题了。
我最近跟据mathematica user support的提示在写mathematica code, 应该可以让电脑来做分块推导。
文献上好像提到一种 g-inverse 的矩阵.
4
关于为什么一定要用解析算法:
I
时间需要。
在实际应用的时候 n=3-5 整个方程的维数大概是2000。
已经有网友提供了参考,这么大的随机矩阵求逆大概是200秒,超稀松的话更快。
但是我们目前的公式解求解大概是每次1秒,整个参数空间的暴力搜索大概要15 天。(一个cpu 的情况下。)
如果数值计算一次100 秒,那么暴力搜索大概要1500天(一个cpu 的情况下。) 这样的话就需要对暴力搜索算法进行加速。还要再设计加速算法。另外就是要搜索的函数空间可选择的参数组合比较多,连续性和求导都相对比较难保证 (求差值没有问题)。虽然我也做了一些尝试,不过目前还没有准备好。
模拟的并行计算也是一个好选择,不过需要经费和时间申请或者购置新主机。
II
理论分析需要。
比如上边那个方程 最后
解析解
E_ijk = ( y_ijk - C_i - D_ij) /e
这样就很容易的解释说 e 和 遗传力度 h 成反比。
因为 根据定义 E_ijk = h ( y_ijk - C_i - D_ij)
如果是数值解,就必须两个数值再做图,或者算协方差 才能确认比例关系。 |
|