QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2629|回复: 0
打印 上一主题 下一主题

采用高斯消元法解线性方程组

[复制链接]
字体大小: 正常 放大

1189

主题

4

听众

2934

积分

该用户从未签到

跳转到指定楼层
1#
发表于 2023-12-31 16:27 |只看该作者 |倒序浏览
|招呼Ta 关注Ta
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:
/ {8 ]! _" I1 |+ k+ X8 q5 c
  p" [: H- K+ \8 y/ C1.矩阵初始化:4 b1 w# R. W  z& \8 d
6 x7 N' Q$ x! y8 f8 J
   a1=[2,-2,5;2,3,1;-1,4,1];
: @& C1 ?: j- u7 t# ^) H   b=[6,13,3]';
% b( w1 B2 B/ P! P1 H   n=length(b); % 方程组大小为 n
$ M2 V& A, k$ M2 j; a# H   a=zeros(n,n+1);
1 U8 o7 @7 ?& S5 t# w& t   a(:,1:n)=a1;
( F* |0 @7 a" A5 {  I   a(1:n,n+1)=b; % 增广矩阵
) G% I+ t. a: {" d
9 ~' `5 H8 Y2 b这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。
9 z. B: [* X0 R) G2 r, L6 E
5 U; t: Y; h- T2.高斯消元过程:
) }& o) \7 A$ q
8 v( ~/ s( _  V" C   for i=1:n-1
7 r' C! i" Y$ v       % 确保主对角线元素不为09 L9 m% p. q5 D9 `1 ~. ?# G. S
       if(a(i:n,i)==0)
5 T" q7 g+ A! J: y; h          error('方程组没有唯一解'); 0 B" P% C9 i6 T8 V1 s
       end1 W% R5 k- G' }2 U: m4 B/ h
       % 选取主对角线元素不为0的行
# X) |+ O: m$ p       for p=i:n
- A# x; ~; x$ ~# P$ I3 U) V- \           if(a(p,i)~=0)7 v9 k6 |0 c( L% O
               p;
4 r! t, }) e) q4 ]! t2 B/ F$ b0 Q+ K, U               break;
) V  U* O; `1 X' z2 i" o$ a. G/ {           end: q6 V" a, A! m1 j8 r- ]: q
       end
* a' u  _8 f# M# w$ D3 h% n       % 如果选取的行不是当前行,则交换两行
( L+ v. c# `7 a       if(p~=i)5 ]+ h, O7 i" l! m" q
         t=a(i,;7 I, D# ?' |/ F+ t1 ~* Q2 v
         a(i,=a(p,;# G3 F0 M. a* L! v+ e
         a(p,=t;# }' k9 Z8 e+ O# N
       end* ]# s' }% m- D, {
       % 高斯消元4 |6 ^0 t% e! f4 t8 i  X0 e
       for j=i+1:n, A, F- X& l+ B# H) _
           a(j,i)=a(j,i)/a(i,i);0 K  k: a8 L' z; ?' }0 ~, \
           a(j,=a(j,-a(j,i)*a(i,;
$ w3 U7 o& B. Q: M       end
6 a) v+ d  Q) _- R! l2 M/ m   end
# o3 Q" a# W2 N' @8 R7 G# w5 l   % 检查方程组是否有唯一解- Q3 z# m* `9 O" F/ `8 N
   if (a(n,n)==0)
9 Y1 I( i, n8 N5 E. x        error('方程组没有唯一解');0 A& z. N( Z, Y# f" v0 X9 R
   end3 f8 ?* G& V3 h6 w# O+ D
: J1 V( Q! F+ E/ i& M; z. v( D$ N
这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。
  ]! A2 }' O8 D+ A7 b+ D2 Z  {7 _2 W
3.回代过程:, m1 T1 B. w  h. z
+ g( }# R% b3 B: w" F' D+ d9 j& h
   % 回代5 P. u2 `6 ?8 e6 E' Q, ~* k3 A+ L" ?
   x(n)=b(n)/a(n,n);
' F: V  L* G' {+ t$ A5 S$ o   for i=n-1:-1:14 t% {  |4 H/ |0 V4 B& A
       sum=0;2 s* \9 j- V% d' j
       for j=i+1:n
, ?4 o5 ^8 j) E) @( ~! n           sum=sum+a(i,j)*x(j);" w" H; F9 O: M3 k9 ^6 Q! g& D# i( g
       end3 s' }% a4 l/ h6 g8 Y
       x(i)=(b(i)-sum)/a(i,i);
. W* t9 D  P  C1 w1 C' }- |   end
. |: l# `9 z# x' E, `
; s4 `# k" F7 U, Y- B0 U) b这个部分实现了回代过程,得到方程组的解向量 x。8 Z, Z. a$ Z$ d: D2 Q1 W
! X3 x2 ^7 @% y5 i
4.打印结果:
' O, h$ ?) g5 L/ n: I- R& Q' q
% |7 U# [! L- r% A, o4 ~8 n   jie=x'
& r; f: b7 ]4 m  v' O; i3 G! \% ?" q3 R3 c4 H( _$ r$ c# b
最后,打印求解得到的解向量。" I5 t3 H1 g% |& T
在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。
0 l# J: F' ]3 g0 s" t( l+ c6 s! Y# W$ ]: ?8 U' z2 s/ W

# N8 X. b* C* D$ Y* H3 j

gauss.m

1.07 KB, 下载次数: 0, 下载积分: 体力 -2 点

售价: 1 点体力  [记录]  [购买]

zan
转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
您需要登录后才可以回帖 登录 | 注册地址

qq
收缩
  • 电话咨询

  • 04714969085
fastpost

关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

手机版|Archiver| |繁體中文 手机客户端  

蒙公网安备 15010502000194号

Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

GMT+8, 2026-7-31 16:37 , Processed in 0.397287 second(s), 54 queries .

回顶部