Matlab二次方程

时间:2016-01-16 15:10:00

标签: matlab quadratic

使用MATLAB二次方程式挣扎。我不断得到一个复杂的数字,因为我的答案和其他错误不断发生。

  

编写一个MATLAB函数,用于求解形式的二次方程   a*x^2 + b*x + c = 0

     

您的函数的语法应采用

形式
[quadRoots1,quadRoots2] = Q1_quadratic (a,b,c);
     

其中abc是二次系数;而quadRoots1quadRoots2是两个确定的根源。对于仅存在一个根的情况(例如,当a=1b=2c=1时),您应该将第二个输出设置为NaN(而不是数字)。如果没有根,则将两个输出都设置为NaN

1 个答案:

答案 0 :(得分:1)

请务必检查quadratic formula中根签名下的数字是否为:

  • 正面(>0):两个截然不同的真实根,
  • 等于零(==0):单个实数编号的简并根(或者更确切地说,是两个非不同的根)。
  • 否定(<0:你的根很复杂(回忆sqrt(-1) = iour imaginary unit i)。从你的问题规范的声音来看,你似乎要把复杂看作是“没有根”

您可以使用Q1_quadratic(...)条款检查函数if-elseif-else中的上述情况,例如:

function [quadRoots1, quadRoots2] = Q1_quadratic(a, b, c)

  d = b^2 - 4*a*c; % your number under the root sign in quad. formula

  % real numbered distinct roots?
  if d > 0
    quadRoots1 = (-b+sqrt(d))/(2*a);
    quadRoots2 = (-b-sqrt(d))/(2*a);
  % real numbered degenerate root?
  elseif d == 0 
    quadRoots1 = -b/(2*a);
    quadRoots2 = NaN;
  % complex roots, return NaN, NaN
  else
    quadRoots1 = NaN;
    quadRoots2 = NaN;
  end    
end

测试:

% distinct real roots: expects [2, -8]
[a, b] = Q1_quadratic(1, 6, -16)
    % OK!

% degenerate real root: expects [-1, NaN]
[a, b] = Q1_quadratic(1, 2, 1)
    % OK!

% complex roots: expects [NaN, NaN]
[a, b] = Q1_quadratic(2, 2, 1)
    % OK!