matlab 矩阵算法

matlab 矩阵算法,第1张

你所说的可能是指MATLAB的向量化运算(Vectorization)吧?

MATLAB顾名思义,本来就是为向量或矩阵运算设计的,所以很多场合,如果能够使用向量化运算,就应尽量避免使用显式循环(for和while)。这一点是和普通的高级编程语言如C++、Fortran有显著差别的。

举一个简单的例子:生成一个对数表,如果使用循环

x = 01;

for k = 1:1001

y(k) = log10(x);

x = x + 01;

end

而在MATLAB中可以用这种向量化的代码:

x = 01:01:10;

y = log10(x);

二者的差别不仅在于代码量的大小,效率差别也很大。

这方面也没什么特殊的资料,属于比较基础的,如果想用好MATLAB,就请多花点时间把基本功练扎实点(事实上很多人并没做到)。特别提醒一下,很多时候注意使用MATLAB的“点运算 *** 作符”,如, /, ^等。想进一步了解这方面的内容,可以在MATLAB帮助系统里搜索一下Vectorization,有一些相关的主题和例子。

会一个

A=[3,4,-7,-12;5,-7,4,2;1,0,8,-5;-6,5,-2,10];

b=[4;-3;9;-8];

x=A\b

x =

-14841

-06816

05337

-12429

rref(A)

在阶梯形矩阵中,若非零行的第一个非零元素全是1,且非零行的第一个元素1所在列的其余元素全为零,就称该矩阵为行最简形矩阵。例如矩阵:

这是你自己理解错误啦其实符号计算也是根据数值计算进行编程的(三角消元法、高斯消元法,龙哥库塔法等)

出现误差是很正常的千万不要坚信符号计算,毕竟如果真能这样计算那可以解决所以未知问题的方程了显然这是不可能的

funm

function f=fun(x)

f=x^3+10x^2-2sin(x)-50;

>>[x,f,h]=fsolve(@fun,[-4,4])

x =

-2 2

f =

10e-007

-0 0

h =

1

function [mean_a,std_a,rank_a]=myfun(a)

% 函数文件,输入矩阵a=[1 2 3;4 5 6],输出平均数,标准差,秩

vect_a=a(:); % 把矩阵变成向量

mean_a=mean(vect_a); % 求均值

std_a=std(vect_a); % 求标准差

rank_a=rank(a); % 队矩阵求秩

示例:

>> a=[1 2 3;4 5 6];

>> [mean_a,std_a,rank_a]=myfun(a)

mean_a =

35000

std_a =

18708

rank_a =

2

%% 注意要有 “vect_a=a(:); % 把矩阵变成向量 ”这句话,是应为函数mean std 的 *** 作对象是向量,如果没有这句MATLAB会默认对矩阵的每一列求均值和标准差。

方法/步骤

1、单位矩阵创建

在线性代数运算时,常需要单位矩阵E,在matlab中可使用eyes函数,如下所示即为其语法:

Y

=

eye(n)

Y

=

eye(m,n)

Y

=

eye([m

n])

Y

=

eye(size(A))

Y

=

eye

Y

=

eye(m,

n,

classname)

作为示例,常用Y

=

eye(n)指令,比如要3x3单位矩阵,则可以如下指令:

>>

Y

=

eye(3)

输出:

Y

=

1

0

0

0

1

0

0

0

1

2、全零矩阵

在线性代数运算时,有时候需要全零矩阵,可使用zeros函数。

B

=

zeros(n)

B

=

zeros(m,n)

B

=

zeros([m

n])

B

=

zeros(m,n,p,)

B

=

zeros([m

n

p

])

B

=

zeros(size(A))

Y

=

zeros

zeros(m,

n,,classname)

zeros([m,n,],classname)

以上是其全部语法,常用的指令是:B

=

zeros(n)与

B

=

zeros(m,n)如下:

>>

B

=

zeros(3)

输出:

B

=

0

0

0

0

0

0

0

0

0

3、元素全为1阵

在矩阵运算时,会遇到元素全为1矩阵,此时可以借助于ones函数。

Y

=

ones(n)

Y

=

ones(m,n)

Y

=

ones([m

n])

Y

=

ones(m,n,p,)

Y

=

ones([m

n

p

])

Y

=

ones(size(A))

Y

=

ones

ones(m,

n,,classname)

ones([m,n,],classname)

如上是其全部语法,其中常用的还是:Y

=

ones(n)

Y

=

ones(m,n)

如下示例:

>>

Y

=

ones(3)

输出:

Y

=

1

1

1

1

1

1

1

1

1

4、随机矩阵

在概率分析或是数理推断时常需要借助随机矩阵,在matlab中可使用rand函数实现,其语法如下:

r

=

rand(n)

r

=

rand(m,n)

r

=

rand([m,n])

r

=

rand(m,n,p,)

r

=

rand([m,n,p,])

r

=

rand

r

=

rand(size(A))

r

=

rand(,

'double')

r

=

rand(,

'single')

当然,常用的指令还是:

r

=

rand(n)

r

=

rand(m,n)

示例:

>>

r

=

rand(3,2)

输出的是3行2列的随机矩阵:

r

=

08147

09134

09058

06324

01270

00975

5、对角阵

在矩阵分析与计算时,尤其是计算矩阵的秩时,常会化简矩阵为对角阵,尤其是方阵分析。在matlab中可借助diag函数求特定矩阵的对角阵,如下示例:

>>

A

=

[1,2,3;

4,5,6;

7,8,9];

输入的矩阵A是3x3方阵,输入如下指令:

>>

diag(A)

函数输出如下图所示:

6、提取矩阵三角部分

有时候需要提取矩阵的下三角亦或是下三角元素,可以使用tril或triu提取。

输入矩阵:

>>

A

=

[1,2,3;

4,5,6;

7,8,9];

下三角提取:

>>

trilow

=

tril(A)

输出:

trilow

=

1

0

0

4

5

0

7

8

9

上三角提取:

>>

triup

=

triu(A)

输出:

triup

=

1

2

3

0

5

6

0

0

9

7、其它

作为矩阵运算实验室,matlab提供许多矩阵运算指令例如矩阵翻转指令flipud、fliplr,矩阵重排reshape、矩阵求秩rank等,大家可以查阅帮助文件了解其语法。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/11671439.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-05-17
下一篇2023-05-17

发表评论

登录后才能评论

评论列表(0条)

    保存