Tanh: примеры (PHP)
tanh(float num): floatФункция tanh() в PHP вычисляет гиперболический тангенс числа. Эта математическая функция часто применяется в областях, связанных с нейронными сетями, машинным обучением, статистикой и обработкой сигналов, где требуется нормализация данных в диапазон от -1 до 1.
Функция принимает один обязательный аргумент:
- $num (число типа float) - значение, для которого вычисляется гиперболический тангенс. Аргумент может быть положительным или отрицательным числом.
Функция всегда возвращает значение типа float в диапазоне от -1 до 1.
echo tanh(2.5);0.98661429815143
echo tanh(-1.8);-0.94680601284627
echo tanh(0);0
var_dump(tanh(5));float(0.9999092042626)
В PHP есть несколько математических функций для вычисления гиперболических величин:
- sinh() - вычисляет гиперболический синус.
- cosh() - вычисляет гиперболический косинус.
- atanh() - вычисляет обратный гиперболический тангенс (артангенс).
Функции sinh() и cosh() применяются в аналогичных математических расчетах. atanh() выполняет обратное преобразование для tanh(). Выбор функции зависит от конкретной математической задачи.
import math
print(math.tanh(2.5))0.98661429815143
console.log(Math.tanh(2.5));0.98661429815143
SELECT TANH(2.5);0.98661429815143
#include <iostream>
#include <cmath>
int main() {
std::cout << tanh(2.5);
}0.98661429815143
Во всех перечисленных языках функция работает аналогично PHP, принимая один числовой аргумент.
echo tanh('текст');Warning: tanh() expects parameter 1 to be float, string given
$result = tanh(10);
// Неправильно
if ($result == 1) {
echo 'Максимум';
}
// Лучше использовать сравнение с учетом погрешности
if (abs($result - 1) < 0.00001) {
echo 'Максимум';
}Максимум
Также важно помнить, что функция возвращает приближенное значение, поэтому прямое сравнение чисел с плавающей точкой может давать неожиданные результаты.
Функция tanh() не претерпела значительных изменений в последних основных версиях PHP. В PHP 8.0 улучшена согласованность типов для математических функций, но сигнатура и поведение tanh() остались прежними.
function normalize($value, $min, $max) {
$scaled = 2 * (($value - $min) / ($max - $min)) - 1;
return tanh($scaled);
}
$data = [10, 20, 30, 40, 50];
$normalized = array_map(fn($val) => normalize($val, 10, 50), $data);
print_r($normalized);Array
(
[0] => -0.99932929973907
[1] => -0.96402758007582
[2] => 0
[3] => 0.96402758007582
[4] => 0.99932929973907
)class Neuron {
private $weights;
private $bias;
public function __construct($weights, $bias) {
$this->weights = $weights;
$this->bias = $bias;
}
public function activate($inputs) {
$sum = $this->bias;
foreach ($inputs as $i => $value) {
$sum += $value * $this->weights[$i];
}
return tanh($sum);
}
}
$neuron = new Neuron([0.5, -0.3, 0.8], 0.1);
$output = $neuron->activate([1.0, 0.5, -0.7]);
echo $output;0.32063719831209
function tanh_derivative($x) {
$tanh_x = tanh($x);
return 1 - pow($tanh_x, 2);
}
echo tanh_derivative(0.5);0.78644773296593
for ($x = -3; $x <= 3; $x += 0.5) {
$y = tanh($x);
echo sprintf("x=%.1f, y=%.4f", $x, $y) . "\n";
}x=-3.0, y=-0.9951 x=-2.5, y=-0.9866 x=-2.0, y=-0.9640 x=-1.5, y=-0.9051 x=-1.0, y=-0.7616 x=-0.5, y=-0.4621 x=0.0, y=0.0000 x=0.5, y=0.4621 x=1.0, y=0.7616 x=1.5, y=0.9051 x=2.0, y=0.9640 x=2.5, y=0.9866 x=3.0, y=0.9951