Проверьте, где находится точка против функции - PullRequest
0 голосов
/ 21 февраля 2019


У меня есть точки, и я хочу нарисовать гиперболическую функцию для этих точек наилучшим образом.
Теперь я хочу сделать проверку качества.Есть идеи?
Моя идея состояла в том, чтобы проверить, где находится точка против функции.(Например, если точка находится над / под или над функцией)
Функция предписания: 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];
}

Но результат не так точен.

Здесь я публикую, как это выглядит.Зеленая кривая установлена ​​вручную, и генерируется синяя (где я использую проверку качества, чтобы проверить, насколько хорошо, а если плохо, попробуйте создать лучшую кривую) -> Зеленая кривая лучше, чем синяя

Graph screen

(значения на входах указаны для зеленой кривой)


вот код, где я использую проверку качествавообразите, почему я хочу иметь максимально точную проверку:

  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;
        }
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...