-2

我得到了这个方程,我被要求创建一个程序,其中的解决方案

a*(x^2) + b*x +c = 0

是这样给出的:

1) 如果 D > 0,则 2 个解决方案是:

x1 = (-b -sqrt(D))/2a and x2= (-b+ sqrt(D))/2a

2)如果 D = 0 , 1 '双'解决方案':

x1 = -b/2a

3)如果D < 0,无真解

其中 D 线性判别式 = b^2 - 4*a*

我完全不知道要尝试什么,我唯一做的就是尝试定义 D:

 `D <- b^2 - 4*a*c`

但我得到一个错误

Error: object 'b' not found.

任何帮助将不胜感激。

4

1 回答 1

0

这将起作用:

# calculate the real root(s) of a quadratic polynomial
# coefficients of which are given as aa, bb and cc
quadratic_roots <- function(aa = 1, bb = 2, cc = 1)
{
    # calculate the discriminant
    disc <- bb^2 - 4 * aa * cc

    if (disc == 0) # if1, single root
    {
        return(-bb / (2 * aa))
    }   
    else
    {
        if (disc > 0) # if2, two roots
        {
            root1 <- (-bb - sqrt(disc)) / (2 * aa)
            root2 <- (-bb + sqrt(disc)) / (2 * aa)
            return(c(root1, root2))

        }
        else # no real roots, return NA
        {
            return(NA)
        }   
    }   
}

请注意,r-base 有一个内置的 polyroot,但它会自动返回复杂的根,因此无法满足您的目的。

以及为什么我使用 aa、bb 和 cc 而不是 a、b 和 c:

因为“c”与一个非常重要的内置函数不谋而合。对自定义对象名称使用内置函数名称并不是一个好习惯。

于 2017-12-03T14:16:57.593 回答