- 在线时间
- 482 小时
- 最后登录
- 2026-9-11
- 注册时间
- 2023-7-11
- 听众数
- 4
- 收听数
- 0
- 能力
- 0 分
- 体力
- 7949 点
- 威望
- 0 点
- 阅读权限
- 255
- 积分
- 2976
- 相册
- 0
- 日志
- 0
- 记录
- 0
- 帖子
- 1183
- 主题
- 1198
- 精华
- 0
- 分享
- 0
- 好友
- 1
该用户从未签到
 |
这是一个用于解线性方程组的 MATLAB 脚本,采用高斯消元法。下面是对代码的解释:1 h* J0 j3 Q, d2 P+ S
! u- }! w1 _' U1.矩阵初始化:
- E; J7 u! y6 H+ @' W8 a2 W# Y
* `& Z, D0 l) F! H& A a1=[2,-2,5;2,3,1;-1,4,1];% w6 |- p' e, A, c
b=[6,13,3]';
5 j k" q, Z' k" Z, ?4 U n=length(b); % 方程组大小为 n9 f- H' C4 ]& p' x: w2 o
a=zeros(n,n+1);
) V/ f! E" d1 {: i a(:,1:n)=a1;
5 a6 R9 n( ^' A( B5 a" X' Y1 q a(1:n,n+1)=b; % 增广矩阵
+ N6 O- S! `9 M+ \/ q
1 a' \3 c6 l9 @5 x这里给定了系数矩阵 a1 和右侧向量 b,然后初始化了增广矩阵 a。: x4 }2 N( S J, u: N
6 W+ I3 S+ a6 a( t: s8 X" I
2.高斯消元过程:* v1 Z4 y" I( W% x* K
5 F* K& s4 c2 W* ^ for i=1:n-1
4 ^0 |4 J9 ~: \1 c % 确保主对角线元素不为09 N% {9 Q3 D+ n
if(a(i:n,i)==0)4 e3 b2 c4 h* g$ W0 h4 C7 t7 x4 P
error('方程组没有唯一解'); : C1 B0 d r4 s0 Y& D2 j6 B
end
1 G |$ H1 s# G; j; b1 G5 h % 选取主对角线元素不为0的行( ^2 D4 @- H" q$ W: H
for p=i:n
6 m1 T. u$ ]8 E8 F# y" C if(a(p,i)~=0)
$ O2 N4 L B. `! ~. N p;8 W1 x0 m' T8 d' R% E2 \* L) ~
break;
0 o) e" }: m# w* D+ o q end
/ @7 H- H* @6 ~7 @" F end
! ]( K7 e6 }0 O0 F6 a4 E % 如果选取的行不是当前行,则交换两行
3 u% h# `( R% e8 j- d* A if(p~=i)3 C5 L' F4 e7 Z4 q2 n2 ?" K" C
t=a(i, ;, ]. e! e" M4 @- x6 n7 P
a(i, =a(p, ;
! @$ A! k! a1 X7 k a(p, =t;. d, h! o( c3 O; x/ h) T) P) V2 ?+ I5 |
end
3 H1 }+ a& r2 m( [ ~& g! g % 高斯消元8 b: K5 F9 W+ @8 l) l
for j=i+1:n
+ v; r9 @5 C" ~7 c! g+ h5 c& C1 x! v a(j,i)=a(j,i)/a(i,i);; W) G/ l' x" A4 r) Q+ S3 F# Y* l" k
a(j, =a(j, -a(j,i)*a(i, ;
- b- F7 s& h% _ Q end
0 [7 d% Q; O! S9 y0 K end7 Z2 s+ U7 P3 |- a; Z. T( n8 M9 t' ~
% 检查方程组是否有唯一解' d* d% B8 [ @2 Y1 y
if (a(n,n)==0) r* u3 U; e$ k8 `" _9 h
error('方程组没有唯一解');' M/ v% [' Q& ~: w/ J
end% n4 t$ o: V) A/ L6 p; \5 e& ]
% `. o& a r* G+ l5 X' D这个部分实现了高斯消元算法。它通过迭代将增广矩阵 a 转化为上三角形式。
% Q; W2 |7 W, S6 q0 ^! z8 X1 K/ H$ {# W
, U4 }6 T y4 Y2 L5 {# z3.回代过程:
8 {2 |) X+ B, p2 s6 F+ J' y8 F i; T4 [" J( A' \! q
% 回代
0 e' c' w' T8 [$ H% q! ]8 E9 ~ x(n)=b(n)/a(n,n);, U, w v" [' C: N# E: E
for i=n-1:-1:1) i2 a- k4 M) I- A
sum=0;
; W5 N( R9 \, ]2 l( B! [* B for j=i+1:n1 Y1 B2 p; g; _4 x( R9 N
sum=sum+a(i,j)*x(j);
/ W& Y2 u- r) k/ e* y: _ end
( Y* @7 b" z8 o: y3 {9 _, ? x(i)=(b(i)-sum)/a(i,i);
! O* e2 |9 A9 E* A3 q+ M: s' q& y* f end; P! d: D& w4 @6 [
2 U6 W4 o, [6 B, x7 @
这个部分实现了回代过程,得到方程组的解向量 x。
* u/ \% M0 |) u% o' r1 n) Y+ m4 ~ ]- ~7 K
4.打印结果:/ d, I, g8 J$ U) U( E
' k" N d# `3 o" K8 V% X jie=x'4 w# o: A Z( Q* Z8 y% V0 z2 R: p
0 d, G' p3 E. e9 r0 j3 r }
最后,打印求解得到的解向量。
: d/ ?' G' P T1 [$ `8 [+ d在实际应用中,可以使用 MATLAB 提供的 linsolve 函数来更稳妥地解线性方程组。
3 i; m7 Q8 {* q. q
0 y0 P/ u) v& l9 S" x9 |; H" X( X: o7 R4 P) B/ y% n
|
-
-
gauss.m
1.07 KB, 下载次数: 0, 下载积分: 体力 -2 点
售价: 1 点体力 [记录]
[购买]
zan
|