【问题标题】:How to get only the positive solution to a quadratic equation using the MATLAB Symbolic Toolbox?如何使用 MATLAB Symbolic Toolbox 仅获得二次方程的正解?
【发布时间】:2014-03-06 18:28:07
【问题描述】:

我想在 Matlab 中解这个方程。

e=2;
while (e<30)
    syms v;
    solve('(v-e) = -(0.5*0.2*1.276*v^2*0.3)');
    e=e+1;
end

当我写例如“solve('(v-10) = -(0.5*0.2*1.276*v^2*0.3)');”有用。但我需要这个等式中的变量“e”。 在某些情况下,这个方程有 2 个解(负解和正解),但我只需要正解。什么是正确的语法?谢谢。

【问题讨论】:

    标签: matlab equation symbolic-math


    【解决方案1】:

    要将e 添加到您的等式中,您可以将其作为一个数字添加到您的等式中:['equation part one', num2str(e), 'end of your equation']

    要只有正解,您可以在方程中添加一个条件 (v&gt;=0)。

    以下是您问题的完整解决方案示例:

    ans = zeros(1,size(2:29,2));
    i = 0;
    syms v;
    for e = 2:29
        i = i+1;
        ans(i) = solve(['(v-',num2str(e),') = -(0.5*0.2*1.276*v^2*0.3) and v>=0']);
    end
    

    【讨论】:

      【解决方案2】:

      除非您使用的是非常旧版本的 Matlab,否则无需使用字符串。这是使用solve的现代和首选方式:

      syms v positive;
      e = 2:29;
      s = zeros(length(e),1);
      for i=1:length(e)
          s(i) = double(solve(v-e(i)==-0.5*0.2*1.276*v^2*0.3,v));
      end
      

      但是,由于这只是一个多项式,您可以使用 roots 函数:

      e = 2:29;
      s = zeros(length(e),1);
      for i=1:length(e)
          r = roots([0.5*0.2*1.276*0.3 1 -e(i)]);
          s(i) = r(r>=0);
      end
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多