Здравствуйте, Axc, Вы писали:
Axc>Любая "некорректная" задача. Самое простое: решение линейной системы, когда определитель матрицы коэффициентов близок к нулю (но не равен). Из-за конечной точности Вы будете получать что угодно, но только не решение.
Ни фак, ни факт. Для того чтобы решение было похоже на что угодно, только не на правильное, нужно чтобы матрица была плохо обусловлена. Для матрицы где число обусловленности порядка 1e10, без точной арифметики ни какой общий метод не даст хоть сколько нибудь близкое решение.
... << RSDN@Home 1.2.0 alpha rev. 643>>
"Бог не терпит голой сингулярности" -- Роджер Пенроуз
Чуть-чуть математики
От:
Аноним
Дата:
09.05.06 20:38
Оценка:
Я понимаю, что некоторые расценят данную тему в этом форуме как некоторый оффтоп, но всё же...
Значит, задача такая.
Требуется реализовать вычислительную задачу, явно показывающую как погрешность может координальным образом повлиять на результат.
Так вот никаких похожих примеров я найти не смог. Практически во всех случаях погрешность настолько мала и несерьёзна, что на результат она не оказывает никакого действия!
Хелп плз. =)
10.05.06 21:46: Перенесено из 'C/C++. Прикладные вопросы'
А чё тут изобретать, возьми моделирование любое, например химико технологического процесс фильтрации, ну или самое примитивное химическую реакцию A+B->C и реализуй расчет изменение концентрации веществ во времени, с помощью метода Эйлера (можно Рунге-Кутта), и увидишь как точность влияет на результат, и на выбор оптимального шага )))
Re[2]: Чуть-чуть математики
От:
Аноним
Дата:
09.05.06 21:10
Оценка:
Здравствуйте, V.I.P., Вы писали:
VIP>Здравствуйте, Аноним,
VIP>А чё тут изобретать, возьми моделирование любое, например химико технологического процесс фильтрации, ну или самое примитивное химическую реакцию A+B->C и реализуй расчет изменение концентрации веществ во времени, с помощью метода Эйлера (можно Рунге-Кутта), и увидишь как точность влияет на результат, и на выбор оптимального шага )))
Блин, дело в том, что надо это реализовать очень срочно.
Можно попросить чуть поподробнее....или сцылочку на какой-нить ресурс.
Буду признателен. =)
Здравствуйте, Аноним, Вы писали:
А>Я понимаю, что некоторые расценят данную тему в этом форуме как некоторый оффтоп, но всё же...
А>Значит, задача такая.
А>Требуется реализовать вычислительную задачу, явно показывающую как погрешность может координальным образом повлиять на результат. А>Так вот никаких похожих примеров я найти не смог. Практически во всех случаях погрешность настолько мала и несерьёзна, что на результат она не оказывает никакого действия!
А>Хелп плз. =)
Задачи вычислительной геометрии, например нахождение точки пересечения двух прямых.
Здравствуйте, Аноним, Вы писали:
А>Требуется реализовать вычислительную задачу, явно показывающую как погрешность может координальным образом повлиять на результат. А>Так вот никаких похожих примеров я найти не смог. Практически во всех случаях погрешность настолько мала и несерьёзна, что на результат она не оказывает никакого действия!
#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[4]: Чуть-чуть математики
От:
Аноним
Дата:
10.05.06 11:10
Оценка:
Здравствуйте, V.I.P., Вы писали:
VIP>Здравствуйте, Аноним, Вы писали:
VIP>не, у меня тока готовый проект )) давай майл и может пришлю
Здравствуйте, 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++;
}
Здравствуйте, <Аноним>, Вы писали:
А>Я понимаю, что некоторые расценят данную тему в этом форуме как некоторый оффтоп, но всё же...
А>Значит, задача такая.
А>Требуется реализовать вычислительную задачу, явно показывающую как погрешность может координальным образом повлиять на результат. А>Так вот никаких похожих примеров я найти не смог. Практически во всех случаях погрешность настолько мала и несерьёзна, что на результат она не оказывает никакого действия!
А>Хелп плз. =)
Дано ДУ 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)), или куб)
А, собственно, мораль этого примера такова, что от перемены мест слагаемых в реальном мире сумма меняется. Поэтому, там где очень надо, для повышения точности, значения сначала сортируют, а потом ссумируют, начиная с самых маленьких (это если все они неотрицательны).
Это класический пример из курса вычматов.
Здравствуйте, 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}
Здравствуйте, Axc, Вы писали:
Axc>Здравствуйте, CiViLiS, Вы писали:
CVL>>Здравствуйте, Axc, Вы писали:
Axc>>> решение линейной системы, когда определитель матрицы коэффициентов близок к нулю (но не равен). Из-за конечной точности Вы будете получать что угодно, но только не решение.
Совершенно верно, решение плохо обусловленных систем -- самый жизненный и четкий пример влияния погрешности.
Еще чертовски актуальным является решение жестких диф.ур.
Ну или самый банальный и простой в реализации пример -- расчет движения трех гравитирующих тел в пустоте.
Тот, кто желает, но не делает, распространяет чуму.
Здравствуйте, Аноним, Вы писали:
А>Я понимаю, что некоторые расценят данную тему в этом форуме как некоторый оффтоп, но всё же...
А>Значит, задача такая.
А>Требуется реализовать вычислительную задачу, явно показывающую как погрешность может координальным образом повлиять на результат. А>Так вот никаких похожих примеров я найти не смог. Практически во всех случаях погрешность настолько мала и несерьёзна, что на результат она не оказывает никакого действия!
А>Хелп плз. =)
Движение в центральном поле.
Метеорит с большого расстояния движится к земле, отклоняется
полем тяжести и летит дальше.
Здесь даже мальенькая погрешность
в начальных данных приведет в конце концов к большому отклонению
в направлении движения и координатах метеорита.
Здравствуйте, GreyJedi, Вы писали:
)
GJ>Движение в центральном поле.
GJ>Метеорит с большого расстояния движится к земле, отклоняется GJ>полем тяжести и летит дальше.
GJ>Здесь даже мальенькая погрешность GJ>в начальных данных приведет в конце концов к большому отклонению GJ>в направлении движения и координатах метеорита.
Усугубим: движение в суперпозиции центральных полей.
Метеорит отклоняется полем Земли и Луны.
Тогда даже бесконечно маленькая погрешность в начальных данных привдет к конечному отклонению траектории.
Тот, кто желает, но не делает, распространяет чуму.