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)
推荐阅读