作业帮 > 综合 > 作业

Mathmatic软件,用列组元素消去法解矩阵方程

来源:学生作业帮 编辑:神马作文网作业帮 分类:综合作业 时间:2024/11/06 08:39:14
Mathmatic软件,用列组元素消去法解矩阵方程
用列组元素消去法编写一个程序解方程 1 2 3 x1 1
{ 4 5 6 }{ x2 }={ 2 };
7 8 9 x3 3
Mathmatic软件,用列组元素消去法解矩阵方程
写了两个函数,图片和示例写到了博客上,函数内容如下:
GT[A_,b_] :=
Module[{step = Length[Transpose[A][[1]]],AA = Transpose[A],
indexofmax,B,i,Z,temp,j},Z = Transpose[AppendTo[AA,b]];
For[i = 1,i < step,i++,
B = Transpose[
Transpose[Transpose[Z[[i ;; step]]][[i ;; step + 1]]]][[
1 ;; step + 1 - i]];
indexofmax = Position[B[[1]],Max[Abs[B[[1]]]]][[1,1]] + i - 1;
If[indexofmax != i,temp = Z[[i]]; Z[[i]] = Z[[indexofmax]];
Z[[indexofmax]] = temp];
If[Z[[i,i]] != 0,
For[j = i,j < step,j++,
Z[[j + 1]] -= (Z[[j + 1,i]]/Z[[i,i]])*Z[[i]]]]]; Z](*返回阶梯型A为系数矩阵,b为常数项*)
HD[Z_] :=
Module[{k,len = Transpose[Z][[1]] // Length,rowz = Length[Z[[1]]],
y,A,b,result,Trr},
Trr[mmt_] := Table[{mmt[[p]]},{p,1,Length[mmt]}];
For[k = 1,k < len,k++,If[ Z[[k,k]] == 0 ,Break[]]];
If[k < rowz - 1,If[Z[[k + 1,rowz]] != 0,Return["此方程无解"]],
Clear[x]; y = Array[x,rowz - 1];
A = Transpose[Z][[1 ;; rowz - 1]] // Transpose;
b = Transpose[Z][[rowz]] // Trr; result = Reduce[A.y == b,y]];
result](*解方程*)
其中GT函数将一个线性方程组的增广矩阵化为阶梯型,
HD接受一个阶梯型矩阵,并当做增广矩阵求解线性方程组.
HD简单判断该方程组是否有解,如有解,由于可能存在自由变量,并未遵循常规回代过程,而是直接使用
Mathematica内部函数Reduce求解,当然页可以自己修改使用自己的算法,不过我时间不多,你可以自己更改.
希望对你有所帮助.