欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

lua官方例程--二分法求解非线性方程组

程序员文章站 2022-03-18 18:13:56
...

二分法

https://baike.baidu.com/item/%E4%BA%8C%E5%88%86%E6%B3%95/1364267?fr=aladdin

--二分法求解非线性方程组

dalta=1e-6 -- 最小区间

function bisect(f,a,b,fa,fb)
    local c=(a+b)/2
    io.write(n," c=",c," a=",a," b=",b,"\n")
    if c==a or c==b or math.abs(a-b)<dalta
    then
        return c,b-a
    end
    n=n+1
    local fc=f(c)
    if(fa*fc<0)
    then
        return bisect(f,a,c,fa,fc)
    else
        return bisect(f,c,b,fc,fb)
    end
end


function solve(f,a,b)
    n=0
    local z,e=bisect(f,a,b,f(a),f(b))
    io.write(string.format("after %d steps, root is %.17g with error %.1e,    \
      f=%.1e\n",n,z,e,f(z)))
end

-- 方程式
function f(x)
	return x*x*x-x-1
end

--f(x)=0在区间[1,2]的解
solve(f,1,2)