题目
题目意思大概就是有个函数 y = f ( x ) y=f(x) y=f(x) ,这是个黑盒,你可以输入不同的 x x x,得到不同的 y y y,让你猜测这个函数的具体实现是什么。
一种解法
写了个脚本,用来调用这个可执行文件(Linux下),然后把对应的输出都保存下来,然后用matlab的曲线拟合工具把曲线拟合一下,碰巧它是个四次函数,刚好可以尝试出来。
脚本文件如下:
#!/bin/bash
num=1
for((i=1;i<=1000;i++));
do
j=$(echo "$num*0.0+$i*0.001"|bc)
# let "num=num + add"
echo "0"$j
cnt="0"$j
# echo $cnt>>text
res=$( echo $j |./guess_linux )
echo $res
echo $res>>text
done
生成的一个text文件再用matlab拟合处理一下,就能得到结果了:
导入的函数输出作为
y
y
y,输入的
x
x
x自己生成,精度问题可以用format long
进行修改。
matlab代码为:
x=[0.001:0.001:1-0.001]';
p = polyfit(x,y,4);
format long; %
p = polyfit(x,y,4)
最后得到的结果为:
p =
40.371003775805335 -36.819007325548235 0.378004705631987 0.385498803011400 3.052100096002883
脚本和生成的text文件放在这里:我的github仓库
最后通过率是98%,大概是没有处理边界为1时后的异常,或者精度不够的问题。