首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >算法二次方程MATLAB

算法二次方程MATLAB
EN

Stack Overflow用户
提问于 2014-03-14 19:58:01
回答 2查看 1.2K关注 0票数 0

我应该在matlab的代码中加入什么条件,才能用这些公式精确地求出二次型的解:

代码语言:javascript
运行
复制
x1=(-2*c)/(b+sqrt(b^2-4*a*c))
x2=(-2*c)/(b-sqrt(b^2-4*a*c))

直接实现这些公式--在某些情况下,如x^2-1000001x+1,我没有得到正确的解决方案

非常感谢你的帮助

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-03-15 16:59:05

正确的公式集是

代码语言:javascript
运行
复制
w = b+sign(b)*sqrt(b^2-4*a*c)

x1 = -w/(2*a)

x2 = -(2*c)/w

其中符号(B)=1( b>=0 ),符号(B)=-1( b<0 )。

您的公式以及标准公式导致b的一个根中的灾难性取消是很大的wrt。A和c.

如果你想达到极端,你也可以防止在平方根下计算这个术语时的过流和下溢。

假设m表示的最大大小为,如,在浮点表示中指数的最大值,或它们的绝对值的最大值.然后

代码语言:javascript
运行
复制
w = b+sign(b)*m*sqrt( (b/m)*(b/m)-4*(a/m)*(c/m) )

在根下面有一个在-10到10之间的术语。如果这一项为零,那么这并不是由底流引起的。

票数 1
EN

Stack Overflow用户

发布于 2014-03-14 20:11:37

你在处理matlab中的浮点算法,所以精确的解是不能保证的。(也就是说,每一个浮点值都可能导致舍入误差,当你插入原来的二次方程时,它会给出非零的答案)。一个更好的方法来检查你是否在浮点上找到了一个方程的解,那就是使用一个公差,并且检查你的答案的绝对值是否小于公差。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22414609

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档