矩阵怎么写
1.c语言矩阵怎么写
这是个蛇形矩阵,算法如下:
#include
#define N 10
int a[N][N];
void func(int n)
{
int i,j;
int num = 0;
for (i=0;i{
for (j=0;j{
a[i][j] = 0;
}
}
for (i=0;i{
for (j=0;j{
if (a[i][j] == 0)
a[i][j] = ++num;
}
for (j=0;j{
if (a[j][n-1-i] == 0)
{
a[j][n-1-i] = ++num;
}
}
for (j=n-1;j>=0;j--)
{
if (a[n-1-i][j] == 0)
{
a[n-1-i][j] = ++num;
}
}
for (j=n-1;j>=0;j--)
{
if (a[j][i] == 0)
{
a[j][i] = ++num;
}
}
}
}
int main()
{
int n;
cin>>n;
func(n);
for (int i=0;i{
for (int j=0;j{
cout}
cout}
return 0;
}
2.怎么写关于矩阵的程序
算法介绍矩阵求逆在3D程序中很常见,主要应用于求Billboard矩阵。
按照定义的计算方法乘法运算,严重影响了性能。在需要大量Billboard矩阵运算时,矩阵求逆的优化能极大提高性能。
这里要介绍的矩阵求逆算法称为全选主元高斯-约旦法。高斯-约旦法(全选主元)求逆的步骤如下:首先,对于 k 从 0 到 n - 1 作如下几步:从第 k 行、第 k 列开始的右下角子阵中选取绝对值最大的元素,并记住次元素所在的行号和列号,在通过行交换和列交换将它交换到主元素位置上。
这一步称为全选主元。 m(k, k) = 1 / m(k, k) m(k, j) = m(k, j) * m(k, k),j = 0, 1, 。
, n-1;j != k m(i, j) = m(i, j) - m(i, k) * m(k, j),i, j = 0, 1, 。, n-1;i, j != k m(i, k) = -m(i, k) * m(k, k),i = 0, 1, 。
, n-1;i != k 最后,根据在全选主元过程中所记录的行、列交换的信息进行恢复,恢复的原则如下:在全选主元过程中,先交换的行(列)后进行恢复;原来的行(列)交换用列(行)交换来恢复。实现(4阶矩阵)float Inverse(CLAYMATRIX& mOut, const CLAYMATRIX& rhs){ CLAYMATRIX m(rhs); DWORD is[4]; DWORD js[4]; float fDet = 1.0f; int f = 1; for (int k = 0; k < 4; k ++) { // 第一步,全选主元 float fMax = 0.0f; for (DWORD i = k; i < 4; i ++) { for (DWORD j = k; j < 4; j ++) { const float f = Abs(m(i, j)); if (f > fMax) { fMax = f; is[k] = i; js[k] = j; } } } if (Abs(fMax) < 0.0001f) return 0; if (is[k] != k) { f = -f; swap(m(k, 0), m(is[k], 0)); swap(m(k, 1), m(is[k], 1)); swap(m(k, 2), m(is[k], 2)); swap(m(k, 3), m(is[k], 3)); } if (js[k] != k) { f = -f; swap(m(0, k), m(0, js[k])); swap(m(1, k), m(1, js[k])); swap(m(2, k), m(2, js[k])); swap(m(3, k), m(3, js[k])); } // 计算行列值 fDet *= m(k, k); // 计算逆矩阵 // 第二步 m(k, k) = 1.0f / m(k, k); // 第三步 for (DWORD j = 0; j < 4; j ++) { if (j != k) m(k, j) *= m(k, k); } // 第四步 for (DWORD i = 0; i < 4; i ++) { if (i != k) { for (j = 0; j < 4; j ++) { if (j != k) m(i, j) = m(i, j) - m(i, k) * m(k, j); } } } // 第五步 for (i = 0; i < 4; i ++) { if (i != k) m(i, k) *= -m(k, k); } } for (k = 3; k >= 0; k --) { if (js[k] != k) { swap(m(k, 0), m(js[k], 0)); swap(m(k, 1), m(js[k], 1)); swap(m(k, 2), m(js[k], 2)); swap(m(k, 3), m(js[k], 3)); } if (is[k] != k) { swap(m(0, k), m(0, is[k])); swap(m(1, k), m(1, is[k])); swap(m(2, k), m(2, is[k])); swap(m(3, k), m(3, is[k])); } } mOut = m; return fDet * f;}比较 原算法 原算法(经过高度优化) 新算法 加法次数 103 61 39 乘法次数 170 116 69 需要额外空间 16 * sizeof(float) 34 * sizeof(float) 25 * sizeof(float)。
3.零矩阵怎么表示
零矩阵的手写把零写大些就可以。
矩阵大写,变量一般都是小写字母,线性代数里的矩阵不需要加箭头,并没有特别的符号,被声明用于约定手写规范。至于手写的向量,如果用英文字母表示其实应该加箭头,所以考研书里都用希腊字母表示,如ξ、η、γ等,这些不必加箭头。
扩展资料:
零矩阵的性质
m*n 的零矩阵 O 和 m*n 的任意矩阵 A 的和为 A + O = O + A = A ,差为 A - O = A,O - A = -A。
l*m 的零矩阵 O 和 m*n 的任意矩阵 A 的积 OA 为 l*n 的零矩阵。
l*m 的任意矩阵 B 和 m*n 的零矩阵 O 的积 BO 为 l*n 的零矩阵。
在线性代数中,对于n阶方阵N,存在正整数k,使得N^k=0,这样的方阵N就叫做幂零矩阵。满足条件的最小的正整数k被称为N的度数或指数。更一般来说,零权变换是向量空间的线性变换L,使得对于一些正整数k(并且因此,对于所有j≥k,Lj = 0),L^k= 0。
4.c语言数字矩阵怎么写
把程序编写好了,已经运行过: #include 左乘的矩阵就是把单位矩阵的第a行的b倍加到第c行。 设A为m*p的矩阵,B为p*n的矩阵,那么称m*n的矩阵C为矩阵A与B的乘积,记作C=AB,称为A左乘以B。 矩阵运算在科学计算中非常重要,而矩阵的基本运算包括矩阵的加法,减法,数乘,转置,共轭和共轭转置。 扩展资料: 对称矩阵的正定性与其特征值密切相关。矩阵是正定的当且仅当其特征值都是正数。 将一个矩阵分解为比较简单的或具有某种特性的若干矩阵的和或乘积 ,矩阵的分解法一般有三角分解、谱分解、奇异值分解、满秩分解等。 在线性代数中,对称矩阵是一个方形矩阵,其转置矩阵和自身相等。 参考资料来源:百度百科--左乘。 左乘的矩阵就是把单位矩阵的第a行的b倍加到第c行。 设A为m*p的矩阵,B为p*n的矩阵,那么称m*n的矩阵C为矩阵A与B的乘积,记作C=AB,称为A左乘以B。 矩阵运算在科学计算中非常重要,而矩阵的基本运算包括矩阵的加法,减法,数乘,转置,共轭和共轭转置。 扩展资料: 对称矩阵的正定性与其特征值密切相关。矩阵是正定的当且仅当其特征值都是正数。 将一个矩阵分解为比较简单的或具有某种特性的若干矩阵的和或乘积 ,矩阵的分解法一般有三角分解、谱分解、奇异值分解、满秩分解等。 在线性代数中,对称矩阵是一个方形矩阵,其转置矩阵和自身相等。 参考资料来源:百度百科--左乘5.
6.