当前位置:  开发笔记 > 编程语言 > 正文

如何解决不一致的系统?

如何解决《如何解决不一致的系统?》经验,为你挑选了1个好方法。

我是MATLAB的新手,我想用它来解决Ax = b系统问题.我在纸上做了这个,知道我想知道它是否正确.问题是它是一个不一致的系统.

A=sym([3/sqrt(29) 3/sqrt(29) -1 0 0 0; 
1 -1 0 0 0 0; 
4/sqrt(29) 4/sqrt(29) 0 0 0 0; 
0 0 1 9/sqrt(101) 0 0; 
0 0 0 2/sqrt(101) -1/sqrt(5) 1/sqrt(5);
0 0 0 4/sqrt(101) 2/sqrt(5) 2/sqrt(5)])

c=sym([0 0 -a 0 0 -a])

当我尝试找到解决方案:

A/c

我明白了:

Warning: The system is inconsistent. Solution does not exist. 

我在互联网上找到了很多关于这个的主题,但是没有解决方案.这是否意味着MATLAB无法处理它或者是否有办法获得解决方案?



1> rayryeng - R..:

遗憾的是,该系统未得到妥善解决.您需要使用ldivide(\)运算符,而不是rdivide(/).做A/c等同于A*c^{-1},这不是你想要的.要解决系统的解决方案,您必须做A^{-1}*c或等效A\c.此外,为了确保您获得正确的解决方案,c需要是列向量,而不是行向量.我还假设这a是一个未在当前代码中声明的常量.

因此:

syms a; %// Added

A=sym([3/sqrt(29) 3/sqrt(29) -1 0 0 0; 
1 -1 0 0 0 0; 
4/sqrt(29) 4/sqrt(29) 0 0 0 0; 
0 0 1 9/sqrt(101) 0 0; 
0 0 0 2/sqrt(101) -1/sqrt(5) 1/sqrt(5);
0 0 0 4/sqrt(101) 2/sqrt(5) 2/sqrt(5)]);

c=sym([0 0 -a 0 0 -a]).'; %// Change

out = A\c;

我明白了:

out =

   -(29^(1/2)*a)/8
   -(29^(1/2)*a)/8
          -(3*a)/4
  (101^(1/2)*a)/12
    -(5^(1/2)*a)/4
 -(5*5^(1/2)*a)/12

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有