矩阵加减乘除
- 格式:doc
- 大小:244.28 KB
- 文档页数:10
Matlab中的矩阵操作技巧指南在科学计算和数据处理中,矩阵操作是一个非常重要的环节。
Matlab作为一种功能强大的计算工具,提供了丰富的矩阵操作函数和技巧,帮助用户更高效地处理数据。
本文将为大家介绍一些在Matlab中常用的矩阵操作技巧,希望对广大Matlab用户有所帮助。
一、矩阵的创建和赋值在Matlab中,创建矩阵有多种方式。
可以使用数组、函数、特殊值或其他操作创建矩阵。
下面是一些常见的创建矩阵的方法。
1.1 使用数组创建矩阵使用数组创建矩阵是一种简单直观的方式。
可以通过一维或多维数组来创建矩阵。
```matlabA = [1, 2, 3; 4, 5, 6; 7, 8, 9] % 创建一个3x3的矩阵B = [1, 2, 3; 4, 5, 6] % 创建一个2x3的矩阵```1.2 使用函数创建矩阵除了使用数组,还可以使用Matlab提供的函数来创建矩阵。
常用的函数有zeros, ones, eye等。
```matlabC = zeros(3, 3) % 创建一个3x3的全零矩阵D = ones(2, 4) % 创建一个2x4的全一矩阵E = eye(5) % 创建一个5x5的单位矩阵```1.3 特殊值的矩阵Matlab中还提供了一些特殊值的矩阵,如全1矩阵、全0矩阵等。
```matlabF = ones(3, 3) % 创建一个3x3的全1矩阵G = zeros(2, 4) % 创建一个2x4的全0矩阵```二、矩阵的索引和切片在Matlab中,可以使用索引和切片操作来获取矩阵的元素或对矩阵进行切片操作。
2.1 矩阵的索引可以使用单个索引、行索引或列索引来获取矩阵的元素。
```matlabA = magic(3) % 创建一个3x3的魔方矩阵element = A(2, 3) % 获取第2行第3列的元素row = A(1, :) % 获取第1行的所有元素column = A(:, 2) % 获取第2列的所有元素```2.2 矩阵的切片可以使用切片操作来获取矩阵的子矩阵。
一、实验目的1. 熟悉矩阵运算软件的基本功能和使用方法。
2. 掌握矩阵的创建、编辑、保存、调用等操作。
3. 熟练运用矩阵的基本运算,如加减乘除、求逆、求行列式、求秩、求迹等。
4. 通过实际操作,提高对矩阵运算的理解和应用能力。
二、实验环境1. 软件名称:MATLAB2. 操作系统:Windows 103. 编程环境:MATLAB R2020b三、实验内容1. 矩阵的创建与编辑(1)创建一个2x3的矩阵A:```A = [1 2 3; 4 5 6]```(2)创建一个3x3的矩阵B,并将元素设置为随机数:```B = randn(3);```(3)编辑矩阵A,将第2行第3列的元素修改为10:```A(2,3) = 10;```2. 矩阵的保存与调用(1)将矩阵A保存为“matrixA.mat”:```save matrixA.mat A```(2)调用保存的矩阵A:```load matrixA.mat```3. 矩阵的基本运算(1)矩阵的加减运算:```C = A + B; % 矩阵A与B相加D = A - B; % 矩阵A与B相减```(2)矩阵的乘除运算:```E = A B; % 矩阵A与B相乘F = A / B; % 矩阵A与B相除(元素-wise)```(3)求矩阵的逆:```G = inv(A); % 求矩阵A的逆```(4)求矩阵的行列式:```detA = det(A); % 求矩阵A的行列式```(5)求矩阵的秩:```rankA = rank(A); % 求矩阵A的秩```(6)求矩阵的迹:```traceA = trace(A); % 求矩阵A的迹```4. 矩阵的应用(1)解线性方程组:```x = A\b; % 解线性方程组Ax = b```(2)矩阵的特征值与特征向量:```[V, D] = eig(A); % 求矩阵A的特征值和特征向量```四、实验结果与分析1. 通过实验,成功创建了多个矩阵,并掌握了矩阵的保存与调用方法。
神奇数字方阵加减乘除综合神奇数字方阵是一种乐趣十足的数学游戏,通过在一个矩阵中填入数字,并通过加、减、乘、除四则运算使每行、每列及对角线上的数字之和等于给定的值。
在本文中,我们将探讨神奇数字方阵的一些基本概念和解题方法。
一、神奇数字方阵的基本概念神奇数字方阵由一个 n×n 的矩阵组成,其中每个位置上的数字都可以是 1 到 n^2 之间的任意整数。
方阵中的每行、每列和对角线上的数字之和必须等于同一个给定值。
这个给定值被称为“魔数”。
二、解题方法1. 先将矩阵的中心位置填上魔数的一半,例如 n 为奇数时,中心位置上的数字为魔数的一半加一;n 为偶数时,中心位置上的数字为魔数的一半。
这样可以确保每行、每列和对角线上的数字之和为魔数。
2. 从上方向下、从左到右填充数字。
填充时,如果即将填入的位置超出矩阵的范围,则将其重新定位到上一列和下一行。
3. 当填充到一个位置时,检查该位置的上方、左方、左上方是否已经填入数字。
如果已经填入数字,则重新定位到上一列和下一行。
4. 重复步骤 3,直到矩阵中的所有位置都填入了数字。
三、一个具体的例子假设我们要构建一个 3×3 的神奇数字方阵,魔数为 15。
首先,我们将中心位置的数字填为 8,使得每行、每列和对角线上的数字之和为15。
然后,按照上述解题方法依次填入其他数字,最终得到如下方阵:8 1 63 5 74 9 2可以验证,每行、每列和对角线上的数字之和均为 15。
四、应用与拓展神奇数字方阵不仅是一种有趣的数学游戏,还具有一定的应用价值。
在计算机科学领域,神奇数字方阵常用于图像处理、密码学等方面。
在教育领域,神奇数字方阵可以培养学生的逻辑思维和数学运算能力。
此外,神奇数字方阵还可以进一步拓展。
例如,可以增加方阵的大小,挑战更高的魔数。
同时,可以引入更多的运算符号,如乘方、开方等,使得解题更加复杂和有趣。
总结起来,神奇数字方阵是一种有趣而又富有挑战性的数学游戏。
矩阵运算总结矩阵运算是线性代数中的一个重要内容,也是在解决许多实际问题时经常使用的数学工具。
矩阵可以用来表示线性变换、方程组、向量空间等,通过各种矩阵运算操作,可以实现对向量和矩阵的加减乘除、转置、求逆等操作,进而解决实际问题。
矩阵的加法是指将两个矩阵按相同的位置对应元素相加,得到一个新的矩阵。
矩阵的加法满足交换律和结合律,可以通过加法将多个矩阵合并成一个矩阵。
矩阵的减法是指将两个矩阵按相同的位置对应元素相减,同样也满足交换律和结合律。
矩阵的乘法是指将一个矩阵的每个元素与另一个矩阵的对应行的每个元素分别相乘,并将结果相加得到一个新的矩阵。
矩阵的乘法满足分配律和结合律,但不满足交换律。
矩阵的乘法可以用来实现线性变换,通过矩阵的乘法可以将一个向量变换到另一个向量。
矩阵的乘法在计算机图形学中有广泛的应用,用来实现图形的平移、缩放和旋转等变换操作。
矩阵的转置是指将矩阵的行和列互换得到一个新的矩阵。
转置后的矩阵与原矩阵有相同的元素,但行和列的顺序发生了变化。
转置操作可以用来实现矩阵的行列变换,也可以用来求解线性方程组和计算矩阵的特征值和特征向量等。
矩阵的求逆是指找到一个与原矩阵相乘等于单位矩阵的逆矩阵。
只有方阵才存在逆矩阵,非方阵只能求广义逆矩阵。
求逆矩阵可以用来解线性方程组,通过乘以原矩阵的逆矩阵,可以将方程组转化为一个等价的形式。
求逆矩阵在计算机图形学中也有广泛的应用,用来实现变换的逆操作。
除了上述常见的矩阵运算,还有一些其他的矩阵运算操作。
矩阵的幂运算是指一个矩阵自乘多次,幂运算可以用来计算矩阵的高阶项。
矩阵的行列式是指一个方阵的一个标量值,可以用来判断方阵是否可逆。
矩阵的迹是指一个方阵主对角线上元素的和,迹运算可以用来计算矩阵的特征值。
矩阵的秩是指一个矩阵的最大线性无关行(列)向量的个数,可以用来描述矩阵的维度。
总之,矩阵运算是线性代数中的一个重要内容,通过各种矩阵运算可以实现对向量和矩阵的加减乘除、转置、求逆等操作。
矩阵的基本运算公式大全矩阵是数学中一种常用的工具,它可以在一组数字的数字或者一组函数的函数中表示一种关系。
矩阵的基本运算包括加减乘除和求逆等。
在学习矩阵的基本运算之前,必须先了解矩阵的基本概念。
矩阵是由一组有序的数字或者函数构成的方阵。
在一个矩阵中,每一行代表一个数字或者函数,每一列代表一个变量。
一个矩阵可以用一个由大写英文字母表示的括号表示,例如A=(a11,a12,...,a1n;a21,a22,...,a2n;...;am1,am2,...,amn)。
矩阵的大小也可以用一个由小写字母表示的括号表示,例如A=(m×n)。
矩阵的基本运算包括加法,减法,乘法,除法以及求逆。
矩阵的加减法,可以把两个同样大小的矩阵,相应的位置上的元素相加减,然后得到一个新的矩阵。
矩阵的乘法是指把两个矩阵相乘,得到一个新的矩阵。
在矩阵的乘法中,我们可以把矩阵A乘以矩阵B,得到一个矩阵C。
在这里,矩阵A和B的大小是m×n和n×p,那么矩阵C的大小就是m×p。
具体的乘法规则是,把矩阵A的n列和矩阵B的n行相乘,然后把得到的结果全部加起来,就是矩阵C的对应位置的值。
除法是除以另一个矩阵的逆矩阵来求解的。
求逆矩阵有多种方式,最常用的是使用行列式的值来求解的。
首先,求得一个矩阵的行列式,如果它的值不为零,则该矩阵是可逆的,可以求出它的逆矩阵。
然后把这个矩阵除以它的逆矩阵,就可以求出除法的结果。
矩阵的基本运算非常实用,它们经常被用来解决复杂的数学问题。
例如,我们可以用矩阵的加减乘除运算来解决向量和矩阵之间的运算,也可以用矩阵乘法来解决线性方程组。
此外,在矩阵的基本运算中,我们还可以求解矩阵的秩,对角化矩阵,求得矩阵的特征值等问题。
在很多应用科学中,矩阵的基本运算也是一个不可或缺的工具。
例如,在电路设计中,可以通过矩阵乘法来分析电路的响应特性;在统计学中,可以通过矩阵的乘法来求数据的均值和方差等等。
矩阵的加减乘除运算法则矩阵是线性代数中的重要概念,它在各个领域中都有着广泛的应用。
矩阵的加减乘除运算是矩阵运算中最基本的操作,掌握了这些运算法则,才能更好地理解和应用矩阵。
一、矩阵的加法矩阵的加法是指将两个矩阵按照相同位置的元素进行相加得到一个新的矩阵。
两个矩阵相加的前提是它们的行数和列数相等。
具体的加法运算规则如下:- 相加的两个矩阵必须具有相同的行数和列数。
- 相加的结果矩阵的每个元素等于相加的两个矩阵对应位置的元素的和。
例如,对于两个3行3列的矩阵A和B,它们的加法运算可以表示为:A = [1 2 3; 4 5 6; 7 8 9]B = [9 8 7; 6 5 4; 3 2 1]A +B = [10 10 10; 10 10 10; 10 10 10]二、矩阵的减法矩阵的减法是指将两个矩阵按照相同位置的元素进行相减得到一个新的矩阵。
两个矩阵相减的前提也是它们的行数和列数相等。
具体的减法运算规则如下:- 相减的两个矩阵必须具有相同的行数和列数。
- 相减的结果矩阵的每个元素等于相减的两个矩阵对应位置的元素的差。
例如,对于两个3行3列的矩阵A和B,它们的减法运算可以表示为:A = [1 2 3; 4 5 6; 7 8 9]B = [9 8 7; 6 5 4; 3 2 1]A -B = [-8 -6 -4; -2 0 2; 4 6 8]三、矩阵的乘法矩阵的乘法是指将两个矩阵进行相乘得到一个新的矩阵。
乘法运算的条件是第一个矩阵的列数等于第二个矩阵的行数。
具体的乘法运算规则如下:- 第一个矩阵的列数等于第二个矩阵的行数。
- 乘法的结果矩阵的行数等于第一个矩阵的行数,列数等于第二个矩阵的列数。
- 结果矩阵中的每个元素等于第一个矩阵的对应行与第二个矩阵的对应列的乘积之和。
例如,对于一个2行3列的矩阵A和一个3行2列的矩阵B,它们的乘法运算可以表示为:A = [1 2 3; 4 5 6]B = [7 8; 9 10; 11 12]A *B = [58 64; 139 154]四、矩阵的除法矩阵的除法并不像加减乘法那样常见,因为矩阵的除法并没有一个统一的运算法则。
矩阵运算矩阵的加减乘除和求逆运算在数学领域中,矩阵运算是非常重要的一部分。
矩阵的加减乘除和求逆运算是常见的运算方式,本文将对这些运算进行详细的介绍和讨论。
一、矩阵的加法运算矩阵的加法是指两个同型矩阵之间的对应元素相加。
设有两个m×n 矩阵A=[aij]和B=[bij],则它们的和矩阵C=A+B定义为C=[cij],其中cij=aij+bij。
换句话说,对应位置的元素相加,得到的结果矩阵的对应位置元素即为相加的结果。
二、矩阵的减法运算矩阵的减法与加法类似,也是对应元素相减的运算。
设有两个同型矩阵A=[aij]和B=[bij],则它们的差矩阵C=A-B定义为C=[cij],其中cij=aij-bij。
同样,对应位置的元素相减,即可得到结果矩阵的对应位置元素。
三、矩阵的乘法运算矩阵的乘法是指两个矩阵按照一定规则进行相乘的运算。
设有两个矩阵A(m×n)和B(n×p),它们的乘积矩阵C(m×p)定义为C=AB,其中C=[cij],cij=∑(k=1 to n)(aij·bkj)。
换句话说,矩阵A的行与矩阵B的列相乘,然后求和得到结果矩阵的对应位置元素。
四、矩阵的除法运算矩阵的除法运算涉及到矩阵的逆运算。
设有两个矩阵A和B,如果存在一个矩阵C,满足C=AB,那么我们可以称矩阵B是矩阵A的逆矩阵,记作B=A^(-1)。
矩阵的逆矩阵有一些特性,例如矩阵A与其逆矩阵B的乘积为单位矩阵,即AB=BA=E。
五、矩阵的求逆运算求矩阵的逆矩阵是一个重要的运算过程。
对于一个给定的n×n矩阵A,如果存在一个n×n矩阵B,使得AB=BA=E,那么我们称矩阵A是可逆的,矩阵B则是矩阵A的逆矩阵。
求逆矩阵的方法有多种,例如高斯-约当消元法、初等变换法等,具体的求解过程和方法在此不一一赘述。
综上所述,矩阵的加减乘除和求逆运算是矩阵运算中的重要内容。
通过对矩阵的加减乘除运算,我们可以实现对矩阵的相加、相减和相乘等操作,进而应用于各个领域的问题求解中。
《矩阵类》程序设计基础课程设计报告二OO八年七月一日目录一.编程目的: .......................... 错误!未定义书签。
二.设计要求: .......................... 错误!未定义书签。
三.各函数功能说明: .................... 错误!未定义书签。
四.流程图: ............................ 错误!未定义书签。
五.总结:. (8)参考书目: (9)一.编程目的:编写一个矩阵类,可以实现矩阵的初始化,矩阵的加法,减法,乘法等基本功能,要求对运算符+、-,《、》进行重载。
二.设计要求:编写一个矩阵类1.实现矩阵的初始化2.实现矩阵的加法(将两个矩阵的对应位置的数相加)3.实现矩阵的减法4.实现矩阵的乘法5.对基本运算符的重载(+、-、《《、》》)6.输出这些信息三.各函数功能说明:函数源代码以及函数的功能:#include<iostream.h>#define M 3class Matrix // 定义类Matrix{public:Matrix(); // 声明构造函数Matrix operator + (Matrix &); //声明加法重载运算符作为成员函数Matrix operator - (Matrix &); //声明减法重载运算符作为成员函数Matrix operator * (Matrix&); //声明乘法重载运算符作为成员函数Matrix zhuanzhi(Matrix &); //声明矩阵的转值为成员函数friend istream &operator >> (istream&,Matrix&); //声明输入重载运算符作为友元函数friend ostream &operator << (ostream&,Matrix&); //声明输出重载运算符作为友元函数private:int q[M][M];};Matrix::Matrix() //定义构造函数{for(int i=0;i<M;i++)for(int j=0;j<M;j++)q[i][j]=0;}Matrix Matrix:: operator + (Matrix &a) //定义加法重载运算符函数{Matrix m;for(int i=0;i<M;i++)for(int j=0;j<M;j++)m.q[i][j]=q[i][j]+a.q[i][j];return m;}Matrix Matrix:: operator - (Matrix &a) // 定义减法重载运算符函数{Matrix m;for(int i=0;i<M;i++)for(int j=0;j<M;j++)m.q[i][j]=q[i][j]-a.q[i][j];return m;}Matrix Matrix ::operator * (Matrix &a) //定义乘法运算符函数{Matrix m;for(int i=0;i<M;i++){for(int j=0;j<M;j++)for(int k=0;k<M;k++)m.q[i][j]+=q[i][k]*a.q[k][j];}return m;}Matrix Matrix::zhuanzhi(Matrix &a) //定义矩阵的转值{Matrix b,c;b=a;for(int i=0;i<M;i++)for(int j=0;j<M;j++)c.q[i][j]=b.q[j][i];return c;}istream &operator >> (istream& input,Matrix& a ) //定义输入重载运算符函数{int i=0,j=0;cout<<"Please enter its date:"<<endl;for(i=0;i<M;i++)for(j=0;j<M;j++)input >>a.q[i][j];return input;}ostream &operator << (ostream& output,Matrix& a) // 定义输出重载运算符函数{cout<<""<<endl;cout<<" The new Matrix is: "<<endl;cout<<""<<endl;for(int i=0;i<M;i++)for(int j=0;j<M;j++){output<<a.q[i][j]<<" ";if(j==M-1) cout<<endl;}return output;}int main(){Matrix a,b,c,d,f,k; // 定义对象a,b,c,d,fcin>>a;cin>>b;c=a+b;d=a-b;f=a*b;cout<<endl<<"Matrix a is:"<<endl;cout<<a;cout<<endl<<"Matrix b is:"<<endl;cout<<b;cout<<endl<<"Matrix c = Matrix a + Matrix b is:"<<endl;cout<<c; //输出两矩阵之和cout<<endl<<"Matrix d = Matrix a - Matrix b is:"<<endl;cout<<d; // 输出两矩阵之减cout<<endl<<"Matrix f= Matrix a * Matrix b is:"<<endl;cout<<f; // 输出两矩阵之乘积cout<<endl<<"Matrix a's zhuanzhi is:"<<endl;cout<<f.zhuanzhi(a);return 0;}四、流程图:五.总结:在做程序设计前就已经感觉到我设计的《矩阵类》比较复杂,不仅要写出实现各种功能的函数还要保证函数之间的连接,怎样通过函数之间的关系能很好的把函数连接起来,还要保证程序能够很好的而且有效的运行。
矩阵运算加减乘除矩阵是线性代数中一个重要的概念,通过矩阵运算可以对数据进行处理和分析。
本文将介绍矩阵的加法、减法、乘法和除法运算,并展示其在实际问题中的应用。
一、矩阵加法矩阵的加法是指将两个相同尺寸的矩阵对应位置的元素相加,得到一个新的矩阵。
设有两个m×n阶的矩阵A和B,它们的加法运算可以表示为C=A+B。
具体的计算方法如下:A = [a11 a12 a13B = [b11 b12 b13C = [a11+b11 a12+b12a13+b13a21 a22 a23] b21 b22 b23] a21+b21 a22+b22a23+b23]其中C为结果矩阵,其每个元素等于A和B对应位置上元素的和。
二、矩阵减法矩阵的减法和加法相似,也是将两个相同尺寸的矩阵对应位置的元素相减,得到一个新的矩阵。
设有两个m×n阶的矩阵A和B,它们的减法运算可以表示为C=A-B。
具体的计算方法如下:A = [a11 a12 a13B = [b11 b12 b13C = [a11-b11 a12-b12a13-b13a21 a22 a23] b21 b22 b23] a21-b21 a22-b22 a23-b23]其中C为结果矩阵,其每个元素等于A和B对应位置上元素的差。
三、矩阵乘法矩阵的乘法是指通过将一个m×n阶的矩阵A与一个n×p阶的矩阵B相乘,得到一个m×p阶的矩阵C。
矩阵乘法的计算规则如下:C = A × B其中C矩阵的第i行第j列的元素为A矩阵的第i行与B矩阵的第j列对应元素之积的和。
为了满足矩阵乘法的定义要求,A矩阵的列数必须等于B矩阵的行数。
若A是一个m×n阶的矩阵,B是一个n×p阶的矩阵,则C为一个m×p阶的矩阵。
四、矩阵除法矩阵的除法运算是指通过将一个m×n阶的矩阵A除以一个n×p阶的矩阵B,得到一个m×p阶的矩阵C。
矩阵运算练习题一、基础知识回顾矩阵是数学中的一个重要概念,它由数字按照一定的规律排成的长方形数组组成。
矩阵运算是对矩阵进行各种操作,如加减乘除等。
在本文中,我们将通过一些练习题回顾和巩固矩阵运算的相关知识。
二、矩阵加法与减法1. 设有矩阵 A = [2 3 1] 和矩阵 B = [4 2 6],求矩阵 C = A + B 的值。
解:矩阵C 的每个元素等于矩阵A 和矩阵B 对应位置的元素之和。
则有C = [2+4 3+2 1+6] = [6 5 7]2. 设有矩阵 D = [8 4] 和矩阵 E = [3 1],求矩阵 F = D - E 的值。
解:矩阵F 的每个元素等于矩阵D 和矩阵E 对应位置的元素之差。
则有F = [8-3 4-1] = [5 3]三、矩阵乘法1. 设有矩阵 G = [2 3] 和矩阵 H = [4 1],求矩阵 I = G × H 的值。
解:矩阵 I 的每个元素等于矩阵 G 的行向量与矩阵 H 的列向量对应位置元素的乘积之和。
则有I = [2×4+3×1 2×1+3×1] = [11 5]2. 设有矩阵 J = [1 2] 和矩阵 K = [3 4],求矩阵 L = J × K 的值。
解:矩阵 L 的每个元素等于矩阵 J 的行向量与矩阵 K 的列向量对应位置元素的乘积之和。
则有L = [1×3+2×4 1×3+2×4] = [11 10]四、矩阵的转置1. 设有矩阵 M = [2 4 6] 的转置矩阵为 N,求矩阵 N 的元素。
解:转置矩阵 N 的元素与矩阵 M 的对应位置元素相同。
则有N = [2 4 6]2. 设有矩阵 P = [1 2 3; 4 5 6; 7 8 9] 的转置矩阵为 Q,求矩阵 Q 的元素。
解:转置矩阵 Q 的元素与矩阵 P 的对应位置元素相同。
则有Q = [1 4 7; 2 5 8; 3 6 9]五、矩阵的乘方1. 设有矩阵 R = [1 2; 3 4],求矩阵 R 的平方 R²。
public Matrix Invs(){
int rw=row,rk=rank;
Matrix imat=new Matrix(rw,rk);
Matrix jmat=new Matrix(rw,rk);
for(int i=0;i<rw;i++)
for(int j=0;j<rw;j++)
jmat.mat[i][j]=mat[i][j];
for(int i=0;i<rw;i++)
for(int j=0;j<rw;j++)
imat.mat[i][j]=0;
for(int i=0;i<rw;i++)
imat.mat[i][i]=1;
for(int i=0;i<rw;i++){
for(int j=0;j<rw;j++){
if(i!=j){
double t=jmat.mat[j][i]/jmat.mat[i][i];
for(int k=0;k<rw;k++){
jmat.mat[j][k]-=jmat.mat[i][k]*t;
imat.mat[j][k]-=imat.mat[i][k]*t;}}}
for(int i=0;i<rw;i++)
if(jmat.mat[i][i]!=1){
double t=jmat.mat[i][i];
for(int j=0;j<rw;j++){
jmat.mat[i][j]=jmat.mat[i][j]/t;
imat.mat[i][j]=imat.mat[i][j]/t;}}
return imat;}}
package model;
import java.awt.BorderLayout;
import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.swing.*;
public class Face {
JFrame f=new JFrame("灰色模型");
JPanel p1=new JPanel();
JPanel p2=new JPanel();
JTextField t1=new JTextField(20);
JTextField t2=new JTextField(20);
JButton bb=new JButton("确定");
JLabel l1=new JLabel("原始数据:");
JLabel l2=new JLabel("预测数据:");
float x[];
float xx[]={0};
float z[]={0};
float B[][];
float TB[][];
float inveB[][];
float EE[][]={};
float MM[][];
double y;
protected Object newSource;
float a;
float b;
public void init()
{
p1.add(l1);
p1.add(t1);
p2.add(l2);
p2.add(t2);
f.add(p1,BorderLayout.NORTH);
f.add(p2);
f.add(bb,BorderLayout.SOUTH);
f.setVisible(true);
f.setSize(200, 200);
f.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{
System.exit(0);
}
});
bb.addMouseListener(new MouseAdapter()
{
public void mouseClicked(MouseEvent e)
{
String inputs=t1.getText();
String a[]=inputs.split(",");
for(int i=0;i<a.length;i++)
x[i]=Integer.parseInt(a[i]);
t2.setText(String.valueOf(y));//强制类型转换}
});
}
public static void main(String[] args)
{
new Face().init();
}
public float[] addx(int w[])//把x[]加为xx[]
{
for(int i=0;i<w.length;i++)
for(int j=0;j<=i;j++)
xx[i]=xx[i]+w[j];
return xx;
}
public float[] addz(int a,int xx[])//求出z[]数列
{
for(int i=0;i<xx.length;i++)
z[i+1]=a*xx[i+1]+(1-a)*xx[i];
return z;
}
public float[][] changeB(float m[])//求出B[][]数组来{
for(int i=0;i<2;i++)
for(int j=0;j<m.length;j++)
{ if(i==0)
{
B[j][i]=-m[j+1];
}
else
{
B[j][i]=1;
}
}
return B;
}
public float[][] tB(float e[][])
{
for(int i=0;i<e.length;i++)
for(int j=0;j<e.length;j++)
TB[j][i]=e[i][j];
return TB;
public float[][] invesM(float y[][])//求矩阵的逆矩阵
{
for(int i=0;i<y.length;i++)
for(int j=0;j<y.length;j++)
inveB[i][j]=y[i][j];
for(int i=0;i<y.length;i++ )
EE[i][i]=1;
for(int i=0;i<y.length;i++)
for(int j=0;j<y.length;j++)
if(i!=j)
{
float t=inveB[j][i]/inveB[i][i];
for(int k=0;k<y.length;k++)
{
inveB[j][k]-=inveB[i][k]*t;
EE[j][k]-=EE[i][k]*t;
}
}
for(int i=0;i<y.length;i++)
if(inveB[i][i]!=1)
{
float tt=inveB[i][i];
for(int j=0;j<y.length;j++)
{
inveB[i][j]=inveB[i][j]/tt;
EE[i][j]=EE[i][j]/tt;
}
}
return EE;
}
public float[][] mulitM(float q[][],float h[][])//矩阵的乘法{
for(int i=0;i<q.length;i++)
for(int j=0;j<h.length;j++)
{
float sum=0;
for(int k=0;k<h.length;k++)
sum=sum+q[i][k]*h[k][j];
MM[i][j]=sum;
}
return MM;
}
public double rlt(float f[],int k)
for(int i=0;i<f.length;i++)
{
if(i==0)
a=f[i];
else
b=f[i];
}
y=-a*(x[0]+b/a)*Math.exp(-a*k);
return y;
}
}。