Mathmatic软件,用列组元素消去法解矩阵方程用列组元素消去法编写一个程序解方程 1 2 3 x1 1 { 4 5 6 }{ x2 }={ 2 };7 8 9 x3 3

来源:学生作业帮助网 编辑:作业帮 时间:2024/05/13 07:23:46
Mathmatic软件,用列组元素消去法解矩阵方程用列组元素消去法编写一个程序解方程 1 2 3 x1 1 { 4 5 6 }{ x2 }={ 2 };7 8 9 x3 3

Mathmatic软件,用列组元素消去法解矩阵方程用列组元素消去法编写一个程序解方程 1 2 3 x1 1 { 4 5 6 }{ x2 }={ 2 };7 8 9 x3 3
Mathmatic软件,用列组元素消去法解矩阵方程
用列组元素消去法编写一个程序解方程 1 2 3 x1 1
{ 4 5 6 }{ x2 }={ 2 };
7 8 9 x3 3

Mathmatic软件,用列组元素消去法解矩阵方程用列组元素消去法编写一个程序解方程 1 2 3 x1 1 { 4 5 6 }{ x2 }={ 2 };7 8 9 x3 3
写了两个函数,图片和示例写到了博客上,函数内容如下:
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求解,当然页可以自己修改使用自己的算法,不过我时间不多,你可以自己更改.
希望对你有所帮助.