掌握PA=LU分解在数值分析中的应用

版权申诉
0 下载量 134 浏览量 更新于2024-10-12 收藏 250KB ZIP 举报
资源摘要信息: "PA=LU.zip_PA的LU分解_数值分析_科学计算" 知识点: 1. 矩阵的PA=LU分解概念: PA=LU分解是指将一个矩阵A分解为一个置换矩阵P、一个下三角矩阵L和一个上三角矩阵U的乘积。这种分解方法在数值分析中非常重要,尤其是在求解线性方程组、计算矩阵的逆以及进行特征值分析时。 2. PA=LU分解的意义与应用: PA=LU分解是高斯消元法的一种变形,其优点是当需要解多个线性方程组,且系数矩阵相同,而右侧常数项不同时,可以通过LU分解一次性计算出解的公共部分,提高重复计算的效率。此外,PA=LU分解还有助于对矩阵的数值稳定性和计算复杂度进行分析。 3. 置换矩阵P的作用: 置换矩阵P的作用是为了保证数值算法的稳定性。在实际的数值计算过程中,为了减少舍入误差的影响,通常会通过置换矩阵P对原矩阵A进行预处理,使得矩阵的某些性质更适于进行数值计算。 4. 下三角矩阵L与上三角矩阵U: 下三角矩阵L和上三角矩阵U的乘积能够恢复原矩阵A的形式,而它们在数学运算中的性质使得矩阵求逆、行列式计算以及线性方程组求解变得更加高效和稳定。 5. 矩阵维数的选择自由性: 在进行PA=LU分解时,可以选择不同的矩阵维数进行操作。这意味着PA=LU分解方法不仅适用于小规模矩阵,同样可以应用在大规模矩阵的计算中,这对于现代科学计算中的大型问题尤为重要。 6. 科学计算中的应用实例: 在科学计算领域,PA=LU分解常用于有限元分析、流体力学、结构工程、数值天气预报等领域。这些领域中的复杂模型往往需要对大规模矩阵进行操作,PA=LU分解提供了一种有效的方法来处理这类问题。 7. 数值分析中的相关概念: 数值分析关注数值计算方法的理论分析和实际应用,其中矩阵分解技术是重要的组成部分。PA=LU分解只是众多数值分析技术中的一种,其他还包括QR分解、奇异值分解(SVD)等。 8. 计算复杂度与数值稳定性: 在选择矩阵分解方法时,需要考虑计算复杂度和数值稳定性两个因素。PA=LU分解的计算复杂度主要取决于矩阵维数,而其数值稳定性则与矩阵的条件数以及分解过程中矩阵元素的排列顺序紧密相关。 9. 软件工具和编程实践: PA=LU分解作为数值计算中的一项基础算法,通常会集成在各种科学计算软件中,如MATLAB、NumPy(Python库)等。在实际编程实践中,开发者可以调用现成的函数库来实现PA=LU分解,从而简化开发过程。 10. 求解线性方程组: 在求解线性方程组Ax=b时,若已知A的PA=LU分解,则可以先解Ly=b,得到y的值,再通过Ux=y来求得x的值,从而高效地得到原方程组的解。这种方法相较于直接求解Ax=b更为高效,尤其当系统方程需要求解多次而A保持不变时。

优化sql:SELECT we.organization_id ,we.wip_entity_id ,case when wl.line_id is null then we.wip_entity_name else '' end wip_entity_name ,we.primary_item_id ,mtt.transaction_type_name ,mmt.transaction_date ,bd.department_code ,mmt.inventory_item_id ,mmt.subinventory_code ,mta.reference_account ,br.resource_code ,lu2.meaning as line_type_name ,mta.base_transaction_value ,mta.cost_element_id ,flv.meaning as cost_element ,wdj.class_code job_type_code ,ml.meaning job_type_name FROM (select * from gerp.mtl_material_transactions where substr(transaction_date,1,7) >= '2023-06' and transaction_source_type_id = 5) mmt inner join gerp.wip_entities we on mmt.organization_id = we.organization_id inner join gerp.mtl_transaction_accounts mta on mta.transaction_source_id = we.wip_entity_id and mta.transaction_id = mmt.transaction_id and mta.transaction_source_type_id = 5 inner join gerp.mtl_transaction_types mtt on mtt.transaction_type_id = mmt.transaction_type_id inner join mfg_lookups lu2 on lu2.lookup_code = mta.accounting_line_type and lu2.lookup_type = 'CST_ACCOUNTING_LINE_TYPE' inner join gerp.mtl_system_items_b msi on msi.inventory_item_id = mmt.inventory_item_id and msi.organization_id = mta.organization_id left join gerp.bom_departments bd on bd.department_id = mmt.department_id left join gerp.bom_resources br on br.resource_id = mta.resource_id left join gerp.wip_lines wl on wl.line_id = mmt.repetitive_line_id left join gerp.wip_discrete_jobs wdj on wdj.wip_entity_id = mta.transaction_source_id left join gerp.fnd_lookup_values_vl flv on cast(mta.cost_element_id as string) = flv.lookup_code and flv.lookup_type = 'CST_COST_CODE_TYPE' left join mfg_lookups ml on ml.lookup_code = wdj.job_type and ml.lookup_type = 'WIP_DISCRETE_JOB' 。其中mmt,we,mta,msi,wdj数据量很大

2023-06-10 上传

class DyCAConv(nn.Module): def __init__(self, inp, oup, kernel_size, stride, reduction=32): super(DyCAConv, self).__init__() self.pool_h = nn.AdaptiveAvgPool2d((None, 1)) self.pool_w = nn.AdaptiveAvgPool2d((1, None)) self.pool_h1 = nn.MaxPool2d((None, 1)) self.pool_w1 = nn.MaxPool2d((1, None)) mip = max(8, inp // reduction) self.conv1 = nn.Conv2d(inp, mip, kernel_size=1, stride=1, padding=0) self.bn1 = nn.BatchNorm2d(mip) self.act = h_swish() self.conv_h = nn.Conv2d(mip, inp, kernel_size=1, stride=1, padding=0) self.conv_w = nn.Conv2d(mip, inp, kernel_size=1, stride=1, padding=0) self.conv = nn.Sequential(nn.Conv2d(inp, oup, kernel_size, padding=kernel_size // 2, stride=stride), nn.BatchNorm2d(oup), nn.SiLU()) self.dynamic_weight_fc = nn.Sequential( nn.Linear(inp, 2), nn.Softmax(dim=1) ) def forward(self, x): identity = x n, c, h, w = x.size() x_h = self.pool_h(x) x_w = self.pool_w(x).permute(0, 1, 3, 2) x_h1 = self.pool_h1(x) x_w1 = self.pool_w1(x).permute(0, 1, 3, 2) y = torch.cat([x_h, x_w, x_h1, x_w1], dim=2) y = self.conv1(y) y = self.bn1(y) y = self.act(y) x_h, x_w, _, _ = torch.split(y, [h, w, h, w], dim=2) x_w = x_w.permute(0, 1, 3, 2) x_w1 = x_w1.permute(0, 1, 3, 2) a_h = self.conv_h(x_h).sigmoid() a_w = self.conv_w(x_w).sigmoid() a_w1 = self.conv_w(x_w1).sigmoid() # Compute dynamic weights x_avg_pool = nn.AdaptiveAvgPool2d(1)(x) x_avg_pool = x_avg_pool.view(x.size(0), -1) dynamic_weights = self.dynamic_weight_fc(x_avg_pool) out = identity * (dynamic_weights[:, 0].view(-1, 1, 1, 1) * a_w + dynamic_weights[:, 1].view(-1, 1, 1, 1) * a_h + dynamic_weights[:, 1].view(-1, 1, 1, 1) * a_w1) return self.conv(out)在里面修改一下,换成这个y = torch.cat([x_h+x_h1, x_w+x_w1], dim=2)

2023-06-01 上传