【问题标题】:handle unknown number of variables in Matlab or Mathematica在 Matlab 或 Mathematica 中处理未知数量的变量
【发布时间】:2018-12-07 02:12:49
【问题描述】:

我有一个算法可以为任何给定的 n 生成一个 n × n 矩阵 A。我的目标是使用 Matlab 或 Mathematica 找到线性方程组 Ax=0 的所有解。我先试试Matlab。

尝试 1:我不能使用“linsolve”,因为 A 可能是单数。我想要所有的解决方案。

尝试 2:使用solve(eqns, vars, 'ReturnConditions', true)。但是,如何将 Ax 变成方程形式?似乎我需要一个 for 循环来将方程放入“eqns”,但是如何定义符号变量 x1、x2、...、xn?一开始我不知道 n 的值。这是我的伪代码:

read (n);    
for i=1:n %% i_th equation
       eq=[];
       for j=1:n
         eq=eq+A[i,j]*x[j]; %% keep adding terms
       end
       eq=eq+['==0']; %% add '==0' to make it an equation
       eqns=eqns+eq %% add the ith equation to the equation list
 end
 vars=[];
 for i=1:n 
     vars=vars+x[i];
 end
 solve(eqns, vars, 'ReturnConditions', true)

你能帮忙把它变成真正的 Matlab 或 Mathematica 代码吗?

【问题讨论】:

    标签: matlab variables wolfram-mathematica symbols


    【解决方案1】:

    Matlab 是为线性代数设计的,所以 A*x=0 是一个方程,有一个、多个或没有向量 x 作为解。

    Matlab 的问题在于,它有很多方法可以为您提供一个 解决方案,但不能提供所有 解决方案。 线性系统Ax=b 的解通常使用x = b\A(其中x 将在所有解中具有最小的L0 范数,即最少的非零分量)或x=pinv(A)*b(其中x 将具有最小的L2 范数)获得在所有解决方案中)。请参阅 pinv documentation

    但在这种特定情况下 b=0 ,两者都会给出简单的解决方案 x=0

    现在,寻找x 的值使得A*x=0 只不过是寻找矩阵A 的内核。而 Matlab null 函数就是这样做的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-15
      • 2013-02-24
      • 2023-03-08
      • 2013-09-27
      • 2023-03-31
      • 1970-01-01
      • 2021-09-30
      • 2012-02-22
      相关资源
      最近更新 更多