Чуть-чуть математики
От: Аноним  
Дата: 09.05.06 20:38
Оценка:
Я понимаю, что некоторые расценят данную тему в этом форуме как некоторый оффтоп, но всё же...

Значит, задача такая.

Требуется реализовать вычислительную задачу, явно показывающую как погрешность может координальным образом повлиять на результат.
Так вот никаких похожих примеров я найти не смог. Практически во всех случаях погрешность настолько мала и несерьёзна, что на результат она не оказывает никакого действия!

Хелп плз. =)

10.05.06 21:46: Перенесено из 'C/C++. Прикладные вопросы'
Re: Чуть-чуть математики
От: V.I.P. Россия  
Дата: 09.05.06 20:50
Оценка:
Здравствуйте, Аноним,

А чё тут изобретать, возьми моделирование любое, например химико технологического процесс фильтрации, ну или самое примитивное химическую реакцию A+B->C и реализуй расчет изменение концентрации веществ во времени, с помощью метода Эйлера (можно Рунге-Кутта), и увидишь как точность влияет на результат, и на выбор оптимального шага )))
Re[2]: Чуть-чуть математики
От: Аноним  
Дата: 09.05.06 21:10
Оценка:
Здравствуйте, V.I.P., Вы писали:

VIP>Здравствуйте, Аноним,


VIP>А чё тут изобретать, возьми моделирование любое, например химико технологического процесс фильтрации, ну или самое примитивное химическую реакцию A+B->C и реализуй расчет изменение концентрации веществ во времени, с помощью метода Эйлера (можно Рунге-Кутта), и увидишь как точность влияет на результат, и на выбор оптимального шага )))


Блин, дело в том, что надо это реализовать очень срочно.
Можно попросить чуть поподробнее....или сцылочку на какой-нить ресурс.
Буду признателен. =)
Re[3]: Чуть-чуть математики
От: V.I.P. Россия  
Дата: 09.05.06 22:52
Оценка:
Здравствуйте, Аноним, Вы писали:

не, у меня тока готовый проект )) давай майл и может пришлю
Re: Чуть-чуть математики
От: Kostt  
Дата: 10.05.06 04:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Я понимаю, что некоторые расценят данную тему в этом форуме как некоторый оффтоп, но всё же...


А>Значит, задача такая.


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

А>Так вот никаких похожих примеров я найти не смог. Практически во всех случаях погрешность настолько мала и несерьёзна, что на результат она не оказывает никакого действия!

А>Хелп плз. =)


Задачи вычислительной геометрии, например нахождение точки пересечения двух прямых.
Re: Чуть-чуть математики
От: rus blood Россия  
Дата: 10.05.06 07:15
Оценка:
Здравствуйте, Аноним, Вы писали:

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

А>Так вот никаких похожих примеров я найти не смог. Практически во всех случаях погрешность настолько мала и несерьёзна, что на результат она не оказывает никакого действия!

#include <math.h>

int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
    float sum1 = 0.0;
    float sum2 = 0.0;
    float eps = 0.000001;
    int i = 0;

    int N = (int)1.0 / eps;
    for (i = N; i > 0 ; i--)
        sum1 += (1.0 / i);

    for (i = 1; i <= N; i++)
        sum2 += (1.0 / i);

    float S = log(N) + 0.57721566490;

    return 0;
}


Считается сумма гармонического ряда.
В одном порядке и в обратном.
S — реальная сумма ряда...
Имею скафандр — готов путешествовать!
Re: Чуть-чуть математики
От: jhng Россия  
Дата: 10.05.06 07:26
Оценка:
Здравствуйте, Аноним, Вы писали:

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

А>Так вот никаких похожих примеров я найти не смог. Практически во всех случаях погрешность настолько мала и несерьёзна, что на результат она не оказывает никакого действия!

Попробуй рыть в сторону теории бифуркаций. Там как раз есть куча нужных тебе задач.
Re: Чуть-чуть математики
От: Axc  
Дата: 10.05.06 09:17
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Я понимаю, что некоторые расценят данную тему в этом форуме как некоторый оффтоп, но всё же...

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

Любая "некорректная" задача. Самое простое: решение линейной системы, когда определитель матрицы коэффициентов близок к нулю (но не равен). Из-за конечной точности Вы будете получать что угодно, но только не решение.
Re[4]: Чуть-чуть математики
От: Аноним  
Дата: 10.05.06 11:10
Оценка:
Здравствуйте, V.I.P., Вы писали:

VIP>Здравствуйте, Аноним, Вы писали:


VIP>не, у меня тока готовый проект )) давай майл и может пришлю


RSaitov@mail.ru
Re[2]: Чуть-чуть математики
От: dimon0981 США  
Дата: 10.05.06 12:25
Оценка:
Здравствуйте, V.I.P., Вы писали:

VIP>Здравствуйте, Аноним,


VIP>А чё тут изобретать, возьми моделирование любое, например химико технологического процесс фильтрации, ну или самое примитивное химическую реакцию A+B->C и реализуй расчет изменение концентрации веществ во времени, с помощью метода Эйлера (можно Рунге-Кутта), и увидишь как точность влияет на результат, и на выбор оптимального шага )))


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

если avg(i) — среднее для последовательности из i чесел, тогда
avg(N) = (x(1)+x(1)+...+x(N) )/N = (x(1)+x(1)+...+x(N-1)) / N + x(N)/N = (x(1)+x(1)+...+x(N-1)) * (N-1) / (N*(N-1)) + x(N)/N = avg(N-1)*(N-1)/N + x(N)/N
т.е. храним предыдущее среднее, а новое среднее вычисляем по нему и новому x(N).




static double avg;
static int N;

void init( int x ) {
  avg = x;
  N = 1;
}

void new_val( int x ) {
  avg = avg*(N-1)/N + x/N;
  N++;
}


Довольно просто и реально применение имеет.
Re[2]: Чуть-чуть математики
От: Кирпа В.А. Украина  
Дата: 10.05.06 12:38
Оценка:
Здравствуйте, rus blood, Вы писали:

RB>
RB>#include <math.h>

RB>int APIENTRY WinMain(HINSTANCE hInstance,
RB>                     HINSTANCE hPrevInstance,
RB>                     LPSTR     lpCmdLine,
RB>                     int       nCmdShow)
RB>{
RB>    float sum1 = 0.0;
RB>    float sum2 = 0.0;
RB>    float eps = 0.000001;
RB>    int i = 0;

RB>    int N = (int)1.0 / eps;
RB>    for (i = N; i > 0 ; i--)
RB>        sum1 += (1.0 / i);

RB>    for (i = 1; i <= N; i++)
RB>        sum2 += (1.0 / i);

RB>    float S = log(N) + 0.57721566490;

RB>    return 0;
RB>}


RB>Считается сумма гармонического ряда.

RB>В одном порядке и в обратном.
RB>S — реальная сумма ряда...

Имхо немножко неудачный пример
Не хватает значащих разрядов в float представлении
При double все три значения одинаковы
!0xDEAD
Re: Чуть-чуть математики
От: StatujaLeha на правах ИМХО
Дата: 10.05.06 14:13
Оценка:
Здравствуйте, <Аноним>, Вы писали:

А>Я понимаю, что некоторые расценят данную тему в этом форуме как некоторый оффтоп, но всё же...


А>Значит, задача такая.


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

А>Так вот никаких похожих примеров я найти не смог. Практически во всех случаях погрешность настолько мала и несерьёзна, что на результат она не оказывает никакого действия!

А>Хелп плз. =)


Дано ДУ y'' + w^2y = 0 y(0) = 1 y'(0) = 0. Его решение y(x) = Cos(wx). Это решение устойчиво по Ляпунову.
Составим соответствующую систему ДУ 1-го порядка.
y' = z
z' = -w^2y

Проинтегрируем 1-м методом Эйлера.

y(n+1) = y(n) + h*z(n)
z(n+1) = z(n) — h*w^2*y(n)

У этой системы характеристические числа = 1 +/- h*w*i. Их модуль = sqrt(1 + (h*w)^2) = M > 1. И решение y(n) неустойчиво по Ляпунову. Т.е. из-за погрешности при моделировании решения ДУ мы сделали неверный вывод об устойчивости решения.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Чуть-чуть математики
От: Аноним  
Дата: 10.05.06 15:30
Оценка:
КВА>Имхо немножко неудачный пример
IMHO это классический и очень удачный пример!

КВА>Не хватает значащих разрядов в float представлении

Это и есть она — погрешность вычисления. Разве нет?

КВА>При double все три значения одинаковы

Значит надо увеличить N.
(если стало, слишком долго ждать, можно считать sum(1/(N*N)), или куб)


А, собственно, мораль этого примера такова, что от перемены мест слагаемых в реальном мире сумма меняется. Поэтому, там где очень надо, для повышения точности, значения сначала сортируют, а потом ссумируют, начиная с самых маленьких (это если все они неотрицательны).
Это класический пример из курса вычматов.
Re[2]: Чуть-чуть математики
От: CiViLiS Россия  
Дата: 11.05.06 06:13
Оценка: +1
Здравствуйте, Axc, Вы писали:

Axc>Любая "некорректная" задача. Самое простое: решение линейной системы, когда определитель матрицы коэффициентов близок к нулю (но не равен). Из-за конечной точности Вы будете получать что угодно, но только не решение.

Ни фак, ни факт. Для того чтобы решение было похоже на что угодно, только не на правильное, нужно чтобы матрица была плохо обусловлена. Для матрицы где число обусловленности порядка 1e10, без точной арифметики ни какой общий метод не даст хоть сколько нибудь близкое решение.
... << RSDN@Home 1.2.0 alpha rev. 643>>
"Бог не терпит голой сингулярности" -- Роджер Пенроуз
Re[3]: Чуть-чуть математики
От: Axc  
Дата: 11.05.06 06:29
Оценка:
Здравствуйте, CiViLiS, Вы писали:

CVL>Здравствуйте, Axc, Вы писали:


Axc>> решение линейной системы, когда определитель матрицы коэффициентов близок к нулю (но не равен). Из-за конечной точности Вы будете получать что угодно, но только не решение.

CVL>Ни фак, ни факт.

Короче. Конкретно вот такая задача свела с ума Математику в численном режиме:

    {7, 8, 9},
a = {4, 5, 6},
    {1, 2, 3.000000000000001}

b = {1,2,3}

ax = b

Вместо стандартного {~-11/3, ~10/3, ~0), программа выдала: {-1.94444, -0.111111, 1.72222}
Re[4]: Чуть-чуть математики
От: volk  
Дата: 11.05.06 17:32
Оценка:
Здравствуйте, Axc, Вы писали:

Axc>Здравствуйте, CiViLiS, Вы писали:


CVL>>Здравствуйте, Axc, Вы писали:


Axc>>> решение линейной системы, когда определитель матрицы коэффициентов близок к нулю (но не равен). Из-за конечной точности Вы будете получать что угодно, но только не решение.



Совершенно верно, решение плохо обусловленных систем -- самый жизненный и четкий пример влияния погрешности.

Еще чертовски актуальным является решение жестких диф.ур.

Ну или самый банальный и простой в реализации пример -- расчет движения трех гравитирующих тел в пустоте.
Тот, кто желает, но не делает, распространяет чуму.
Re: Чуть-чуть математики
От: GreyJedi  
Дата: 15.05.06 06:19
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Я понимаю, что некоторые расценят данную тему в этом форуме как некоторый оффтоп, но всё же...


А>Значит, задача такая.


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

А>Так вот никаких похожих примеров я найти не смог. Практически во всех случаях погрешность настолько мала и несерьёзна, что на результат она не оказывает никакого действия!

А>Хелп плз. =)


Движение в центральном поле.

Метеорит с большого расстояния движится к земле, отклоняется
полем тяжести и летит дальше.

Здесь даже мальенькая погрешность
в начальных данных приведет в конце концов к большому отклонению
в направлении движения и координатах метеорита.
Re[2]: Чуть-чуть математики
От: volk  
Дата: 17.05.06 19:30
Оценка:
Здравствуйте, GreyJedi, Вы писали:
)

GJ>Движение в центральном поле.


GJ>Метеорит с большого расстояния движится к земле, отклоняется

GJ>полем тяжести и летит дальше.

GJ>Здесь даже мальенькая погрешность

GJ>в начальных данных приведет в конце концов к большому отклонению
GJ>в направлении движения и координатах метеорита.

Усугубим: движение в суперпозиции центральных полей.

Метеорит отклоняется полем Земли и Луны.
Тогда даже бесконечно маленькая погрешность в начальных данных привдет к конечному отклонению траектории.
Тот, кто желает, но не делает, распространяет чуму.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.