1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
В общем,я как всегда радую всех,новыми веселыми задачами.Сегодня на повеске дня следующая. Рассчитать стационарное поле температур в пластине заданной формы. Предусмотреть возможность задания произвольных граничных условий (первого рода) и произвольной правой части (в коде программы). ПОРЯДОК РЕШЕНИЯ ЗАДАЧИ: 1. Составить разностную схему “крест” для уравнения Пуассона в области заданной формы. 2. Проанализировать структуру получившейся системы линейных алгебраических уравнений и составить алгоритм расчета температурного поля. 3. Выписать расчетные формулы метода Зейделя и выбрать начальное приближение на основе задания граничного условия. 4. В качестве критерия окончания использовать условие . Предусмотреть подсчет числа итераций, потребовавшихся для достижения точности . 5. Решить задачу методом Зейделя. 6. Решить задачу методом релаксации. Параметр релаксации подобрать экспериментально.
Все фигуры составлены из квадратов с единичной стороной (т.о. вся фигура вписывается в квадрат 3х3). Начало координат выбирается в любом удобном для заданной фигуры месте.
Даааа,планы, как говорится грандиозные,не знаешь, как начинать разгребать. Вот фото самой пластины.
К написанию кода я еще не приступил,нужна помощ в выборе реализации,а именно: 1)Как лучше реализовать хранение данных?одним массивом или как 7 массивов,которые с последствии будут склеиваться,чтоб выполнить пункт 1 задания,в общем,на данный момент я не совсем понимаю как лучше реализовать хранение данных,чтобы ими было удобно в последствии оперировать.
К написанию кода я еще не приступил,нужна помощ в выборе реализации,а именно: 1)Как лучше реализовать хранение данных?одним массивом или как 7 массивов,которые с последствии будут склеиваться,чтоб выполнить пункт 1 задания,в общем,на данный момент я не совсем понимаю как лучше реализовать хранение данных,чтобы ими было удобно в последствии оперировать.
В самом условии задачи содержится прозрачный и весьма недвусмысленный намек на реализацию по частям (по квадратам). Конечно, нужно делать именно так.
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой
Ну просто можно использовать 1 большой массив и те кубики,что не входят в пластину заполнить * например,а можно разбить на 3 (например) фигуры и обрабатывать их отдельно, а потом отдельно просмотреть те точки, что находятся на стыке фигур.Затем я не могу определиться,что лучше использовать либо массивы,тогда проще разбить,либо std:vector,тогда целиком всю фигуру будет проще,но с вектором я знаком весьма посредственно,вполне возможно что его можно инициализировать вообще без лишних элементов....
Ну просто можно использовать 1 большой массив и те кубики,что не входят в пластину заполнить * например,а можно разбить на 3 (например) фигуры и обрабатывать их отдельно, а потом отдельно просмотреть те точки, что находятся на стыке фигур.
В самом условии задачи содержится прозрачный и весьма недвусмысленный намек на реализацию по частям (по квадратам). Конечно, нужно делать именно так.
Цитата
Затем я не могу определиться,что лучше использовать либо массивы,тогда проще разбить,либо std:vector,тогда целиком всю фигуру будет проще,но с вектором я знаком весьма посредственно,вполне возможно что его можно инициализировать вообще без лишних элементов....
Зачем тут векторы?? Не парься. Начини делать.
--------------------
я - ветер, я северный холодный ветер я час расставанья, я год возвращенья домой
Так как не важно, как можно повернуть фигуру и с какой угол(сторону) считать точкой отсчета,я развернул фигуру на 90 градусов против часовой оси и за начало взял верхний левый угол. Но тут возникли некоторые проблемы, если N изменить на 2 или более,то начинается пересчет точек,которые считаться не должны,т.к не хватает 1 данного.
Как видно элементы 0.75(нижний левый) и 2.5(верхний правый) не должны пересчитываться так,как не хватает по 1 числу.Да и в общем то я не совсем уверен,что представление данных в памати компьютера верное и в уравнение Пуассона подставляются именно необходимые элементы.Руками я подставлял и считал для матрици с N=1,там вроде верно,а дальше я не уверен,что будет правильно при других N.
Собственно пришлось вернуться к этой задаче.Нужна помощ в оптимизации,потому что при N=25 (76х76 матрица) время выполнения порядка 20 секунд,а если учесть что оно должно считаться для N=100,я даже боюсь запускать.Файл с кодом прилагается,скажу только то, что все те функции что отдельно описаны для каждой граници и само f должны задаваться отдельно внутри программы.Собственно
Цитата
Предусмотреть возможность задания произвольных граничных условий (первого рода) и произвольной правой части (в коде программы).