【计算方法】三角分解法(线性方程组的求解)

本文介绍了如何利用LU分解法解决线性方程组,通过前向替代法求解Y,然后用回代法求解X。详细阐述了算法步骤,并提供了样例输入和输出。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
接着我们联立AX=B,A=LU可得到LUX=B;到这里我们假设UX=Y,则原式又转变为LY=B。到这里我们需要逆向思维进行求解,我们采用前向替代法解的Y,然后对UX=Y采用回代法也就是求解上三角线性方程组的方法进行求解,最终解的X。
回代法在之前blog写过了,这里不再赘述。
前向替代法其实就是将回代法反过来用。

A=LU的分解

在这里插入图片描述

例题

【问题描述】为求解一个线性方程组,首先采用偏序选主元策略的三角分解法构造矩阵L,U和P,再用前向替换法对方程组LY=PB求解Y,最后用回代法对方程组UX=Y求解X。
【输入形式】在屏幕上依次输入方阵阶数n,系数矩阵A和常数矩阵B。
【输出形式】先输出LU分解结果,再输出方程解。如果系数矩阵A是奇异矩阵,输出: error
【样例1输入】
4
1 2 4 1
2 8 6 4
3 10 8 6
4 12 10 6
21
52
79
82
【样例1输出】
1 0 0 0
0.5 1 0 0
0.25 -0.5 1 0
0.75 0.5 0 1
4 12 10 6
0 2 1 1
0 0 2 0
0 0 0 3
1
2
3
4
【样例1说明】
输入:第1行为方阵阶数4,第2行至5行为系数矩阵A,第6行至9行为常数矩阵B。
输出:第1至第4行输出矩阵L,第5至第8行输出矩阵U,最后4行依次输出方程解:x1, x2, x3, x4。
【评分标准】根据输入得到的输出准确

ACcode:

/*
 * @Author: csc
 * @Date: 2021-04-02 21:12:17
 * @LastEditTime: 2021-04-09 12:45:20
 * @LastEditors: Please set LastEditors
 * @Description: In User Settings Edit
 * @FilePath: \code_formal\course\cal\sanjiaofenjie.cpp
 */
#include <iostream>
#include <vector>
#include <iomanip>
#include <algorithm>
#define pr printf
#define sc scanf
#define sf(n) scanf("%d", &n)
#define sff(n1, n2) scanf("%d %d", &n1, &n2)
#define sfff(n1, n2, n3) scanf("%d %d %d", &n1, &n2, &n3)
#define sl(n) scanf("%lld", &n)
#define sll(n1, n2) scanf("%lld %lld", &n1, &n2)
#define slll(n1, n2, n3) scanf("%lld %lld %lld", &n1, &n2, &n3)
#define for0(i, n) for (i = 0; i < n; i++)
#define for1n(i, n) for (i = 1; i <= n; i++)
#define foran(i, a, n) for (i = a; i <= n; i++)
#define forna(i, a, n) for (i = n; i >= a; i--)
#define pb push_back
#define fi first
#define se second
#define int long long
#define endl '\n'
#define mem(ara, n) memset(ara, n, sizeof(ara))
#define memb(ara) memset(ara, 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值