Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2009.05.24;
Скачать: CL | DM;

Вниз

Как решить уравнение(если можно)?   Найти похожие ветки 

 
Кое кто   (2009-03-17 19:01) [0]

x^x = a


 
тимохов ©   (2009-03-17 19:03) [1]

методом герона


 
Кое кто   (2009-03-17 19:04) [2]

тимохов ©
А поточнее можно, я уже испробовал многое...


 
тимохов ©   (2009-03-17 19:04) [3]

Вот он
http://ru.wikipedia.org/wiki/%D0%98%D1%82%D0%B5%D1%80%D0%B0%D1%86%D0%B8%D0%BE%D0%BD%D0%BD%D0%B0%D1%8F_%D1%84%D0%BE%D1%80%D0%BC%D1%83%D0%BB%D0%B0_%D0%93%D0%B5%D1%80%D0%BE%D0%BD%D0%B0


 
тимохов ©   (2009-03-17 19:06) [4]

в принципе в виках описан алгорим для любой степени.
главное сходится быстро. но нужно начальное приближение. :)


 
тимохов ©   (2009-03-17 19:06) [5]

а... блин,  :) это x в степени x
а я подумал, что помножить

не пойдет :)


 
Кое кто   (2009-03-17 19:14) [6]

Я пока что думаю, преобразовать его в ln x = ln a (1/x)... А дальше нужно найти пересечение графиков, обвести квадратом эту области и устремить сторону квадрата к нулю, тогда по идеи, мы найдем точку, ну как это математизировать??


 
Игорь Шевченко ©   (2009-03-17 19:31) [7]

с английским у тебя проблемы уже закончились ?


 
DillerXX ©   (2009-03-18 00:04) [8]

Вижу 2 способа:
1) Метод Ньютона
2) Бинарный поиск
Помидорами не кидать.


 
DillerXX ©   (2009-03-19 02:56) [9]

Какого-то хрена, в 2.10 ночи меня дёрнуло написать код этой задачи методом Ньютона :( В результате промучался проблемой начального приближения, но десятичный логарифм оказался кстати. Так вот, сразу выяснил, что программа работает для любых чисел в диапазоне 1..10^30 (и больше), а вот в интервале (0..1) не для всех. Методом мартышки выяснил, что для всех чисел меньших числа 0.6922006275554 x рано или поздно вылетает в x < 0, и на очередной итерации получается бесконечность. С мыслью, а не это ли число искали в "автостопом по галактике", пойду спать.
Вот код, хотя автору вряд ли уже нужно.


#include <algorithm>
#include <iostream>
#include <cmath>

using namespace std;

double EPS = 1E-13;

int main()
{
freopen("input.txt", "rt", stdin);
freopen("output.txt", "wt", stdout);
double a, x0, x1;
cin >> a;
int iters = 0;
x0 = log10(a) + 1;
for (;;)
{
 x1 = x0 - ((pow(x0, x0) - a) / ((log(x0) + 1) * pow(x0, x0)));
 if (abs(x1 - x0) < EPS)
  break;

 ++iters;
 x0 = x1;
 if (iters > 1000000)
 {
  puts("Oh f*ck :(");
  break;
 }
}


printf("Iteration: %d\nanswer: %.15f", iters, x0);

}


 
Eraser ©   (2009-03-19 03:43) [10]

> Как решить уравнение(если можно)?

в среднюю школу запишись.


 
Дуб ©   (2009-03-19 05:50) [11]

> а вот в интервале (0..1) не для всех

И это понятно, достаточно начертить график. Лучше хордами там.


 
Дуб ©   (2009-03-19 05:57) [12]


> Методом мартышки выяснил, что для всех чисел меньших числа
> 0.6922006275554 x рано или поздно вылетает

Методом научного анализа устанавливается, что для чисел меньше 0,692200628 = (1/e)^(1/e) уравнение не имеет решения в положительном действительном диапазоне. В интервале же от этого до 1(не включая 1) имеет по 2 решения.


 
DillerXX ©   (2009-03-19 09:32) [13]


> Методом научного анализа устанавливается, что для чисел
> меньше 0,692200628 = (1/e)^(1/e) уравнение не имеет решения
> в положительном действительном диапазоне. В интервале же
> от этого до 1(не включая 1) имеет по 2 решения.

Спасибо что объяснили! А есть способы не-численного решения, или более быстро-сходящиеся способы?


 
Дуб ©   (2009-03-19 11:19) [14]

>DillerXX ©   (19.03.09 09:32) [13]

В квадратурах скорее всего не существует решения. Но, по хорошему, это доказать надо.

Сходимость хорошая, вычисления не сложные - ускорять смысла нет. Про хорды - это от начального приближения зависит. Для правой части больше 1 начально приближение - любое больше 1. Для меньших одно решение - начальное любое больше 1/е. И тут в обоих случаях сработает Ньютон.
Для второго же решения для меньших 1 - я бы хорды взял. Начальное приближение интервал [0,1/e]. Функцию x^x в 0 замыкаем на 1 и вперед.



Страницы: 1 вся ветка

Текущий архив: 2009.05.24;
Скачать: CL | DM;

Наверх




Память: 0.5 MB
Время: 0.013 c
2-1239101143
SkyN
2009-04-07 14:45
2009.05.24
почему OnIdle перестает вызываться


4-1209885111
angel095
2008-05-04 11:11
2009.05.24
Файловая система фотоаппарата


6-1203280510
Strate
2008-02-17 23:35
2009.05.24
Определение имени процесса, которому пришёл пакет.


2-1239003940
dreamse
2009-04-06 11:45
2009.05.24
Отследить подключение устройства в без оконом приложении


15-1237967909
Rule
2009-03-25 10:58
2009.05.24
Наткнулся на полезную штуку мож кому пригодится,аля файлообменник