【问题标题】:How do I solve this specific type of linear system?如何解决这种特定类型的线性系统?
【发布时间】:2014-03-12 16:07:49
【问题描述】:

我在求解线性方程组以获得 X 时遇到了麻烦。

看起来像这样;

A* ([4;0] + X*([4; 3] - [4;0])) = B

给定A = [-1 0; 0 -1; 1 1]B = [0; 0; 5]

我期待的解决方案是,最大的 X 可能是 1/3。换句话说,X 是一个满足条件的标量。

【问题讨论】:

  • 你得到什么答案?你期待什么答案?你能把代码和散文分开吗? AT
  • “A 和 B 的实际实例以及您预期的 T(或 X)会澄清一些事情。
  • ([4;0] + X*([4; 3] - [4;0]))?对?这不是简化为[4;3*X]吗?
  • 正是这样!但是我将如何在matlab中做到这一点?如何找到满足 =B 约束的 X 的最大值?
  • 据我所见,你无法得到任何正好 = B 的东西,但你可以找到 X 的最大值,它使所有 A* ([4;0] + X*([4; 3] - [4;0])) 都小于 B - 就是这样你想要什么?

标签: matlab system linear-algebra


【解决方案1】:

如果您有符号工具箱,您可以执行以下操作:

A = [-1 0; 0 -1; 1 1];
B = [0;0;5];
syms X positive;

test = A*([4;0] + X*([4; 3] - [4;0]))-B;

solve(test<0,X);

这将为您提供一个范围 (0, 1/3),其中 test&lt;0 为真。或者在这种情况下,您只需解决 test(3)==0 即可获得确切答案。

否则,您可以编写一个函数来评估您的条件是否满足:

F = @(X)all(A*([4;0]+X*([4;3]-[4;0]))<B)

然后编写一些代码来手动评估不同 X 的 F(X),直到达到 X 最大值的某个阈值。

【讨论】:

  • 很遗憾,我无法访问该工具箱。由于 X 可以采用十进制值,我该如何使它以有效的方式循环?
  • 通常你会做一些事情,比如从一个给定的范围和一个步骤开始(比如 0.1 步骤中的 0 到 1),找到大约发生交叉的位置(例如,0.3 可以工作而 0.4 不会),然后然后以较小的步长检查该范围(以 0.01 步长从 0.3 到 0.4),依此类推,直到您的步长值低于您设置的某个阈值。
猜你喜欢
  • 1970-01-01
  • 2013-08-25
  • 1970-01-01
  • 2017-03-26
  • 2020-09-18
  • 2017-01-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多