1177
两个问题开一贴就好,另一帖帮你挪过来了,
二分法求方程,参考了https://blog.csdn.net/weixin_38277423/article/details/70318293
按你的写法稍微改了一下:
## set a b
a = -10
b = 10
## function f1 f2 f
f = function(x) {return(2 * x ^ 3 - 4 * x ^ 2 + 3 * x - 6)}
## function z
z = function(a, b) {
while (abs(a-b) > 1e-5) {
print (paste(a,b, f(a), f(b)))
mid = (a+b)/2
if (f(mid) * f(a) > 0)
{
a = mid
}
else
{
b = mid
}
}
x = (a + b) /2
return(x)
}
## main
finalx = z(a,b)
message("x is ", finalx)
分别输出了a,b, f(a), f(b):
[1] "-10 10 -2436 1624"
[1] "0 10 -6 1624"
[1] "0 5 -6 159"
[1] "0 2.5 -6 7.75"
[1] "1.25 2.5 -4.59375 7.75"
[1] "1.875 2.5 -1.25390625 7.75"
[1] "1.875 2.1875 -1.25390625 2.35693359375"
[1] "1.875 2.03125 -1.25390625 0.35162353515625"
[1] "1.953125 2.03125 -0.498252868652344 0.35162353515625"
[1] "1.9921875 2.03125 -0.0854501724243164 0.35162353515625"
[1] "1.9921875 2.01171875 -0.0854501724243164 0.130008101463318"
[1] "1.9921875 2.001953125 -0.0854501724243164 0.0215149074792862"
[1] "1.9970703125 2.001953125 -0.0321579482406378 0.0215149074792862"
[1] "1.99951171875 2.001953125 -0.00536918663419783 0.0215149074792862"
[1] "1.99951171875 2.000732421875 -0.00536918663419783 0.00806093294522725"
[1] "1.99951171875 2.0001220703125 -0.00536918663419783 0.00134289265042753"
[1] "1.99981689453125 2.0001220703125 -0.00201389194762669 0.00134289265042753"
[1] "1.99996948242188 2.0001220703125 -0.000335685908851246 0.00134289265042753"
[1] "1.99996948242188 2.00004577636719 -0.000335685908851246 0.00050355680306069"
[1] "1.99996948242188 2.00000762939453 -0.000335685908851246 8.39238055050373e-05"
[1] "1.9999885559082 2.00000762939453 -0.000125883962031281 8.39238055050373e-05"
x is 2.00000286102295
新方程的话换一下f(x)
就行