f*******8 发帖数: 149 | 1 请问如何求解下面这个矩阵方程?
AX^2+BX+C=0
其中,A,B,C,X和0都是4×4的矩阵。
请问可以用Matlab求解吗?如何使用呢?
万分感谢! | m**********e 发帖数: 12525 | 2 数学上对这类方程,一般先求其resolvent,不知道中国话该叫啥,
类似物理学里面的Green's function
具体过程这里说起来太复杂,你自己去图书馆找本书瞧瞧
【在 f*******8 的大作中提到】 : 请问如何求解下面这个矩阵方程? : AX^2+BX+C=0 : 其中,A,B,C,X和0都是4×4的矩阵。 : 请问可以用Matlab求解吗?如何使用呢? : 万分感谢!
| q*d 发帖数: 22178 | 3 naively构造一个迭代:
Xn+1=-B^(-1)[AXn^2+C]
迭代求解
【在 f*******8 的大作中提到】 : 请问如何求解下面这个矩阵方程? : AX^2+BX+C=0 : 其中,A,B,C,X和0都是4×4的矩阵。 : 请问可以用Matlab求解吗?如何使用呢? : 万分感谢!
| m**********e 发帖数: 12525 | 4 非线性函数的迭代法对初值敏感,收敛域很小,况且还是4个变量的,
所以你这方法基本上只有理论价值
【在 q*d 的大作中提到】 : naively构造一个迭代: : Xn+1=-B^(-1)[AXn^2+C] : 迭代求解
| q*d 发帖数: 22178 | 5 写个matlab程序不超过20行,试试就知道了
【在 m**********e 的大作中提到】 : 非线性函数的迭代法对初值敏感,收敛域很小,况且还是4个变量的, : 所以你这方法基本上只有理论价值
| m**********e 发帖数: 12525 | 6 我玩了好几年了,这类迭代法对多变量的复杂方程组完全没使用价值
【在 q*d 的大作中提到】 : 写个matlab程序不超过20行,试试就知道了
| q*d 发帖数: 22178 | 7 那我倒真是没真的试过,既然这个方法很容易实现,我会不介意先试试
【在 m**********e 的大作中提到】 : 我玩了好几年了,这类迭代法对多变量的复杂方程组完全没使用价值
| x******i 发帖数: 3022 | 8
不妨先试一下最简单的情况,比如B=0
【在 q*d 的大作中提到】 : 那我倒真是没真的试过,既然这个方法很容易实现,我会不介意先试试
| m**********e 发帖数: 12525 | 9 这方程的问题是,未知矩阵包含4个变量,数值计算的时候
分解成四个耦合方程,由于右边存在2次项,所以最后这四
个方程右边会有几个耦合的2次项,这使得迭代方程存在多
个极点,所以实际操作上,要让4个变量同时收敛,初值怎么
选择是件非常麻烦的事情
迭代法收敛快,精度高.但是初值的选取对最后是否收敛影响
巨大,特别是对这种复杂的耦合方程组,除非你大致已经知道
解的正确范围,否则基本上没啥用处,纯属浪费时间.
【在 x******i 的大作中提到】 : : 不妨先试一下最简单的情况,比如B=0
| q*d 发帖数: 22178 | 10 刚才大概试了一下,发现你说的似乎不太对.
对迭代:Xn+1=-B^(-1)*(A*X^2+C),A,B,C都由matlab随机生成,
A= 0.9501 0.8913 0.8214 0.9218
0.2311 0.7621 0.4447 0.7382
0.6068 0.4565 0.6154 0.1763
0.4860 0.0185 0.7919 0.4057
B^(-1)= 0.0935 0.0058 0.0139 0.0272
0.0917 0.0353 0.0203 0.0199
0.0410 0.0813 0.0199 0.0015
0.0894 0.0010 0.0604 0.0747
C= 0.4451 0.8462 0.8381 0.8318
0.9318 0.5252
【在 m**********e 的大作中提到】 : 这方程的问题是,未知矩阵包含4个变量,数值计算的时候 : 分解成四个耦合方程,由于右边存在2次项,所以最后这四 : 个方程右边会有几个耦合的2次项,这使得迭代方程存在多 : 个极点,所以实际操作上,要让4个变量同时收敛,初值怎么 : 选择是件非常麻烦的事情 : 迭代法收敛快,精度高.但是初值的选取对最后是否收敛影响 : 巨大,特别是对这种复杂的耦合方程组,除非你大致已经知道 : 解的正确范围,否则基本上没啥用处,纯属浪费时间.
| | | m**********e 发帖数: 12525 | 11 这个看具体情况吧
另外你确定解只有一个?怎么判断有几个解?如果有超过一个解,第二个怎么求?
用一个1维的情况来说明这个经典的不动点问题,看图,你这迭代可以沿1走,也
可以沿2走,一个收敛,一个不收敛,具体就取决你的初值是否在收敛域,另外这
个方法也无法解决多个解的问题(如图上,还有一个解怎么求?)
【在 q*d 的大作中提到】 : 刚才大概试了一下,发现你说的似乎不太对. : 对迭代:Xn+1=-B^(-1)*(A*X^2+C),A,B,C都由matlab随机生成, : A= 0.9501 0.8913 0.8214 0.9218 : 0.2311 0.7621 0.4447 0.7382 : 0.6068 0.4565 0.6154 0.1763 : 0.4860 0.0185 0.7919 0.4057 : B^(-1)= 0.0935 0.0058 0.0139 0.0272 : 0.0917 0.0353 0.0203 0.0199 : 0.0410 0.0813 0.0199 0.0015 : 0.0894 0.0010 0.0604 0.0747
| q*d 发帖数: 22178 | 12 我靠,这种狗啃一样图你是拿脚画的吧?
太不给面子了,我拒绝回答你的问题!
【在 m**********e 的大作中提到】 : 这个看具体情况吧 : 另外你确定解只有一个?怎么判断有几个解?如果有超过一个解,第二个怎么求? : 用一个1维的情况来说明这个经典的不动点问题,看图,你这迭代可以沿1走,也 : 可以沿2走,一个收敛,一个不收敛,具体就取决你的初值是否在收敛域,另外这 : 个方法也无法解决多个解的问题(如图上,还有一个解怎么求?)
| x******i 发帖数: 3022 | 13
恩,少说也有16个解.
【在 m**********e 的大作中提到】 : 这个看具体情况吧 : 另外你确定解只有一个?怎么判断有几个解?如果有超过一个解,第二个怎么求? : 用一个1维的情况来说明这个经典的不动点问题,看图,你这迭代可以沿1走,也 : 可以沿2走,一个收敛,一个不收敛,具体就取决你的初值是否在收敛域,另外这 : 个方法也无法解决多个解的问题(如图上,还有一个解怎么求?)
| f*******8 发帖数: 149 | 14 万分谢谢大家的帮助。
这里
A=[ 1.0000 0 0.1000 0
0.4664 1.4449 1.4241 -0.2185
0.2250 0.1654 1.1701 -0.0250
0 0 0 0]
B=-I
C=[ 0 0 0 0
0.0005 -0.0005 0 -0.0091
0.0017 -0.0015 0 -0.0297
-0.0586 0.0509 0 1.0005]
请问在这种情况下,X的解是什么呢?以及如何求得解的呢?
再次万分感谢! | f*******8 发帖数: 149 | 15 请问qed (鸟瞰红尘),能告诉我你的matlab code吗?
万分感谢!
【在 q*d 的大作中提到】 : 刚才大概试了一下,发现你说的似乎不太对. : 对迭代:Xn+1=-B^(-1)*(A*X^2+C),A,B,C都由matlab随机生成, : A= 0.9501 0.8913 0.8214 0.9218 : 0.2311 0.7621 0.4447 0.7382 : 0.6068 0.4565 0.6154 0.1763 : 0.4860 0.0185 0.7919 0.4057 : B^(-1)= 0.0935 0.0058 0.0139 0.0272 : 0.0917 0.0353 0.0203 0.0199 : 0.0410 0.0813 0.0199 0.0015 : 0.0894 0.0010 0.0604 0.0747
| q*d 发帖数: 22178 | 16 在matlab里输入A,B,C以后,
>> x1=0;
>> for i=1:100
x2=-B^(-1)*(A*x1^2+C);
x1=x2;
end
>> x2
x2 =
0.0168932001720534 -0.0146724813693576 0 -0.28841574243605
0.551762789498471 -0.479295778417119 0 -9.42074873360064
0.144939981452559 -0.125910173019498 0 -2.47522039584557
-0.0586 0.0509 0 1.0005
回代了一下,似乎算是一个解了吧:
>> A*x2^2+B*x2+C
ans =
1.38777878078145e-017 -6.93889390390723e-018
0 -5.55111512312578e-017
【在 f*******8 的大作中提到】 : 请问qed (鸟瞰红尘),能告诉我你的matlab code吗? : 万分感谢!
| f*******8 发帖数: 149 | 17 高手啊!我运行了一下,非常的快!
太开心了!
真是非常非常感谢你!
祝你万事如意!
【在 q*d 的大作中提到】 : 在matlab里输入A,B,C以后, : >> x1=0; : >> for i=1:100 : x2=-B^(-1)*(A*x1^2+C); : x1=x2; : end : >> x2 : x2 = : 0.0168932001720534 -0.0146724813693576 0 -0.28841574243605 : 0.551762789498471 -0.479295778417119 0 -9.42074873360064
| f*******8 发帖数: 149 | 18 不好意思,我又碰到两个新的问题了:
1. 当我用matlab检验是否||B^(-1)*A||<1 & ||B^(-1)*C||<1时,发现
norm(B^(-1)*A)=2.3485>1 & norm(B^(-1)*C)=1.0004>1
这样一来,上诉条件就不符合了,就不收敛了。这与求得的解就矛盾了。
所以请问,||是否代表F norm呢?
如果是,请问到底该用什么条件判断是否收敛呢?
万分感谢!
2. 如果保持B,C不变,但是A变化成为:
A=[ 1.0000 0 -0.1000 0
0.4664 1.4449 -1.4241 -0.2185
0.2250 0.1654 0.8099 -0.0250
0 0 0 0]
那么上述迭代法就无法求得解了。
请问在这种情况下,方程是否有解呢?如果有,该怎样求解呢?
多谢帮助!
【在 q*d 的大作中提到】 : 在matlab里输入A,B,C以后, : >> x1=0; : >> for i=1:100 : x2=-B^(-1)*(A*x1^2+C); : x1=x2; : end : >> x2 : x2 = : 0.0168932001720534 -0.0146724813693576 0 -0.28841574243605 : 0.551762789498471 -0.479295778417119 0 -9.42074873360064
| m**********e 发帖数: 12525 | 19 唉,你真是个crying baby
qed你老再做一次奶爸吧
【在 f*******8 的大作中提到】 : 不好意思,我又碰到两个新的问题了: : 1. 当我用matlab检验是否||B^(-1)*A||<1 & ||B^(-1)*C||<1时,发现 : norm(B^(-1)*A)=2.3485>1 & norm(B^(-1)*C)=1.0004>1 : 这样一来,上诉条件就不符合了,就不收敛了。这与求得的解就矛盾了。 : 所以请问,||是否代表F norm呢? : 如果是,请问到底该用什么条件判断是否收敛呢? : 万分感谢! : 2. 如果保持B,C不变,但是A变化成为: : A=[ 1.0000 0 -0.1000 0 : 0.4664 1.4449 -1.4241 -0.2185
| R*********r 发帖数: 1855 | 20 这种方程一般都是有无穷多个解的。
比方最简单的,A=C=0,B不可逆,方程BX=0有无穷多个解。
A=-C=I,B=0,方程X^2=I也有无穷多个解。 |
|