find square root using "bisection method"

#quote from MIT 'introduction to computation and programming using python, Revised'
def squareRootBi(x, epsilon):
    """Assumes x and epsilon are positive floats & epsilon < 1
       Returns a y such that y*y is within epsilon of x"""
    low = 0.0
    high = max(1.0, x)
    ans = (high + low)/2.0
    while abs(ans**2 - x) >= epsilon:
        if ans**2 < x:
            low = ans
        else:
            high = ans
        ans = (high + low)/2.0
    return ans


squareRootBi(2.0, 0.001)
Out[104]: 1.4140625

### 回答1: Matlab二分法(Bisection Method)是一种数值计算方法,用于求解方程的根。该方法的基本思路是将函数图像的两侧区域进行二分,不断缩小目标区域的范围,最终获得方程的近似解。在Matlab中,可以使用bisection函数来实现二分法。 ### 回答2: Matlab二分法是一种数值计算方法,用于找到方程的根(或零点)。它是一个迭代算法,在每轮迭代中,将区间(在该区间内由函数跨越零点)分成两个较小的子区间。算法将确定给定两个子区间中是否存在方程的根,并选择一个存在根的子区间作为新的区间,重复此过程,直到达到所需精度。 在Matlab中,使用二分法可以使用函数bisection。此函数接受以下参数: f - 为寻找根的函数句柄 a - 区间左端点 b - 区间右端点 tol - 容差 例如,下面的代码使用二分法求解方程sin(x)-x^2=0在区间[0,1]内的根: f = @(x) sin(x)-x^2; a = 0; b = 1; tol = 1e-6; [root,iter,err] = bisection(f,a,b,tol); 此代码将返回根的值,迭代次数和误差。迭代次数越少,算法就越快。但是,随着迭代次数的增加,误差也会减少。因此,选择适当的容差非常重要。如果容差过大,则可能会导致错误的解决方案。如果容差太小,则算法需要更多的迭代次数才能收敛。 二分法是一种经典的数值计算方法,它可以使用Matlab轻松实现。对于任何需要查找方程根的问题,二分法都是一种可靠的选择,可以在实践中非常有用。 ### 回答3: MATLAB的二分法是一种寻找实函数根的数值方法。在这种方法中,函数的根被定义为使得函数值等于零的点。对于某些函数,解析求解方法可能不存在或太复杂,因此数值方法(如二分法)能够更好地逼近函数的零点。 MATLAB中的二分法始于一个闭合区间[a, b],其中函数值的符号在端点a和b处不同。该方法的基本思想是将区间逐步缩小,直到函数值在某个位置达到所需的精度为止。对于每个区间[a, b],计算区间的中点c = (a + b) / 2,并根据函数值在c处的符号将a和b的值更新为缩小后的区间[a, c]或[c, b]。重复这个过程,直至区间的长度小于所需的精度为止。 MATLAB中的二分法通常使用while循环来实现。以下是一个简单的示例代码: function [root, n] = bisection(f, a, b, tol) % f为函数句柄,a和b为区间的端点,tol为所需的精度 % root为函数的根(即f(root)=0),n为迭代次数 if f(a)*f(b) >= 0 error('区间端点必须具有不同的函数值符号。') end n = 0; while (b-a)/2 > tol c = (a + b)/2; if f(c) == 0 root = c; % 如果中点c同时是函数的根,则直接返回根 return elseif f(c)*f(a) < 0 % 根在[a, c]之间 b = c; else % 根在[c, b]之间 a = c; end n = n + 1; % 迭代次数加1 end root = (a + b)/2; % 根为区间中点 end MATLAB的二分法具有很好的收敛性和简单的实现方式,但也存在一些局限性。例如,如果函数具有多个零点,则这种方法可能只找到其中一个,或者算法可能非常缓慢。因此,选择合适的数值方法需要根据具体的问题和函数特性进行权衡和选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值