24小时热门版块排行榜    

查看: 3246  |  回复: 10

mathstudy

金虫 (正式写手)


[交流] matlab 求解线性方程组Ax=b

x=inv(A)*b;和x=A\b;和迭代法  有什么区别? 前面两个求 A逆 的是基于什么?
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

» 抢金币啦!回帖就可以得到:

查看全部散金贴

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

tiancanrong

金虫 (小有名气)



小木虫: 金币+0.5, 给个红包,谢谢回帖
如果你要知道inv(A)*b与Gauss 消元法的区别,就要知道计算机运算和你自己用笔算是有区别的。你用笔算可以用分数,理论上是没有误差的;然而计算机运算时受限于数的精度,理论上是有误差的。所以同样的题目,计算机用不同的算法就是误差或效率会有差别。另外说一句,inv(A)也需要很复杂的计算的,Gauss消去法也需要条件的。当然了,由于现在电脑的软硬件都很先进了,一般的方程随便什么方法解都没区别了。
5楼2014-02-08 22:00:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tiancanrong

金虫 (小有名气)



小木虫: 金币+0.5, 给个红包,谢谢回帖
我大致看了一下matlab help,A\b 根据A的情况用到几种不同的算法,如果A是一个方阵,b是一个列向量,此时Ax=b就是你说的线性方程组,\用的算法就是Gauss消去法;如果A不是方阵,那么Ax=b就是一个矩阵方程,其实这时候精确解不一定存在,matlab中的\就用了最小二乘法的思想求了一个近似的x(也可称为广义解),算法是QR分解。

可以这个简单理解,inv(A)*b是A\b的一种特殊情况(线性方程组时),但是A\b更强大,可以求出广义解。
在计算线性方程组Ax=b时,inv(A)*b和A\b用的数值算法都是Gauss消去法。至于你说的效率,A\b由于考虑的情况比较庞大,调用的时候稍微会慢一点,我不认为有质的区别。
7楼2014-02-09 12:15:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

小木虫: 金币+0.5, 给个红包,谢谢回帖
A=[……],  b=[……],  s=rref([A,b])为佳,如果非满秩,也可知道。
2楼2014-02-07 13:28:11
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

戴钢盔的猪头

木虫 (知名作家)



小木虫: 金币+0.5, 给个红包,谢谢回帖
如果A不是方阵,它的逆是不存在的。这时inv(A)无法用,但可以用广义逆pinv(A)。而A\b何时都可用。

[ 发自手机版 http://muchong.com/3g ]
3楼2014-02-07 17:09:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mathstudy

金虫 (正式写手)


A是可逆方阵, 我想请教的的是  A\b 和 inv(A)*b 中 他们求A逆的 原理 有什么区别, 为什么  A\b比 inv(A)*b 的效率高? 另外  如果是 Gauss 消元法呢?
4楼2014-02-07 19:11:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mathstudy

金虫 (正式写手)


引用回帖:
5楼: Originally posted by tiancanrong at 2014-02-08 22:00:36
如果你要知道inv(A)*b与Gauss 消元法的区别,就要知道计算机运算和你自己用笔算是有区别的。你用笔算可以用分数,理论上是没有误差的;然而计算机运算时受限于数的精度,理论上是有误差的。所以同样的题目,计算机用 ...

那  inv(A)*b与 Gauss 和A\b 三者  在matlab 上面的效率为什么不一样?  他们在 matlab 上的运行方式有什么区别? (比如说 A\b 可能是基于LU 分解而求解方程的)
6楼2014-02-09 08:47:05
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mathstudy

金虫 (正式写手)


引用回帖:
7楼: Originally posted by tiancanrong at 2014-02-09 12:15:12
我大致看了一下matlab help,A\b 根据A的情况用到几种不同的算法,如果A是一个方阵,b是一个列向量,此时Ax=b就是你说的线性方程组,\用的算法就是Gauss消去法;如果A不是方阵,那么Ax=b就是一个矩阵方程,其实这时 ...

谢谢啊.....但是我的运行结果显示  A\b比自己的Gauss程序快很多
8楼2014-02-09 19:33:04
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tiancanrong

金虫 (小有名气)



小木虫: 金币+0.5, 给个红包,谢谢回帖
引用回帖:
8楼: Originally posted by mathstudy at 2014-02-09 19:33:04
谢谢啊.....但是我的运行结果显示  A\b比自己的Gauss程序快很多...

你自己编的Gauss程序,和matlab自带的程序库里的Gauss算法调用的方式应该有区别的,亲儿子当然快一点。另外问一下,你如何测试程序的快慢的?为什么要测试快慢?

[ Last edited by tiancanrong on 2014-2-10 at 12:26 ]
9楼2014-02-10 12:14:12
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

mathstudy

金虫 (正式写手)


引用回帖:
9楼: Originally posted by tiancanrong at 2014-02-10 12:14:12
你自己编的Gauss程序,和matlab自带的程序库里的Gauss算法调用的方式应该有区别的,亲儿子当然快一点。另外问一下,你如何测试程序的快慢的?为什么要测试快慢?
...

好吧  谢过了    测试时间的话 可以用cpu时间啊.  有的时候还是注重算法的快慢的...
10楼2014-02-12 13:43:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

cced_1998

木虫 (小有名气)



小木虫: 金币+0.5, 给个红包,谢谢回帖
It takes almost two and one half times as long to compute the solution with y = inv(A)*b as with z = A\b. Both produce computed solutions with about the same error, 1.e-6, reflecting the condition number of the matrix. But the size of the residuals, obtained by plugging the computed solution back into the original equations, differs by several orders of magnitude. The direct solution produces residuals on the order of the machine accuracy, even though the system is badly conditioned.

The behavior of this example is typical. Using A\b instead of inv(A)*b is two to three times as fast and produces residuals on the order of machine accuracy, relative to the magnitude of the data.
11楼2016-03-31 21:37:38
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 mathstudy 的主题更新
普通表情 高级回复 (可上传附件)
信息提示
请填处理意见