在计算二次函数的判别式时,有什么方法可以避免灾难性的抵消?

计算科学 稳定 浮点
2021-12-04 07:33:21

作业免责声明...

任务:

我们正在使用以下算法来求解二次方程x2+2px+q=0

x1=|p|+p2q;

ifp>0thenx1=x1;

x2=q/x1;

指出运行此算法可能会遇到重大问题的两个地方。如何缓解这些问题?

这是我的猜测:第一个地方是:p2q,我们在这里冒着灾难性取消的风险;第二个地方是:q/x1,如果我们得到一个 NaNx10.

第二个似乎很简单:绝对更大的根的唯一方法0是当两个根都0,这意味着p=q=0; 我们可以测试这种情况。

不过,我不知道如何缓解第一个问题。我想不出在不计算判别式的情况下求解二次方程的方法,而计算其判别式确实需要减法。当然,这可能会导致灾难性的取消。

在计算二次函数的判别式时,有什么方法可以避免灾难性的抵消?

编辑:根据评论的要求,将附加信息从答案转移到问题:

哈。关于x1=|p|+p2q. 另一位学生今天争辩说这不是问题:据他说,只有在以下情况下才会发生灾难性取消p2q; 但是之后p2q0而且|p|p2q; 所以判别式本身和计算时引入的任何错误在计算时都失去了意义x1. 教授说他得考虑一下。如果/当他完成思考时,我会在这里发布更新。

但是,还有一个问题我没有注意到。即,如果p很大,那么p2可能溢出;但是之后p2q即使其准确值符合数字格式的范围,也会溢出;所以x1将被虚假设置为. 为了避免这种情况,教授说,p如果它足够大,则需要重新调整。

0个回答
没有发现任何回复~