使用MATLAB二次方程式挣扎。我不断得到一个复杂的数字,因为我的答案和其他错误不断发生。
编写一个MATLAB函数,用于求解形式的二次方程
a*x^2 + b*x + c = 0
您的函数的语法应采用
形式[quadRoots1,quadRoots2] = Q1_quadratic (a,b,c);
其中
a
,b
和c
是二次系数;而quadRoots1
和quadRoots2
是两个确定的根源。对于仅存在一个根的情况(例如,当a=1
,b=2
和c=1
时),您应该将第二个输出设置为NaN
(而不是数字)。如果没有根,则将两个输出都设置为NaN
。
答案 0 :(得分:1)
请务必检查quadratic formula中根签名下的数字是否为:
>0
):两个截然不同的真实根,==0
):单个实数编号的简并根(或者更确切地说,是两个非不同的根)。<0
:你的根很复杂(回忆sqrt(-1) = i
,our 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!