安徽某高校《数学建模》上机习题1选讲(建立范德蒙矩阵;解线性方程组)

(工具:matlab)

第一题:

利用自己的学号建立一个维数为n的行向量a1; (n为学号所含数字个数)

建立n阶Vandermonde(范德蒙)矩阵A, A的第二行向量为a1

【假设笔者学号为:114514】

方法一:直接生成法

最简单直接的方法,调用matlab中的vander()函数直接生成:

clc,clear,close all
A = vander([1,1,4,5,1,4])

但是我们这样做会有一个问题,我们发现生成的矩阵是这样的:

A =

           1           1           1           1           1           1
           1           1           1           1           1           1
        1024         256          64          16           4           1
        3125         625         125          25           5           1
           1           1           1           1           1           1
        1024         256          64          16           4           1

这显然不符合题目的要求:希望我生成的第二行是我的学号114514,

所以我们只需要调用rot90()函数,将我们生成的矩阵逆时针旋转90度就可以了:

clc,clear,close all
A1 = vander([1,1,4,5,1,4])
A2 = rot90(A1)

生成的矩阵A2就是我们的目标矩阵:

A2 =

           1           1           1           1           1           1
           1           1           4           5           1           4
           1           1          16          25           1          16
           1           1          64         125           1          64
           1           1         256         625           1         256
           1           1        1024        3125           1        1024

方法二:“中间矩阵”法

我们也可以先建立两个矩阵A1,B1:

clc,clear,close all
A1 = [1,1,4,5,1,4]
B1 = reshape(0:5,6,1)

它们的结果是:

A1 =

     1     1     4     5     1     4


B1 =

     0
     1
     2
     3
     4
     5

接下来我们利用repmat()函数生成有重复内容的矩阵A2,B2:

clc,clear,close all
A1 = [1,1,4,5,1,4]
B1 = reshape(0:5,6,1)
A2 = repmat(A1,6,1)
B2 = repmat(B1,1,6)

生成的A2,B2:

A2 =

     1     1     4     5     1     4
     1     1     4     5     1     4
     1     1     4     5     1     4
     1     1     4     5     1     4
     1     1     4     5     1     4
     1     1     4     5     1     4


B2 =

     0     0     0     0     0     0
     1     1     1     1     1     1
     2     2     2     2     2     2
     3     3     3     3     3     3
     4     4     4     4     4     4
     5     5     5     5     5     5

我们不难发现,对于我们的目标范德蒙矩阵,A2可以看作目标矩阵的“底数矩阵”,B2可以看作目标矩阵的“指数矩阵”,所以我们只需要将这两个矩阵结合一下:

clc,clear,close all
A1 = [1,1,4,5,1,4]
B1 = reshape(0:5,6,1)
A2 = repmat(A1,6,1)
B2 = repmat(B1,1,6)
M = A2.^B2

就可以生成目标矩阵了:

M =

           1           1           1           1           1           1
           1           1           4           5           1           4
           1           1          16          25           1          16
           1           1          64         125           1          64
           1           1         256         625           1         256
           1           1        1024        3125           1        1024

第二题:解线性方程组

方法一:我们可以利用左除符号“\”,对方程组进行直接求解:

clc,clear,close all
A = [2,5,-8;4,3,-9;2,3,-5;1,8,-7]
B = [8,9,7,12]'
x = A\B

得出结果:

x =

    3.0000
    2.0000
    1.0000

方法二:与左除同理,我们也可以用A的逆矩阵去乘B,然而A是非方阵,非方阵是没有逆矩阵的,但是会存在一个广义逆(也称伪逆),用pinv()函数求得,同样可以帮助我们解决问题:

clc,clear,close all
A = [2,5,-8;4,3,-9;2,3,-5;1,8,-7]
B = [8,9,7,12]'
x = pinv(A)*B

得出结果:

x =

    3.0000
    2.0000
    1.0000

方法三:我们也可以使用linsolve()函数对方程组进行直接求解:

clc,clear,close all
A = [2,5,-8;4,3,-9;2,3,-5;1,8,-7]
B = [8,9,7,12]'
x = linsolve(A,B)

同样可以得出结果:

x =

    3.0000
    2.0000
    1.0000

(如有错误或改进建议欢迎联系作者)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值