2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3
 
 Re: Развиваю ли я навык программирования?
Сообщение29.12.2018, 17:23 
Заслуженный участник
Аватара пользователя


30/01/06
72407
sinx в сообщении #1364511 писал(а):
Программная функция это не просто "взял - отдал"?

Да.

Лучше думать про функции как про подпрограммы. "Зашёл - поблуждал - вышел" (или не вышел). С побочными эффектами, практически всегда.

 Профиль  
                  
 
 Re: Развиваю ли я навык программирования?
Сообщение29.12.2018, 19:06 
Заслуженный участник


09/05/12
25179

(Оффтоп)

worm2 в сообщении #1364559 писал(а):
У меня получился дискриминант $-9.44082049505282898612829111552\cdot10^{-30}$, так что, вроде бы, должен быть один корень.
А ведь да, с бесконечной арифметикой действительно получается так, тут я недоглядел. Фактически числа в условии - это округленные машинные представления, и тут это тоже влияет на результат.

Правда, задача от этого легче не стала. :-)

 Профиль  
                  
 
 Re: Развиваю ли я навык программирования?
Сообщение29.12.2018, 19:46 


15/11/15
1081

(Оффтоп)

Munin в сообщении #1364500 писал(а):
Зверь! Альфа не берёт! Признавайтесь, какой правильный ответ :-)

Maple берет:

Maple 2016 писал(а):
eq := x^3-3.703703672022243*x^2+4.572473630050348*x-1.881676374871372;

solve(eq, x);

1.234576284, 1.234563694 + 0.000007268919916 I, 1.234563694 - 0.000007268919916 I

 Профиль  
                  
 
 Re: Развиваю ли я навык программирования?
Сообщение30.12.2018, 14:44 
Аватара пользователя


26/05/12
1700
приходит весна?
Обозначим:

$a = 3.703703672022243$

$b = 4.572473630050348$

$c = 1.881676374871372$

Можно заметить что $3b=a^2$ и $27c=a^3$ с относительной точностью $2^{-52}$. Таким образом можно считать, что с точностью до погрешностей округления чисел с плавающей запятой представленное на рассмотрение выражение является точным кубом. Стандартные процедуры поиска корней не рассчитаны на вылавливание последних значащих бит мантиссы числа с плавающей запятой, поэтому они частенько промахиваются. Например, предлагают пару комплексных корней там, где должна быть пара совпадающих действительных корней.

В качестве решения предлагаю считать число $a/3=1.234567890674081$. Видно, что автор нарочно взял числа "один", "два", "три" и так далее, остаётся вопрос, что означают числа "674081"?

Pphantom в сообщении #1364510 писал(а):
Там три вещественных корня, причем два из них отличаются в 14-м знаке.
Изображение

 Профиль  
                  
 
 Re: Развиваю ли я навык программирования?
Сообщение30.12.2018, 16:01 
Аватара пользователя


26/05/12
1700
приходит весна?
Я тут подумал и понял, о 14-ом знаке не может быть и речи. Ошибка на величину $2^{-52}$ в числе $b$ приведёт к ошибке на величину $\sqrt{{{2}^{-52}}}={{2}^{-26}}\approx 1.5\cdot {{10}^{-8}}$ в значении одно или нескольких корней, а ведь именно с такой точностью вычислялось число $b$. Поскольку тут целых три корня сгруппировались в кучку, то дела будут скорее всего ещё хуже. Наверняка утверждать не возьмусь, поскольку это требует дополнительного исследования.

 Профиль  
                  
 
 Re: Развиваю ли я навык программирования?
Сообщение30.12.2018, 16:27 
Заслуженный участник
Аватара пользователя


30/01/06
72407
B@R5uk в сообщении #1364772 писал(а):
Можно заметить что $3b=a^2$ и $27c=a^3$ с относительной точностью $2^{-52}$.

А если с неограниченной точностью? Как выглядит уравнение при замене $x'=x-a/3$?

 Профиль  
                  
 
 Re: Развиваю ли я навык программирования?
Сообщение30.12.2018, 18:25 
Аватара пользователя


26/05/12
1700
приходит весна?
Munin в сообщении #1364794 писал(а):
Как выглядит уравнение при замене $x'=x-a/3$?
Как-то так:
$$x'^3+b'x'+c'=0$$
с такими коэффициентами, если я с расчётами не накосячил:
$$b'=\frac{848'517'695'583'683}{1'000'000'000'000'000'000'000'000'000'000}\approx 8.48517695583683\cdot 10^{-16}$$
$$c'=\frac{295'660'285'773'761'832'165'204'873'441}{500'000'000'000'000'000'000'000'000'000'000'000'000'000'000}\approx 5.913205715475236\cdot 10^{-16}$$

Кстати, если считать "честно" в плавающей арифметике, то $b'$ оказывается равным $-8.8818\cdot 10^{-16}$, то есть не особо сильно промахивается относительно точного счёта, а $c'$ в точности равно нулю.

 Профиль  
                  
 
 Re: Развиваю ли я навык программирования?
Сообщение30.12.2018, 18:28 
Заслуженный участник


09/05/12
25179
B@R5uk в сообщении #1364784 писал(а):
Я тут подумал и понял, о 14-ом знаке не может быть и речи. Ошибка на величину $2^{-52}$ в числе $b$ приведёт к ошибке на величину $\sqrt{{{2}^{-52}}}={{2}^{-26}}\approx 1.5\cdot {{10}^{-8}}$ в значении одно или нескольких корней, а ведь именно с такой точностью вычислялось число $b$. Поскольку тут целых три корня сгруппировались в кучку, то дела будут скорее всего ещё хуже.
Да, по-видимому, Вы правы. Ну я уже писал, что перестарался с попыткой довести задачу до "предела", не проверив прямое решение.

 Профиль  
                  
 
 Re: Развиваю ли я навык программирования?
Сообщение30.12.2018, 18:42 
Аватара пользователя


26/05/12
1700
приходит весна?
Тут проблема даже не в том, что задача доведена до предела, а в том, что уравнение имеет повторяющиеся корни. Сам этот факт очень сильно портит ситуацию. Представьте себе, что у вас есть обычная кубическая парабола $y=x^3$. Вы сдвигаете её вверх или вниз на величину $10^{-15}$, на сколько изменится координата точки пересечения этой параболы с осью абсцисс? Очевидно, надо вычислить кубический корень из смещения. Получится $10^{-5}$. То есть ошибка на величину $10^{-15}$ у свободного члена кубического многочлена приводит при к ошибке на величину $10^{-5}$ у его корней, если эти корни совпадают. Вот к таким гадостям приводит зануление первых производных функции.

А на счёт плавающей арфиметики показателен график изучаемого многочлена в области его корня:

Изображение

Посчитан с несмещёнными коэффициентами.

 Профиль  
                  
 
 Re: Развиваю ли я навык программирования?
Сообщение30.12.2018, 20:54 
Заслуженный участник


09/05/12
25179
B@R5uk в сообщении #1364821 писал(а):
Тут проблема даже не в том, что задача доведена до предела, а в том, что уравнение имеет повторяющиеся корни. Сам этот факт очень сильно портит ситуацию.
Естественно, иначе все было бы неинтересно.

 Профиль  
                  
 
 Навык программирования
Сообщение31.12.2018, 09:22 
Аватара пользователя


10/10/18
754
At Home
Навык программирования вполне поможет развить RoboZZle.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 41 ]  На страницу Пред.  1, 2, 3

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group