Практикум j практическое примщенше численных методов



Download 2,15 Mb.
bet53/83
Sana06.07.2022
Hajmi2,15 Mb.
#750238
TuriПрактикум
1   ...   49   50   51   52   53   54   55   56   ...   83
Bog'liq
python

56
mport sympy as sm sm.var(’x у’)
p = sm.Plot(visible=False) p[l] = x**2 + y**2
p[1] .style = ’solid’ p [2] = - x**2 - y**2 p [2].style = ’wireframe’ p.showO
Рис. 3.53 получен как копия экрана (горячая клавиша F8) при установленном пакете Python Imaging Library (PIL)74.
Разреженные матрицы (SciPy.sparse)
Разреженные матрицы, которые характеризуются большим числом нулевых элементов, возникают при численном решении краевых задач для уравне­ний с частными производными. В этом случае при использовании конечно­разностных или конечно-элементных аппроксимаций имеется зависимость ре­шения дискретной задачи только от небольшого числа соседей. Вычисли­тельные алгоритмы линейной алгебры должны учитывать отмеченную спе­цифику разреженных матриц. Здесь мы отметим возможности пакета SciPy (модуль sparse).
В качестве иллюстративного примера рассмотрим разностную задачу Ди­рихле для уравнения Пуассона в единичном квадрате. Функция -н(х), х = (xi,x2), удовлетворяет в П = {х | 0 < ха < 1, а = 1,2 уравнению
д
П


2и д2и дх\ дх2

и однородным граничным условиям
'и(х) = 0, х G дП.
* Для приближенного решения введем равномерную разностную сетку с шагом h (Nh = 1) по каждому направлению. Разностное решение i = 0,1,..., TV, j = 0,1,..., TV определяется как решение сеточной задачи
Vi—ij Уг+ij Ui,j—i yij+1 fi,j> ^ 1,2, ...,7V 1, j 1,2, ...,7V 1,
uid = 0, i = 1,7V, j = 0,7V,
где fid = h2 f(ihy jh).
Сформулируем матричную задачу для определения разностного решения во внутренних узлах сетки. Нумерацию узлов проведем но правилу
j = 1,2,...,7V - 1 : i = 1,2, ...,7V - 1 : vk = yij} к = i + (N - 1 )j.
Общее число неизвестных равно (N — I)2. В представлении
Av b
разреженная матрица имеет диагональную структуру (ненулевые элемет содержат только пять диагоналей). Вместо 0(N4) нужно хранить толь 0(N2) ненулевых элементов.
Для работы с разреженными матрицами используются специальные форм ты хранения матриц. Простейший из них COOrdinate format (С00) связан использованием трех массивов. Первый из них содержит значения ненулевь элементов (aij ф 0), второй — номер строки (г), а третий — номер столб) (г), т.с. храниться тройка (а^-,г, j).
Для выполнения основных операций над разреженными матрицами (слож ние, умножение, транспонирование, решение систем линейных уравнений) б лее удобен разреженный строчный формат — Compressed Sparse Row forma (CSR). В этом случае значения ненулевых элементов и номера столбцов хр нятся по строкам в двух массивах: ац (массив АЛ) и j (массив JA). Трет! массив (обозначим его IA) отвечает за номер строки: его г-й элемент указ] вает, с какой позиции в массивах элементов и столбцов (АА и JA) начинает г-я строка. В силу этого IA(i + 1) - IA(г) есть число элементов в г-й строк
Имеются также варианты разреженного формата для хранения по столбце — Compressed Sparse Column format (CSC), по блокам, для симметричных ленточных матриц. Основные форматы поддерживаются в модуле sparse п кета SciPy.
Первая проблема при работе с разреженными матрицами связана с задание матрицы в нужном формате. Мы можем начать с простейшего способа, к торый связан с заданием матрицы как полной и последующей конвертации нужный формат. Аналогично стандартному массиву для инициализации ра реженной матрицы используется lil\_matrix(), после этого можно задаваг отдельные ненулевые элементы. Для больших матриц нужно ориентирован1 ся на явное задание матрицы в разреженном формате.
Для работы с Compressed Sparse Row форматом в модуле sparse предназначе! класс csr\_matrix(), для Compressed Sparse Column — csc\_matrix(), ДJ DlAgonal format — dia\_matrix(), для COOrdinate format — coo\_matrix().
from scipy import sparse import matplotlib.pyplot as pit import time def poisson_lil(n):
A = sparse.lil_matrix((n*n, n*n)) for j in range(n):
for i in range(n): k = i + n*j A [k, k] = 4
i



Рис. 3.54 Портрет разностного оператора Лапласа

f i
> 0:
A[k,k-1] = -1 if i < n-1:
A[k,k+1] = -1 if j > 0:
A [k,k-n] = -1 if j < n-1:
A[k,k+n] = -1
return A
def poisson_coo(n):

Download 2,15 Mb.

Do'stlaringiz bilan baham:
1   ...   49   50   51   52   53   54   55   56   ...   83




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©hozir.org 2024
ma'muriyatiga murojaat qiling

kiriting | ro'yxatdan o'tish
    Bosh sahifa
юртда тантана
Боғда битган
Бугун юртда
Эшитганлар жилманглар
Эшитмадим деманглар
битган бодомлар
Yangiariq tumani
qitish marakazi
Raqamli texnologiyalar
ilishida muhokamadan
tasdiqqa tavsiya
tavsiya etilgan
iqtisodiyot kafedrasi
steiermarkischen landesregierung
asarlaringizni yuboring
o'zingizning asarlaringizni
Iltimos faqat
faqat o'zingizning
steierm rkischen
landesregierung fachabteilung
rkischen landesregierung
hamshira loyihasi
loyihasi mavsum
faolyatining oqibatlari
asosiy adabiyotlar
fakulteti ahborot
ahborot havfsizligi
havfsizligi kafedrasi
fanidan bo’yicha
fakulteti iqtisodiyot
boshqaruv fakulteti
chiqarishda boshqaruv
ishlab chiqarishda
iqtisodiyot fakultet
multiservis tarmoqlari
fanidan asosiy
Uzbek fanidan
mavzulari potok
asosidagi multiservis
'aliyyil a'ziym
billahil 'aliyyil
illaa billahil
quvvata illaa
falah' deganida
Kompyuter savodxonligi
bo’yicha mustaqil
'alal falah'
Hayya 'alal
'alas soloh
Hayya 'alas
mavsum boyicha


yuklab olish