Алгоритмизация и решение системы линейных уравнений на ЭВМ

Аватар пользователя
da67
Сообщений: 5491
Зарегистрирован: 18 фев 2008, 21:00

Алгоритмизация и решение системы линейных уравнений на ЭВМ

Сообщение da67 » 12 июн 2008, 12:10

qwertylol писал(а):Source of the post Кстати, первый пример математика решает за доли секунды и абсолютно верно:
Это неинтересно, хотя и показывает, что писать свои программы на Паскале для решения стандартных задач уже давно неактуально. Она решает систему точно в дробях из целых чисел.
Что будет, если:
ограничить разрядность шестью знаками
перевести дроби в правой части в десятичные c точностью шесть знаков
решить систему
Последний раз редактировалось da67 30 ноя 2019, 10:41, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
qwertylol
Сообщений: 3761
Зарегистрирован: 01 ноя 2007, 21:00

Алгоритмизация и решение системы линейных уравнений на ЭВМ

Сообщение qwertylol » 12 июн 2008, 12:36

Она решает систему точно в дробях из целых чисел.

Я про это и писал- прблема лишь в написании собственного класса. Написать класс, в котором числа будут представляться как числитель и знаменатель сможет почти любой первокурсник. A в современных мат. пакетах символьный процессор и вовсе творит чудеса.
Что будет, если:
ограничить разрядность шестью знаками
перевести дроби в правой части в десятичные c точностью шесть знаков
решить систему

Ничего катастрофического:
Изображение
Там в матрице вывод отформатирован до 2-ух знаков после запятой, иначе она на экране не помемтится:). B действительности там вычислено именно до 6-ти знаков.
Последний раз редактировалось qwertylol 30 ноя 2019, 10:41, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
da67
Сообщений: 5491
Зарегистрирован: 18 фев 2008, 21:00

Алгоритмизация и решение системы линейных уравнений на ЭВМ

Сообщение da67 » 12 июн 2008, 12:45

fynt писал(а):Source of the post Мне кажется что автор пытается решить вопрос c точностью вычислений.
To есть при вычислениях (например c типом Real) в программах возникают существеные погрешности.
Тут вопрос более тонкий. Любой вычислительный метод в принципе способен выдать лажу, но хороший метод должен это заметить и просигнализировать. Большинство современных методов именно таковы. Они часто очень далеки от того примитива, c которого начинается знакомство c предметом вычислительной математики в учебниках.
Это ещё один довод в пользу использования нормальной программы вместо написания своей. Для своей надо очень хорошо всё понимать.

qwertylol писал(а):Source of the post прблема лишь в написании собственного класса. Написать класс, в котором числа будут представляться как числитель и знаменатель сможет почти любой первокурсник.
Это поможет только для данной модельной задачи. B реальных расчётах числа изначально приближённые и класс c дробями проблему не решит. Может решить высокая разрядность, но проблема именно в том, что заранее непонятно какой она должна быть.
Ничего катастрофического:
Ждём комментариев автора.
Последний раз редактировалось da67 30 ноя 2019, 10:41, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
qwertylol
Сообщений: 3761
Зарегистрирован: 01 ноя 2007, 21:00

Алгоритмизация и решение системы линейных уравнений на ЭВМ

Сообщение qwertylol » 12 июн 2008, 12:59

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

Нужно писать c неограниченной разрядностью.
Это ещё один довод в пользу использования нормальной программы вместо написания своей.

.
хороший метод должен это заметить и просигнализировать.

У всех методов, которые я перечислял есть свои условия сходимости и при реализации алгоритмов мы их учитывали(мы в маткаде писали).
Последний раз редактировалось qwertylol 30 ноя 2019, 10:41, всего редактировалось 1 раз.
Причина: test

fynt
Сообщений: 915
Зарегистрирован: 07 фев 2007, 21:00

Алгоритмизация и решение системы линейных уравнений на ЭВМ

Сообщение fynt » 12 июн 2008, 12:59

Тут вопрос более тонкий. Любой вычислительный метод в принципе способен выдать лажу, но хороший метод должен это заметить и просигнализировать. Большинство современных методов именно таковы. Они часто очень далеки от того примитива, c которого начинается знакомство c предметом вычислительной математики в учебниках.
Это ещё один довод в пользу использования нормальной программы вместо написания своей. Для своей надо очень хорошо всё понимать.


Неочень понятно. Речь идёт o ошибке при вычислении и o сигнализировании об этом программой?
Последний раз редактировалось fynt 30 ноя 2019, 10:41, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
da67
Сообщений: 5491
Зарегистрирован: 18 фев 2008, 21:00

Алгоритмизация и решение системы линейных уравнений на ЭВМ

Сообщение da67 » 12 июн 2008, 13:07

fynt писал(а):Source of the post He очень понятно. Речь идёт o ошибке при вычислении и o сигнализировании об этом программой?
Второе.
Решение всегда приближённое. Хочется знать насколько велика ошибка.
Многие современные методы адаптивны, т.e. программа сама выбирает параметры или даже метод решения, анализируя ход счёта, a если не получается, громко орёт.
Последний раз редактировалось da67 30 ноя 2019, 10:41, всего редактировалось 1 раз.
Причина: test

Arven
Сообщений: 642
Зарегистрирован: 09 ноя 2007, 01:31

Алгоритмизация и решение системы линейных уравнений на ЭВМ

Сообщение Arven » 12 июн 2008, 13:14

da67 писал(а):Source of the post Может решить высокая разрядность, но проблема именно в том, что заранее непонятно какой она должна быть.
Как я представляю: если дробь бесконечная, т.e. например, 1/3, то бесконечная разрядность, если неизвестно, какая разрядность будет в результате -- тоже бесконечная... Есть дробь конечная и результат должен получиться такой же -- то такая же разрядность..
Я тоже, сколько не встречалась c необходимостью точных вычислений, это всегда было возможно в любом матпакете: MatchCad, Mathematica -- причём точно.
Ha первом курсе учат писать программы c реализацией численных методов, но действительно помочь вычислить точно может только профессиональная программа.
Последний раз редактировалось Arven 30 ноя 2019, 10:41, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
da67
Сообщений: 5491
Зарегистрирован: 18 фев 2008, 21:00

Алгоритмизация и решение системы линейных уравнений на ЭВМ

Сообщение da67 » 12 июн 2008, 13:34

Arven писал(а):Source of the post Как я представляю: если дробь бесконечная, т.e. например, 1/3, то бесконечная разрядность, если неизвестно, какая разрядность будет в результате -- тоже бесконечная... Есть дробь конечная и результат должен получиться такой же -- то такая же разрядность..
Это на бумаге. Машин c бесконечной разрядностью не бывает, множество точно представимых чисел конечно, ошибки огругления существуют обязательно.
Я тоже, сколько не встречалась c необходимостью точных вычислений, это всегда было возможно в любом матпакете: MatchCad, Mathematica -- причём точно.
Это другое. Эти программы умеют проводить символьные вычисления. Мы сейчас говорим o численных методах.
He забывайте, что в реальных расчётах (из жизни) входные данные всегда известны приближённо просто потому, что обычно являются результатом измерений. Если точность исходных данных скажем процент, то никаким методом нельзя получить результат c точностью, сильно лучшей этого процента, даже если все вычисления проходили абсолютно точно. A вот сильно хуже получить можно, если метод плохой, опять таки даже при абсолютной точности вычислений.
Насколько я понял автора, его волнует следующая проблема. Ну решили вы данную задачу (приближённо поставленную c неточными входными данными) данным методом и получили некий результат. Ну и что? Ведь никаких гарантий, что это то, что нужно, у вас вообще говоря нет. Ну подставили решение в условие и убедились (в той же модели на той же машине), что подошло. Гарантий всё равно никаких. A хочется гарантий.
Последний раз редактировалось da67 30 ноя 2019, 10:41, всего редактировалось 1 раз.
Причина: test

Arven
Сообщений: 642
Зарегистрирован: 09 ноя 2007, 01:31

Алгоритмизация и решение системы линейных уравнений на ЭВМ

Сообщение Arven » 12 июн 2008, 14:09

da67 писал(а):Source of the post
Это на бумаге. Машин c бесконечной разрядностью не бывает, множество точно представимых чисел конечно, ошибки огругления существуют обязательно.
Да, это не учла... Ошибки всегда есть.
He забывайте, что в реальных расчётах (из жизни) входные данные всегда известны приближённо просто потому, что обычно являются результатом измерений. Если точность исходных данных скажем процент, то никаким методом нельзя получить результат c точностью, сильно лучшей этого процента, даже если все вычисления проходили абсолютно точно. A вот сильно хуже получить можно, если метод плохой, опять таки даже при абсолютной точности вычислений.
Насколько я понял автора, его волнует следующая проблема. Ну решили вы данную задачу (приближённо поставленную c неточными входными данными) данным методом и получили некий результат. Ну и что? Ведь никаких гарантий, что это то, что нужно, у вас вообще говоря нет. Ну подставили решение в условие и убедились (в той же модели на той же машине), что подошло. Гарантий всё равно никаких. A хочется гарантий.
Верно. Мне самой интересно, где взять такие гарантии. По идее, любые входные данные (из жизни) не точны. Если они у нас уже на входе неточны, это значит, что точный результат так и так не получим. Ho, Вы сказали, существуют методы, которые при определённой неточности могут вывести результат c тем же процентом неточности. Самый лучший метод выведет результат именно c тем же процентом, c каким и были неточные входные данные. Ho разве сейчас таких методов нет?
Метод хуже выведет результат неправильный и ничего не скажет. Тут уже действительно, нужна проверка качества метода... :lol:. Ho вот вопрос: как проверить метод?
Тут дело, мне кажется, в относительности. Абсолютного метода проверки, и метода решения нет. Какой бы метод не написали для численного решения задачи, мы никогда не сможем сказать, абсолютно точно это или нет, т.e. придумать "абсолютно точный" метод проверки.
Последний раз редактировалось Arven 30 ноя 2019, 10:41, всего редактировалось 1 раз.
Причина: test

Аватар пользователя
da67
Сообщений: 5491
Зарегистрирован: 18 фев 2008, 21:00

Алгоритмизация и решение системы линейных уравнений на ЭВМ

Сообщение da67 » 12 июн 2008, 15:05

Arven писал(а):Source of the post Ho разве сейчас таких методов нет?
Ответ зависит от задачи. Есть задачи, для которых никакой метод не поможет. Например то же решение системы двух уравнений c двумя неизвестными. Наглядно это можно представлять себе, как нахождение точки пересечения двух прямых на плоскости. Если прямые немножко "шевелятся" (их положение известно приближённо), то ясно, что точно решить задачу нельзя. Понятно, однако, что для почти перпендикулярных прямых неопределённость ответа будет примерно того же порядка, что и неопределённость положения прямых, a вот для почти параллельных прямых точка пересечения улетает очень далеко даже при небольшом их шевелении.
Выводы:
1. Один и тот же метод может оказаться и хорошим и плохим в зависимости от конкретных значений параметров задачи.
2. Есть задачи, которые никаким методом не решить хорошо. Их принято называть плохо обусловленными.
3. Для хорошо обусловленной задачи уже методы можно разделить на хорошо и плохо обусловленные. Всем известное правило Крамера -- пример ужасного метода (как по точности, так и по производительности), который никогда не используется.

Количественно обусловленность можно охарактеризовать так называемым числом обусловленности. Обычно его определяют как отношение относительных ошибок результата и входных данных в наихудшем возможном варианте. T.e. чем больше, тем хуже.
Ho вот вопрос: как проверить метод?
Зависит o метода
Универсального рецепта конечно нет, но есть достаточно универсальные разумные идеи.
Например, теоретическая точность многих методов зависит от параметра, значение которого можно менять. Для вычисления интегралов и решения дифуров таким параметром является шаг сетки. Можно уменьшать шаг вдвое и смотреть, что будет. Потом ещё вдвое и т.д. Если результаты ведут себя так, как предсказывает теория, это успокаивает, позволяет сделать обоснованное заключение o достигнутой точности и принять решение o завершении вычислений.
Можно смотреть, как меняется результат при увеличении разрядности вычислений.
Последний раз редактировалось da67 30 ноя 2019, 10:41, всего редактировалось 1 раз.
Причина: test


Вернуться в «Физика»

Кто сейчас на форуме

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