【问题标题】:MATLAB solve() returns array for linear equationMATLAB solve() 返回线性方程的数组
【发布时间】:2016-03-26 06:18:50
【问题描述】:

我在 MATLAB 中有以下等式:
eqn1 = (1-t)*x1 + t*x2 == x; where x1,y1 = <some_constant_value>
我将方程求解为:
t1 = double(solve(subs(eqn1,x,min(x_arr(i,:))),t)); 并进行比较:

if(t1 >= 0 & t1 <= 1)
    crossing = 1;
    return
end

但是,我有时会收到以下错误:
|| 的操作数和 && 运算符必须可转换为逻辑标量值。
根据我在其他论坛/答案中发现的信息,这是因为 &amp;&amp;|| 无法处理数组,因此会出现错误。但是,考虑到我正在求解一个线性方程,为什么 MATLAB 会返回一个数组?

编辑
抱歉,我忘了给变量初始化:
syms x y t
x1 as double
x2 as double
y1 as doubley2 as double
x_arr as double
y_arr as double

【问题讨论】:

  • 如何初始化 x1 和 y1 以及求解返回什么?也许没有返回解决方案?
  • 请贴出实际代码,我们可以测试一下。
  • 这仍然不足以让我们重现问题(请参阅MCVE。如果我不得不猜测,也许solve 找到了多个解决方案?也许您可以将您的if 测试修改为根据您的应用程序使用allany 函数...
  • @Amro 这是一个自给自足的函数,独立于其余代码运行。实际代码太大,无法在这里重现,所以我认为这已经足够了。感谢您为解决这个问题付出的时间和精力。
  • 好吧,您始终可以通过在该行放置一个断点来调试它,并且肯定知道 :) 我们没有完整的代码,所以只有您可以做到。 MATLAB 也有一个选项来中断错误dbstop if error,它可以方便地调试错误。

标签: matlab logical-operators symbolic-math equation-solving


【解决方案1】:

我通过将if 条件拆分为以 hacky 的方式使其工作:

if(t1 >= 0)
    if(t1 <= 1)
        crossing = 1;
        return
    end
end

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-03-15
    • 1970-01-01
    • 2016-10-14
    相关资源
    最近更新 更多