Цель проста: вывести ненулевое реальное решение x
уравнения с sin(x) = -mx
учетом входных данных m
в наименьшем количестве байтов.
Характеристики:
- Ваш ответ должен быть верным с 3 значащими цифрами.
- Вы можете вывести любое реальное решение, кроме тривиального
x=0
. Можно предположитьm
, что существует хотя бы одно решение. Вы также можете предположитьm!=0
.
Очевидно неоптимальное решение Python с использованием градиентного спуска :
from math import *
from random import *
a=x=0.001
m = 5.
def dE(x):return 2*(sin(x)+m*x+1)*(cos(x)+m)
for i in xrange(1000): x-=dE(x)*a
print x
Контрольные примеры
-0.25 -> ±2.4746
-0.1 -> ±2.8523 or ±7.0682 or ±8.4232
0.2 -> ±4.1046 or ±4.9063
a
решитьsin(x)=-ax
. Пожалуйста, не говорите: «Вы должны на самом деле его вычислить», поскольку подобные требования слишком расплывчаты, чтобы работать.x=0
это тривиальное решение. Вы должны указать, какое решение вы хотите.m=0
есть решения (x=kπ
для целых чиселk
). Значения,m
которые не имеют нетривиальных реальных решений, являются значениями, которые слишком далеки от0
.Ответы:
ised :
3228 байтИспользуя итерацию Ньютона, начиная с π:
Передается аргумент
$1
, который можно взять из файла, например так:Чуть менее стабильная, но более короткая версия:
Иногда он генерирует предупреждения об ограничениях итерации, но точность кажется хорошей, учитывая условия.
Версия Unicode (тот же bytecount):
Начиная с 4 сокращает еще один байт и, кажется, сходятся к тем же значениям
источник
Haskell, 34 байта
Считается
x
с 0 до 0,001 доsin(x)< -m*x
.Ouput примеры
источник
m=-0.1
?2.853
, что выглядит правильно.Mathematica, 28 байт
Ищет числовой корень из первоначальной догадки
x=1
. Тестовые случаи:источник
C, 99 байтов
ungolfed:
источник
MATL , 17 байт
При этом используется линейный поиск по положительной реальной оси, поэтому он медленный. Все тестовые случаи заканчиваются в течение 1 минуты в онлайн-компиляторе.
Попробуйте онлайн!
объяснение
источник
C ++ 11,
9291 байт-1 байт для использования
#import
источник
Python 2,
8178 байтИтерация с фиксированной точкой
Как рекурсивная лямбда
Как цикл (81 байт):
источник
Mathematica, 52 байта
Анонимная функция. Принимает число в качестве ввода и возвращает список номеров в качестве вывода. Просто использует
NSolve
для решения приближенного уравнения.источник
Sin@x==-x#
сSinc@x==-#
вы можете избавиться от~DeleteCases~0.
Аксиома, 364 байта
ungolf
Результаты
источник
Haskell, 50 байтов
Я только что узнал о методе Ньютона в своем классе calc, поэтому здесь
haskell
используется метод Ньютона.f m=foldl(\x _->x-(sin x+m*x)/(cos x+m))0[1..10]
источник