在matlab中增强二次方程的鲁棒性

在matlab中增强二次方程的鲁棒性,matlab,Matlab,任务是在matlab中编写一个代码来求解二次方程 我的代码在下面 a=input('a= '); b=input('b= '); c=input('c= '); if a==0 x=double(-c/b); disp(x) else discriminant=b.^2-4*a*c; if discriminant<0 error('Roots are not real') else e=sqrt(discrim

任务是在matlab中编写一个代码来求解二次方程

我的代码在下面

a=input('a=  ');
b=input('b=  ');
c=input('c=  ');
if a==0
    x=double(-c/b);
    disp(x)
else
    discriminant=b.^2-4*a*c;
    if discriminant<0
        error('Roots are not real')
    else
        e=sqrt(discriminant);
        x1=double((-b+e)/(2*a));
        x2=double((-b-e)/(2*a));
    end
end

disp(x1)
disp(x2)
a=input('a=');
b=输入('b=');
c=输入('c=');
如果a==0
x=双(-c/b);
显示(x)
其他的
判别式=b.^2-4*a*c;

如果判别式假设我有一个2位整数的变量。现在,对于我的变量,我只能保留2^2作为我的最大值。让我们来看看2位是如何计数的:

0 0 (add 1) --> 0 1
0 1 (add 1) --> 1 0
1 0 (add 1) --> 1 1
1 1 (add 1) --> 0 0
它返回到
0 0
,因为我没有足够的位来保存我的号码,所以它重新开始。这称为溢出。下溢的情况与此类似,只是它返回到最大值。对于matlab,位数可以更大,如32位或64位。那么,当你得到一个非常大的数字输入并对其进行数学运算时,会发生什么呢?它会因为位用完而溢出吗?还是下溢

仅供参考:如果你不懂二进制,你应该在维基上快速浏览一下以获得帮助,因为任何计算机语言中的所有数字都将表示为位,但幸运的是,我们处理的是十进制值


还有,这里有些人挥手。

当编程中的值开始占用额外和意外的内存单元时,会发生溢出/下溢。在这种情况下,程序运行时会出现运行时错误,或者有时会自动关闭以防止对系统造成损害。为了避免这种严重的情况,在需要时,应该管理程序退出或返回坏值函数或坏代码执行。当然,这应该使用if else命令、returnbreakwhile循环来完成

p、 你的程序仍然有一个缺陷。当a=b=0和c时,它会发生故障=0我将您的代码转换为MATLAB中的一个函数(现在可以在命令窗口中调用),并添加了一个MAX_值以避免变量越界

这是密码

function x=quadroots(a,b,c,MAX_VALUE)
if nargin == 3
    MAX_VALUE=1e50;
end
if abs(a)>MAX_VALUE||abs(b)>MAX_VALUE||abs(c)>MAX_VALUE
    error('Out of bound variables')
end
if a==0 && b~=0
    x=double(-c/b);
    disp(x)
elseif a==0 && b==0 && c==0
    error('0=0')
elseif a==0 && b==0 && c~=0
    error('Infeasible solutions')
else
    discriminant=b.^2-4*a*c;
    if discriminant<0
        error('Roots are not real')
    else
        e=sqrt(discriminant);
        x(1)=double((-b+e)/(2*a));
        x(2)=double((-b-e)/(2*a));
    end
end
end
函数x=quadroots(a、b、c、MAX_值)
如果nargin==3
最大值=1e50;
终止
如果abs(a)>最大值| | abs(b)>最大值| | abs(c)>最大值
错误('越界变量')
终止
如果a==0&&b~=0
x=双(-c/b);
显示(x)
如果a==0&&b==0&&c==0
错误('0=0')
如果a==0&&b==0&&c~=0
错误('不可行的解决方案')
其他的
判别式=b.^2-4*a*c;
if判别式