1701011220
1701011221
1701011222
1701011223
1701011224
【问题】对于如此一个四元一次方程组的求解,为何感觉棘手呢?
1701011225
1701011226
【分析】
1701011227
1701011228
对于我们人工计算而言,方程组一旦复杂,运算量增大,而且人工计算误差较大,一不小心就会翻船,因此对于多元方程组计算,一般采用计算机求解,计算机求解快速而且精确,大大地提高了计算的效率,广泛地被人们所接受。
1701011229
1701011230
计算机求解多元方程组的根,常用的方法有Gauss消元法、高斯-赛德尔迭代法、追赶法和雅克比迭代法等,在此将详细介绍高斯消元法。
1701011231
1701011232
Gauss消元法的基本思想是:先逐次消去变量,将方程组化成同解的上三角形方程组,此过程称为消元过程。然后按方程相反顺序求解上三角形方程组,得到原方程组的解,此过程称为回代过程。
1701011233
1701011234
对于Gauss消元法,总结一般的求解步骤,如以下n阶方程组。
1701011235
1701011236
1701011237
1701011238
1701011239
则有Gauss消元法最终结果如下:
1701011240
1701011241
1701011242
1701011243
1701011244
使得矩阵左下角值全为0,然后依次求解每个值。
1701011245
1701011246
用Gauss消元法求解下列方程组:
1701011247
1701011248
1701011249
1701011250
1701011251
写成矩阵的形式如下:
1701011252
1701011253
1701011254
1701011255
1701011256
由方程组书写成矩阵得:
1701011257
1701011258
1701011259
1701011260
1701011261
采用gauss_x()函数进行求解,程序如下:
1701011262
1701011263
clc,clear,close all %清屏和清除变量 warning off %消除警告 format rat; %分数显示 A = [6 2 -1; %方程系数矩阵 1 4 -2; -3 1 4]; B1 = [-3,2,4]’; %方程右边b矩阵 x1 = gauss_x(A,B1)
1701011264
1701011265
其中Gauss消元法函数程序如下:
1701011266
1701011267
function x = gauss_x(A,B) %A为函数系数矩阵; %B为函数值矩阵; %x为求得未知量值; format rat C = [A,B]; nc = size(C); %求C的行列数 for j = 1 : nc(1,2)-2 %列数 for i = j+1 : nc(1,1) %行数 C(i,
:) = -C(j,j)./C(i,j) .*C(i,
:) + C(j,
:); %每行元素进行消元法 end end switch nc(1,1) case 1 %1个未知数求解,1阶方程 x(1) = C(1,end)/C(1,end-1); case 2 %2个未知数求解,2阶方程 x(2) = C(2,end)/C(2,end-1); x(1) = ( C(1,end)-C(1,end-1)*x(2) )/ C(1,end-2); x=[x(1);x(2)]; case 3 %3个未知数求解,3阶方程 x(3) = C(3,end)/C(3,end-1); x(2) = ( C(2,end)-C(2,end-1)*x(3) )/ C(2,end-2); x(1) = ( C(1,end)-C(1,end-1)*x(3)- C(1,end-2)*x(2))/ C(1,end-3); x=[x(1);x(2);x(3)]; case 4 %4个未知数求解,4阶方程 x(4) = C(4,end)/C(4,end-1); x(3) = ( C(3,end)-C(3,end-1)*x(4) )/ C(3,end-2); x(2) = ( C(2,end)-C(2,end-1)*x(4)- C(2,end-2)*x(3))/ C(2,end-3); x(1) = ( C(1,end)-C(1,end-1)*x(4)- C(1,end-2)*x(3)-C(1,end-3)* x(2))/ C(1,end-4); x=[x(1);x(2);x(3);x(4)]; case 5 %5个未知数求解,5阶方程 x(5) = C(5,end)/C(5,end-1); x(4) = ( C(4,end)-C(4,end-1)*x(5) )/ C(4,end-2); x(3) = ( C(3,end)-C(3,end-1)*x(5)- C(3,end-2)*x(4))/ C(3,end-3); x(2) = ( C(2,end)-C(2,end-1)*x(5)- C(2,end-2)*x(4)-C(2,end-3)* x(3))/ C(2,end-4); x(1) = ( C(1,end)-C(1,end-1)*x(5)- C(1,end-2)*x(4)-C(1,end-3)* x(3)-C(1,end-4)*x(2))/ C(1,end-5); x=[x(1);x(2);x(3);x(4);x(5)]; end end
1701011268
1701011269
运行程序输出结果如下:
[
上一页 ]
[ :1.70101122e+09 ]
[
下一页 ]