我有一个要点,我想为此点画一个最合适的双曲函数。
现在,我要进行质量检查。有任何想法吗?
我的想法是检查该功能的关键所在。 (就像该点位于函数上方/下方或上方)
处方函数为: fn(x)= A1 +(A2 / A3 *(x + A4))
我的第一个想法是:
function checkQuality($points,$m,$k,$A1,$A4){
$over = 0;
$under= 0;
$on = 0;
$radius = 3;
foreach ($points as $point){
$status = ($A1+($m/($k*($point['x']+$A4)))-$point['y']);
if($status < $radius && $status > -$radius){
$status = 0;
}
if($status > 0){
$over++;
}else if($status <1 && $status >= 0){
$on++;
}else if($status < 0){
$under++;
}
}
if($under < $over){
$percentChange = ($under !== 0 ? ($under / $over) : 0) * 100;
}else{
$percentChange = ($over !== 0 ? ($over / $under) : 0) * 100;
}
return ['on'=>$on,'over'=>$over,'under'=>$under,'percent'=>$percentChange];
}
但是结果不是很准确。
在这里,我发布它的外观。绿色曲线是手动设置的,蓝色曲线是手动设置的(我正在使用质量检查来检查效果是否良好,如果不好则尝试生成更好的曲线)->绿色曲线比蓝色更好。
< / p>
(输入中的值为绿色曲线)
下面是我使用质量检查的代码,以想象为什么我想要拥有最准确的检查器:
for($i = 0; $i < 10000 ; $i++){
$new_m += 0.2;
$actual = $this->checkQuality($points['points'],$new_m,$ob['k'],0,0);
if($actual['percent'] > $prev['percent']){
$prev['percent'] = $actual['percent'];
$prev['m'] = $new_m;
$newQuality = $actual;
}else if($i>0 && $actual['percent'] < $prev['percent']){
break;
}
}