Java – найти нулевые точки с рекурсией – XNUMX Ответа

WTF — это энергия нулевой точки и как она может изменить мир?

Энергия никогда не перестанет беспокоить людей, пока наш вид планирует продолжать расти и расширяться. Нет недостатка в ученых и инженерах, пытающихся найти решения, которые могли бы помочь нам избежать катастрофической нехватки энергии. Некоторые из этих идей кажутся вполне осуществимыми, например, переход на возобновляемые источники энергии, такие как ветер и солнечная энергия. Некоторые из них невероятно надуманные и, вероятно, невозможные, например, холодный синтез. А еще есть некоторые совершенно безумные идеи, но если они верны, они могут существенно изменить все, что мы знаем и любим о человеческой цивилизации.

Энергия нулевой точки, также известная как энергия основного состояния, может стать величайшим подарком, который квантовый мир может когда-либо преподнести нам. Это побочный продукт того факта, что субатомные частицы на самом деле ведут себя не как отдельные частицы, а как волны, постоянно порхающие между различными энергетическими состояниями. Это означает, что даже кажущийся пустым космический вакуум на самом деле является бурлящим морем виртуальных частиц, которые то появляются, то исчезают, и все эти колебания требуют энергии.

Если бы в этих флуктуациях было так много энергии, как считают некоторые — хотя определенно не все — физики, и если бы мы когда-нибудь научились использовать это явление, мы бы получили доступ к беспрецедентному источнику энергии. Энергия нулевой точки может снабдить планету силой нескольких солнц, что позволит нам навсегда решить энергетические проблемы Земли или отправиться за пределы Солнечной системы и занять свое место среди звезд.

Однако мы можем только догадываться, сколько энергии на самом деле содержится в вакууме, а легендарные физики по этому поводу расходятся во мнениях. Ричард Фейнман и Джон Уилер подсчитали, что нулевая радиация вакуума была настолько мощной, что даже небольшой ее чашки было бы достаточно, чтобы вскипятить все земные океаны. Но общая теория относительности Альберта Эйнштейна предполагает, что нулевое излучение будет «притягиваться» — распространяться по всей Вселенной и уменьшаться до слабой мощности.

Читайте также:
Лак или полиуретан для столешницы? | Одержимый деревообработкой

Проще говоря, мы недостаточно знаем о Вселенной, чтобы выяснить, действительно ли энергия нулевой точки — энергия вакуума — является напыщенным фонтаном ошеломляющей силы.

Давайте предположим, что энергия вакуума реальна, и она впечатляюща, и мы, возможно, когда-нибудь научимся использовать ее для получения энергии. Как бы это выглядело и что мы могли бы с этим сделать?

Возможно, самым очевидным применением будет сверхбыстрый космический полет — такой, который позволит вам пересечь Солнечную систему всего за несколько часов или минут. Ученые НАСА занимались разработкой аккумуляторов и двигателей, которые теоретически могли бы производить гигантское количество энергии, используя энергетическую систему с нулевой точкой, основанную на понятии квантовой механики, называемом эффектом Казимира. Этот эффект невелик, но если есть способ наблюдать и вмешиваться в эти очень мелкие силы, они могут работать как потенциальный источник энергии, позволяющий космическим кораблям двигаться в космосе.

Было много разных групп, которые выдвигали разные идеи, но, возможно, наиболее разумные результаты были сделаны лабораториями NASA Eagleworks Laboratories, которые утверждают, что успешно испытали квантовый вакуумный плазменный двигатель. Этот «Q-двигатель», как показано в исследовании, прошедшем экспертную оценку в прошлом году, использует эффект Казимира для создания движения. В таком устройстве тяга создается с помощью частиц, отталкивающихся от вакуума. Тем не менее, не совсем ясно, может ли это работать в реальных, применимых условиях — и авторы статьи не могут игнорировать опасения по поводу экспериментальных ошибок. Потребуется еще много испытаний и раундов проверки, чтобы действительно проиллюстрировать жизнеспособность Q-двигателя.

Немного странно думать, что спустя столетия после того, как идея «эфира», проникающего в мир, была развенчана, физики пришли к выводу, что, возможно, существует универсальная энергия, застрявшая в пустом пространстве повсюду. Было бы здорово обнаружить, что мы хватаемся за этот вакуум за невообразимое количество энергии.

Но пока все это довольно далеко от досягаемости человечества. В обозримом будущем, вероятно, лучше продолжать делать ставку на солнечную и ветровую энергию как на приемлемые источники энергии, не так ли?

Читайте также:
Как распознать сковороду из нержавеющей стали высшего качества - CRISTEL USA

Найдите нулевые точки с помощью рекурсии

Я хочу найти нулевые точки синусоидальной функции. Параметр представляет собой интервал [a,b]. У меня есть к этому похожее на бинарный поиск.

Реализуйте функцию, которая ищет нулевые точки в функции синуса в интервале между a и b. Интервал поиска [нижний предел, верхний предел] следует уменьшать вдвое до тех пор, пока нижний предел и верхний предел не будут отличаться друг от друга менее чем на 0.0001.

Это дает мне много ошибок в строке с вернуть нулевую точку (середина, b);

На первом этапе я хочу найти только первую нулевую точку в интервале.

Возможно, вам следует использовать одно и то же имя для всех применений переменной, которая в настоящее время называется попеременно middle и mitte?

Кроме того, вы дважды вызываете Math.sin. Это дорогая функция, и было бы неплохо объединить вызовы в один.

Кроме того, вы никогда не получите Math.sin() == 0. Это значение double и double почти никогда не сравнится с 0. Сравните его как abs(Math.sin(mitte)) < 0.0001

@Владимир, ну упражнение говорит до тех пор, пока нижний предел и верхний предел не будут отличаться друг от друга менее чем на 0.0001 поэтому я бы прекратил рекурсию, когда ba < 0.0001 . (Смотрите мой ответ.)

8 ответов 8

Фундаментальные проблемы, которые все упускают из виду:

  • мы не всегда хотим возвращать результат (представьте, что мы находим нулевые точки синусоидальной функции между pi/4 и 3pi/4, их нет).
  • в любом произвольном диапазоне диапазонов может быть несколько нулей.

Очевидно, что необходим (возможно, пустой) набор значений.

Итак, псевдокод функции на самом деле запрошено (не используя Java, так как это домашнее задание):

@aepryus: «в пределах некоторого небольшого предела» просто означает, что вы не можете проверить ровно ноль, потому что природа двойного числа означает, что вам повезет попасть в точку, где sin(middle) точно равен 0.00000000000000.

Да, но есть способ обойти это. По сути, нужно просто посмотреть, пересекает ли функция ось x в пределах интервала, что не требует проверки допуска.

Читайте также:
Как класть плиты: 8 шагов (с иллюстрациями) - wikiHow

Просто сказать «это дает мне ошибки» не очень полезно. Какие ошибки? Компилировать ошибки или необработанные исключения во время выполнения?

Для вашего кода две вещи выделяются как возможные проблемы:

  1. переменная mitte нигде не объявлена.
  2. вы используете > и < для сравнения реалов. Хотя это само по себе нормально, лучше проверять 0 с помощью допуска вместо того, чтобы полагаться на < и >, чтобы избежать проблем из-за точности с плавающей запятой. Для всех практических целей -0.000000000001 равно 0.

Могут быть и другие проблемы, я просто записал те, которые выскочили на первый взгляд.

По-видимому, митте произошло из-за ошибки при вставке кода ОП (и с тех пор было исправлено). Как указывалось в других ответах, код попадает в бесконечную рекурсию. Это связано с тем, что вызовы рекурсии находятся на неправильных интервалах.

Следует отметить, что функция sin может монотонно возрастать для одного выбора a и b и монотонно уменьшаться для некоторого другого интервала. Например, он увеличивается на [0,pi/2] и уменьшается на [pi/2,3*pi/2]. Таким образом, рекурсивные вызовы должны быть изменены в соответствии с исходным интервалом, в котором выполняется поиск. Для одного интервала Math.sin(middle)

Я запускаю этот код из командной строки, все, что он говорит, это «в Aufg3.nullstelle (Aufg3.java: 18), это повторяется 1 раз

@ArtWorkAD: Похоже, возникает исключение переполнения стека. Скорее всего, это связано с тем, что у вас обратная логика (т. е. поиск [a, middle] вместо [middle, b] и наоборот), как уже указывалось в других ответах. Ваша функция никогда не сходится к ответу, а попадает в бесконечную рекурсию. Я на самом деле удивлен, что он вообще компилируется. Переменная mitte никогда не объявляется. Или вы уже исправили это и разместили более старую версию кода?

Я предполагаю, что вы получаете ошибки переполнения стека во время выполнения. Знаки < и >меняются местами. Кроме того, вы должны использовать .0001, а не 0 для сравнения.

Редактировать 1: На самом деле, у вашего основного алгоритма есть проблемы. Что произойдет, если в интервале больше одного нуля? Что произойдет, если sin(a) и sin(mitte) будут иметь один и тот же знак? Что произойдет, если в интервале нет нулей?

Читайте также:
Посадка луковиц осенью для получения удивительных весенних цветов - Gingham Gardens

Редактировать 2: Хорошо, поэтому я решил проблему, и, по сути, ваше решение проблематично; Я бы попытался начать думать, как решить эту проблему.

Основная проблема заключается в том, что в интервале может быть несколько нулей, и вы пытаетесь найти каждый из них. Создание функции, возвращающей тип double, может вернуть только одно решение. Таким образом, вместо того, чтобы создавать функцию для возврата значения double, просто верните значение void и распечатайте нули по мере их нахождения.

Еще одна подсказка: вы должны продолжать поиск, пока a и b не окажутся в пределах 0001 друг от друга. Ваше окончательное решение не будет использовать .0001 каким-либо другим образом. (То есть, ваша проверка, чтобы увидеть, нашли ли вы ноль, не должна использовать допуск 0001 и не будет точно использовать 0. Подумайте о том, как вы действительно узнаете, нашли ли вы ноль, когда abs(ab) меньше 0001. .

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: