怎么写矩阵
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.在EXCEL中怎么输入矩阵
输入矩阵的第一步就是在excel表格中,找两个空的单元格,然后输入矩阵的A1和A2格,这样就会确定A列。
1.确定A列之后就是输入B2和B1,这样就会确定B列,输入的是11和12,同时也会确定横着的每一行。
2.确定之后就可以下拉完成矩阵了,可以横着拉,也可以竖着拉,最后形成自己需要的矩阵就行。
3.最终矩阵的完成品是这样的,大家可以看到矩阵的规律是由最初输入的四个数字确定的。
4.一个简单的输入负数的小技巧,在单元格内先输入一个正数,然后打上括号。
5.打上括号之后回车就会发现原本是正数现在变成了负数。在excel中有很多技巧可言简化操作。
5.c语言矩阵怎么写
这是个蛇形矩阵,算法如下:
#include <iostream.h>
#define N 10
int a[N][N];
void func(int n)
{
int i,j;
int num = 0;
for (i=0;i<n;i++)
{
for (j=0;j<n;j++)
{
a[i][j] = 0;
}
}
for (i=0;i<n/2+1;i++)
{
for (j=0;j<n;j++)
{
if (a[i][j] == 0)
a[i][j] = ++num;
}
for (j=0;j<n;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<n;i++)
{
for (int j=0;j<n;j++)
{
cout<<a[i][j]<< " ";
}
cout<<endl;
}
return 0;
}
6.怎样用C语言写矩阵
用二维数组,如下:#include