当前位置:文档之家› Matlab 讲义ch3-1

Matlab 讲义ch3-1

Matlab 讲义ch3-1
Matlab 讲义ch3-1

第三章 数值数组及向量化运算

数值数组(Numeric Array )和数组运算(Array Operations )始终是MATLAB 的核心内容。本书从第3章起,全部注意力将集中于数值数组及其运算。

本章系统阐述:数组浮点算法的特点;一、二维数值数组的创建和寻访;数组运算和向量化编程;实现数组运算的基本函数;常用标准数组生成函数和数组构作技法;非数NaN 、“空”数组概念和应用;关系和逻辑操作。

3.1 数值计算的特点和地位

【例3.1-1】已知

t t t f cos )(2=,求dt t f x s x

?= 0

)()(。

(1)符号计算解法

syms t x %定义符号变量 ft=t^2*cos(t) %定义函数 sx=int(ft,t,0,x) %符号积分 ft =

t^2*cos(t) sx =

x^2*sin(x)-2*sin(x)+2*x*cos(x)

说明:

1. 符号计算可以得到和手工数学推导相同的结果;

2. 可以得到精确的解析结果

(2)数值计算解法

dt=0.05; %定义采样间隔 t=0:dt:5; %定义数值积分的计算区域,数值计算只在有限的区间的采样点进行 Ft=t.^2.*cos(t); %定义计算的函数 Sx=dt*cumtrapz(Ft); %数值积分,计算从0开始到每个采样点位置的区间内,Ft 曲线 %下的面积,此面积由宽度为t 的小梯形面积累加而成;

%下面分步看一下计算结果: whos

bar(t,Ft) %Ft 函数的数值 hold on

plot(t,Sx,'.r','MarkerSize',12) %数值积分结果 axis(0,6,-25,10) hold off

Name Size Bytes Class

Ft 1x101 808 double array Sx 1x101 808 double array dt 1x1 8 double array t 1x101 808 double array

xqxqxq1234 1x1 1 logical array

说明:

1.进行数值计算,必须首先确定一组自变量采样点,即确定一个自变量的取值区间,并设定取样

间隔;

2.数值计算的表达式都是在意志的数值采样点进行计算;

3.数值计算的结果也是离散的;

4.再将数值计算的结果扩展到更大的计算区域时不一定成立;

5.直接观察计算结果的离散数值难以看出函数关系,但图形有利于加深对函数的认识。

【例3.1-2】已知

)

sin(

)(t

e

t

f-

=,求?=4

)(

)

(dt

t

f

x

s。

(1)符号计算解法

syms t x

ft=exp(-sin(t))

sx=int(ft,t,0,4)

ft =

exp(-sin(t))

Warning: Explicit integral could not be found.

> In sym.int at 58

sx =

int(exp(-sin(t)),t = 0 .. 4)

说明:符号计算的能力有限,不是在任何情况下都可以得到计算结果;

(2)数值计算解法

dt=0.05;

t=0:dt:4;

Ft=exp(-sin(t));

Sx=dt*cumtrapz(Ft);

Sx(end)

bar(t,Ft)

hold on

plot(t,Sx,'.r','MarkerSize',15)

hold off

xlabel('x')

legend('Ft','Sx')

hold off

ans =

说明:数值计算的应用非常广泛,只要给定计算区间、采用点和计算表达式,总是可以得到数值计算的结果。

3.2 数值数组的创建和寻访

3.2.1 一维数组的创建

1递增/减型一维数组的创建

主要特征:

(1)数组元素值的大小按照递增或者递减的顺序排列,元素之间的“差”是固定的或者“等步长”的。

(2)主要用作函数的自变量,for循环中的自变量等。

创建方法:

(1)“冒号”生成法

格式: x = a : inc :b

说明:x----变量名称;

a/ b-----起点/终点

inc -----步长(正数或者负数)

例子:

(1)i = 0:1:10

i =

0 1 2 3 4 5 6 7 8 9 10

(2)i = 0:10

i =

0 1 2 3 4 5 6 7 8 9 10

说明:缺省的步长是1;

(3) i = 0:1:8.5

ans =

0 1 2 3 4 5 6 7 8

(4) i = 0.5:1:10

i =

0.5000 1.5000 2.5000 3.5000 4.5000 5.5000 6.5000 7.5000 8.5000 9.5000

说明:当abs(b-a)不能被inc整除,生成的最后一个元素将小于b;

(5) i = 10:-1:0

i =

10 9 8 7 6 5 4 3 2 1 0

(6) i = 10:-1:20

i =

Empty matrix: 1-by-0

说明:步长可以为负数,但此时前面的元素必须大于后面的。

(2)线性(或者对数)定点法

格式:

x=linspace(a,b,n) %以a,b为左右端点,产生线性等间隔的(1*n)行数组;

x=logspace(a,b,n) %以10^a,10^b为左右端点,产生对数等间隔的(1*n)行数组;

xl=linspace(0,10,9)

xl =

0 1.2500 2.5000 3.7500 5.0000 6.2500 7.5000 8.7500 10.0000

说明:x=linespace(a,b,n) <===> x=a:(b-a)/(n-1):b

xl=logspace(1,4,4)

xl =

10 100 1000 10000

说明:logspace(x1,x2,N)用于在10^x1 and 10^x2之间产生N个对数均匀间隔的点。

2 通用型一维数组的创建

(1)逐个元素输入法,最简单而通用的方法。如:

y=[1,2, sin(pi/5),-exp(-3)]

y =

1.0000

2.0000 0.5878 -0.0498

(2)使用Matlab函数生成,如rand(1,n), ones(1,n)

rand(1,10) %在[0,1]之间产生(1*10)的向量;

ans =

0.9501 0.2311 0.6068 0.4860 0.8913 0.7621 0.4565 0.0185 0.8214 0.4447

rand(5,5)

ans =

0.6154 0.4057 0.0579 0.2028 0.0153

0.7919 0.9355 0.3529 0.1987 0.7468

0.9218 0.9169 0.8132 0.6038 0.4451

0.7382 0.4103 0.0099 0.2722 0.9318

0.1763 0.8936 0.1389 0.1988 0.4660

rand(5,5)

ans =

0.5548 0.2731 0.9084 0.6408 0.9943

0.1210 0.2548 0.2319 0.1909 0.4398

0.4508 0.8656 0.2393 0.8439 0.3400

0.7159 0.2324 0.0498 0.1739 0.3142

0.8928 0.8049 0.0784 0.1708 0.3651

补充说明:为了让前面出现过的随机数再次重复出现,需要对随机数生成器的“状态state”或

者“种子seed”进行设置。

rand('state',0) %设置随机数生成器的状态

rand(1,5)

ans =

0.9501 0.2311 0.6068 0.4860 0.8913

rand('state',0) %设置随机数生成器的状态

rand(1,5)

ans =

0.9501 0.2311 0.6068 0.4860 0.8913

ones(3,8)

ans =

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

1 1 1 1 1 1 1 1

思考题、练习题:

(1)如何生成在(60,100)之间均匀随机分布的(5*8)的矩阵?如何取整数呢?(2)产生列数组 x2 = (1:6)' x2 = linspace(0,pi,4)'

思考题答案:

(1) round(60+rand(5,8).*40)

ans =

97 65 83 61 84 83 88 66 87 68 78 75 84 62 63 87 69 84 62 87 61 75 78 88 94 85 61 64 61 85 78 89 85 75 73 61 68 89 74 79 (2)

x2 = (1:6)'

x2 =

1

2

3

4

5

6

x2 = linspace(0,pi,4)'

x2 =

1.0472

2.0944

3.1416

其他函数说明:

rand() %生成均匀分布的随机数组;

randn() %生成正态分布的随机数组;

round() %四舍五入取整数

zeros() %产生0

eye(N) %产生N*N的单位矩阵

eye(5)

ans =

1 0 0 0 0

0 1 0 0 0

0 0 1 0 0

0 0 0 1 0

0 0 0 0 1

3.2.2二维数组的创建

一种方法是采用手工输入法,另外还有如下方法。

1小规模数组的直接输入法

【例3.2-2】在MATLAB环境下,用下面三条指令创建二维数组C。

a=2.7358,b=33/79

C=[1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+i]

a =

2.7358

b =

0.4177

C =

1.0000 5.4716 + 0.4177i 0.6909

0.7071 4.8244 3.5000 + 1.0000i

2中规模数组的数组编辑器创建法

在数组规模比较大了之后,就不适合采用直接手工输入方法了,可以采用数组编辑器。

3( 的数组。

【例3.2-3】根据现有数据创建一个)8

图3.2-1 利用数组编辑器创建中规模数组

3中规模数组的M文件创建法

(1)对于常用的数组,可以保存在一个mat文件中,然后就可以在后面调用了。

举例:

clear

a = (1:10);

b = (11:20);

c = (21: 30);

d = [a;b;c]

save myMatrix d;

clear

load myMatrix

d =

1 2 3 4 5 6 7 8 9 10

11 12 13 14 15 16 17 18 19 20

21 22 23 24 25 26 27 28 29 30

如果要通过运行m文件产生数组,可以在m文件中编辑数组,然后再运行m文件即可。

如:在myMatirx.m文件中输入如下内容,然后运行myMatrix.m就可以载入该数组。

%Construct 2D matrix

d = [1 2 3 4 5 6 7 8 9 10

11 12 13 14 15 16 17 18 19 20

21 22 23 24 25 26 27 28 29 30]

【例3.2-4】创建和保存数组 AM的 MyMatrix.m 文件。

(1)打开文件编辑调试器,并在空白填写框中输入所需数组(见图3.2-2)。

(2)最好,在文件的首行,编写文件名和简短说明,以便查阅(见图3.2-2)。

(3)保存此文件,并且文件起名为 MyMatrix.m 。

(4)以后只要在MATLAB指令窗中,运行MyMatrix.m文件,数组AM 就会自动生成于MATLAB内存中。

图3.2-2 利用M文件创建数组

4利用MATLAB函数创建数组

用于产生特殊二维数组/矩阵的函数如下:

diag() %产生对角数组

eye() %产生单位数组

magic() %产生魔方数组

rand() %产生随机数

randn()

random()

3.2.3二维数组元素的标识和寻访

【例3.2-6】本例演示:数组元素及子数组的各种标识和寻访格式;冒号的使用;end的作用。A=zeros(2,6)

A(:)=1:12

A =

0 0 0 0 0 0

0 0 0 0 0 0

A =

1 3 5 7 9 11

2 4 6 8 10 12

A(2,4)

A(8)

ans =

8

ans =

8

A(:,[1,3])

A([1,2,5,6]')

ans =

1 5

2 6

ans =

1

2

5

6

A(:,4:end) %双下标,显示从第四列到最后一列的所有元素。end表示最后一列ans =

7 9 11

8 10 12

A(2,1:2:5)=[-1,-3,-5]

A =

1 3 5 7 9 11

-1 4 -3 8 -5 12

A(2,[1:2:5])=[-1,-3,-5]

A =

1 3 5 7 9 11

-1 4 -3 8 -5 12

A(2,[1,2,5])=[-1,-3,-5]

A =

1 3 5 7 9 11

-1 -3 -3 8 -5 12

B=A([1,2,2,2],[1,3,5] )

B =

1 5 9

-1 -3 -5

-1 -3 -5

-1 -3 -5

L=A<3

A(L)=NaN

L =

1 0 0 0 0 0

1 0 1 0 1 0

A =

NaN 3 5 7 9 11

NaN 4 NaN 8 NaN 12

3.2.4数组构作技法综合

下面的指令完成数组的反转、提取、插入、收缩、重组等操作,用于对已经生成的数组进行修

【例 3.2-7】数组操作函数reshape, diag, repmat的用法;空阵 [ ] 删除子数组的用法。

a=1:8

A=reshape(a,4,2)

A=reshape(A,2,4)

a =

1 2 3 4 5 6 7 8

A =

1 5

2 6

3 7

4 8

A =

1 3 5 7

2 4 6 8

b=diag(A)

B=diag(b)

b =

1

4

B =

1 0

0 4

D1=repmat(B,2,4)

D1 =

1 0 1 0 1 0 1 0

0 4 0 4 0 4 0 4

1 0 1 0 1 0 1 0

0 4 0 4 0 4 0 4

D1([1,3],: )=[ ]

D1 =

0 4 0 4 0 4 0 4

0 4 0 4 0 4 0 4 【例3.2-8】函数flipud, fliplr, rot90对数组的操作体现着“矩阵变换”。A=reshape(1:9,3,3)

A =

1 4 7

2 5 8

3 6 9

B=flipud(A)

B =

3 6 9

2 5 8

1 4 7

C=fliplr(A)

C =

7 4 1

8 5 2

9 6 3

D=rot90(A) %旋转一次

D =

7 8 9

4 5 6

1 2 3

D=rot90(A,2) %旋转2次

D =

9 6 3

8 5 2

7 4 1

3.3 数组运算

1.数组运算的由来和规则

函数关系数值计算模型的分类

提高程序执行性能的三大措施

数组运算规则

A = reshape(1:9,3,3)

A =

1 4 7

2 5 8

3 6 9

B= reshape(10:18,3,3)

B =

10 13 16

11 14 17

12 15 18

转置运算

A'

ans =

1 2 3

4 5 6

7 8 9

A.'

ans =

1 2 3

4 5 6

7 8 9

A+B

ans =

11 17 23

13 19 25

15 21 27

A.+B

??? Error: Unexpected MATLAB operator. A-B

ans =

-9 -9 -9

-9 -9 -9

-9 -9 -9

A.-B

??? Error: Unexpected MATLAB operator.

说明:

对于数组运算,.+ 与 +相同,.-与-相同

A.*B %数组计算

ans =

10 52 112

22 70 136

36 90 162

A*B %矩阵计算

ans =

138 174 210

171 216 261

204 258 312

说明:注意数组计算与矩阵计算的差别。

A./B

ans =

0.1000 0.3077 0.4375

0.1818 0.3571 0.4706

0.2500 0.4000 0.5000

B.\A

ans =

0.1000 0.3077 0.4375

0.1818 0.3571 0.4706

0.2500 0.4000 0.5000

A.\B

ans =

10.0000 3.2500 2.2857

5.5000 2.8000 2.1250

4.0000 2.5000 2.0000

B./A

ans =

10.0000 3.2500 2.2857

5.5000 2.8000 2.1250

4.0000 2.5000 2.0000

说明:注意\,/的差别:

A.^B

ans =

1.0e+017 *

0.0000 0.0000 0.0003

0.0000 0.0000 0.0225

0.0000 0.0000 1.5009

B.^A

ans =

1.0e+011 *

0.0000 0.0000 0.0027

0.0000 0.0000 0.0698

0.0000 0.0001 1.9836

a = 5;

a+A

ans =

6 9 12

7 10 13

8 11 14

a.+A

??? Error: Unexpected MATLAB operator.

说明:对于一个标量和一个数组的运算,不需要使用“.”运算符。a-A

ans =

4 1 -2

3 0 -3

2 -1 -4

a.-A

??? Error: Unexpected MATLAB operator.

说明:对于一个标量和一个树组的加,减运算,不需要使用“.”运算符。例子:数组乘法运算:

a.*A

ans =

5 20 35

10 25 40

15 30 45

A.*a

ans =

5 20 35

10 25 40

15 30 45

例子:数组除法运算

a./A

ans =

5.0000 1.2500 0.7143

2.5000 1.0000 0.6250

1.6667 0.8333 0.5556

a.\A

ans =

0.2000 0.8000 1.4000

0.4000 1.0000 1.6000

0.6000 1.2000 1.8000

A./a

ans =

0.2000 0.8000 1.4000

0.4000 1.0000 1.6000

0.6000 1.2000 1.8000

说明:对于数组和标量得乘法和除法运算,必须使用“.”,注意\,/的差别。

a.^A

ans =

5 625 78125

25 3125 390625

125 15625 1953125

A.^a

ans =

1 1024 16807

32 3125 32768

243 7776 59049

注意:下面进行的是矩阵运算,不是数组运算。

a*A

ans =

5 20 35

10 25 40

15 30 45

A*a

ans =

5 20 35

10 25 40

15 30 45

a/A

??? Error using ==> mrdivide

Matrix dimensions must agree.

a\A

ans =

0.2000 0.8000 1.4000

0.4000 1.0000 1.6000

0.6000 1.2000 1.8000

说明:这里进行的不是数组运算,而是矩阵运算。

总结:

(1)数组运算中,两个数组的乘除等都需要使用“.”运算;

(2)数组运算中,一个标量和一个数组的加减运算可以省略“.”运算;

(3)数组运算中,一个标量和一个数组的乘除运算不可以省略“.”运算,否则变成了矩阵运算。

思考题:

1为了对班级50名同学的学年综合测评的智育成绩进行统计,假设共有Eng, PE,

Phy,Chn, Mth五门课程,分别用5*10的数组表示,学号为k的同学(k=1:50)

的课程成绩存储在五个数组中的第k个元素上,任何一门课程的成绩都在(60,

100)之间均匀分布且为整数。五门课程的学分为credit= [3,5,4,2,4],请

完成如下统计:

(1)统计各门课程的平均分,存入变量meanScore中;

(2)统计班级学生的加权平均分;

(3)统计加权平均分为60~69分的同学的数量,存入数组a;

(4)统计加权平均分为70~79分的同学的数量,存入数组b;

(5)统计加权平均分为80~89分的同学的数量,存入数组c;

(6)统计加权平均分为90分及以上的同学的数量,存入数组d;

(7)将如上四个分数段的同学的数量存入数组E中。

Eng = round(60+(rand(5,10)*40))

Eng =

98 90 85 76 62 68 61 77 94 80

69 78 92 97 74 68 90 94 61 88

84 61 97 97 93 84 78 81 87 77

79 93 90 76 60 71 97 68 75 72

96 78 67 96 66 68 79 87 93 68

PE = round(60+(rand(5,10)*40))

PE =

68 88 80 86 89 88 92 99 65 86

87 75 96 74 72 82 98 71 60 71

72 94 93 72 94 78 81 70 96 79

82 94 86 74 83 88 95 95 68 63

66 84 93 81 75 85 67 89 72 100

Phy = round(60+(rand(5,10)*40))

Phy =

83 69 68 83 77 99 69 76 87 68

77 83 75 92 72 100 86 90 69 84

81 90 91 62 95 92 73 71 94 85

73 81 87 84 61 78 98 78 85 75

77 86 78 62 91 80 89 97 65 83

Chn = round(60+(rand(5,10)*40))

Chn =

78 75 84 62 63 87 65 70 69 68

62 87 61 75 78 88 78 95 70 94

61 64 61 85 78 89 89 69 62 67

73 61 68 89 74 79 96 92 63 67

61 84 83 88 66 82 71 96 86 100

Mth = round(60+(rand(5,10)*40))

Mth =

78 84 97 86 65 87 77 78 72 82

74 65 71 99 93 74 94 78 62 76

73 62 66 87 77 67 80 76 88 68

75 78 95 95 96 66 93 96 86 85

76 95 70 60 89 68 78 60 99 89

credit = [3,5,4,2,4]

credit =

3 5

4 2 4

credit(1)

ans =

3

credit(1).*Eng

ans =

294 270 255 228 186 204 183 231 282 240

207 234 276 291 222 204 270 282 183 264

252 183 291 291 279 252 234 243 261 231

237 279 270 228 180 213 291 204 225 216

288 234 201 288 198 204 237 261 279 204

credit(2).*PE

ans =

340 440 400 430 445 440 460 495 325 430

435 375 480 370 360 410 490 355 300 355

360 470 465 360 470 390 405 350 480 395

410 470 430 370 415 440 475 475 340 315

330 420 465 405 375 425 335 445 360 500

Sum = credit(1).*Eng + credit(2).*PE + credit(3).*Phy+

credit(4).*Chn+credit(5).*Mth

Sum =

Columns 1 through 9

1434 1472 1483 1458 1325 1562 1357 1482 1381

1370 1375 1462 1575 1398 1486 1636 1499 1147

1350 1389 1506 1417 1593 1456 1429 1319 1593

1385 1507 1564 1492 1371 1387 1722 1559 1375

1352 1546 1424 1357 1425 1385 1382 1526 1467

Column 10

1406

1447

1372

1305

1592

sumCredit = sum(credit)

sumCredit =

18

meanScore = round(Sum/sumCredit)

meanScore =

80 82 82 81 74 87 75 82 77 78 76 76 81 88 78 83 91 83 64 80 75 77 84 79 89 81 79 73 89 76 77 84 87 83 76 77 96 87 76 73

75 86 79 75 79 77 77 85 82 88

B = meanScore

B =

80 82 82 81 74 87 75 82 77 78 76 76 81 88 78 83 91 83 64 80 75 77 84 79 89 81 79 73 89 76 77 84 87 83 76 77 96 87 76 73 75 86 79 75 79 77 77 85 82 88

L6069 = meanScore<70

L6069 =

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

0 0 0 0 0 0 0 0 0 0

a = sum(sum(L6069))

a =

1

L7079 = 70<=meanScore & meanScore<80

L7079 =

0 0 0 0 1 0 1 0 1 1

1 1 0 0 1 0 0 0 0 0 1 1 0 1 0 0 1 1 0 1 1 0 0 0 1 1 0 0 1 1

1 0 1 1 1 1 1 0 0 0

b = sum(sum(L7079))

b =

24

L8089 = 80<=meanScore & meanScore<90

L8089 =

1 1 1 1 0 1 0 1 0 0

《应用计算方法教程》matlab作业二

6-1 试验目的计算特征值,实现算法 试验容:随机产生一个10阶整数矩阵,各数均在-5和5之间。 (1) 用MATLAB 函数“eig ”求矩阵全部特征值。 (2) 用幂法求A 的主特征值及对应的特征向量。 (3) 用基本QR 算法求全部特征值(可用MATLAB 函数“qr ”实现矩阵的QR 分解)。 原理 幂法:设矩阵A 的特征值为12n ||>||||λλλ≥???≥并设A 有完全的特征向量系12,,,n χχχ???(它们线性无关),则对任意一个非零向量0n V R ∈所构造的向量序列1k k V AV -=有11()lim ()k j k k j V V λ→∞ -=, 其中()k j V 表示向量的第j 个分量。 为避免逐次迭代向量k V 不为零的分量变得很大(1||1λ>时)或很小(1||1λ<时),将每一步的k V 按其模最大的元素进行归一化。具体过程如下: 选择初始向量0V ,令1max(),,,1k k k k k k k V m V U V AU k m +===≥,当k 充分大时1111,max()max() k k U V χλχ+≈ ≈。 QR 法求全部特征值: 111 11222 111 ,1,2,3,k k k k k A A Q R R Q A Q R k R Q A Q R +++==????==??=???? ??????==?? 由于此题的矩阵是10阶的,上述算法计算时间过长,考虑采用改进算法——移位加速。迭 代格式如下: 1 k k k k k k k k A q I Q R A R Q q I +-=?? =+? 计算k A 右下角的二阶矩阵() () 1,1 1,() (),1 ,k k n n n n k k n n n n a a a a ----?? ? ??? 的特征值()()1,k k n n λλ-,当()()1,k k n n λλ-为实数时,选k q 为()()1,k k n n λλ-中最接近(),k n n a 的。 程序

matlab的RBF-BP神经网络讲义

matlab的RBF BP神经网络讲义 一、RBF神经网络 1985年,Powell提出了多变量插值的径向基函数(Radical Basis Function,RBF)方法, 1988年,Moody和Darken提出了一种神经网络结构,即RBF神经网络。 RBF网络是一种三层前向网络,其基本思想是:(1)用RBF作为隐单元的“基”构成隐含层空间,将输入矢量直接(即不需要通过权连接)映射到隐空间(2)当RBF的中心点确定后,映射关系也就确定(3)隐含层空间到输出空间的映射是线性的。 newrb()函数 功能 建立一个径向基神经网络 格式 net = newrb(P,T,GOAL,SPREAD,MN,DF) 说明 P为输入向量,T为目标向量,GOAL为圴方误差,默认为0,SPREAD为径向基函数的分布密度,默认为1,MN为神经元的最大数目,DF为两次显示之间所添加的神经元神经元数目。 例子: 设[P,T]是训练样本,[X,Y]是测试样本; net=newrb(P,T,err_goal,spread); %建立网络 q=sim(net,p); e=q-T; plot(p,q); %画训练误差曲线 q=sim(net,X); e=q-Y; plot(X,q); %画测试误差曲线 二、BP神经网络 训练前馈网络的第一步是建立网络对象。函数newff()建立一个可训练的前馈网络。这需要4个输入参数。 第一个参数是一个Rx2的矩阵以定义R个输入向量的最小值和最大值。 第二个参数是一个设定每层神经元个数的数组。 第三个参数是包含每层用到的传递函数名称的细胞数组。 最后一个参数是用到的训练函数的名称。 举个例子,下面命令将创建一个二层网络。它的输入是两个元素的向量,第一层有三个神经元(3),第二层有一个神经元(1)。 第一层的传递函数是tan-sigmoid,输出层的传递函数是linear。 输入向量的第一个元素的范围是-1到2[-1 2],输入向量的第二个元素的范围是0到5[0 5],训练函数是traingd。 net=newff([-1 2; 0 5],[3,1],{'tansig','purelin'},'traingd'); 这个命令建立了网络对象并且初始化了网络权重和偏置,因此网络就可以进行训练了。 我们可能要多次重新初始化权重或者进行自定义的初始化。 下面就是初始化的详细步骤。 在训练前馈网络之前,权重和偏置必须被初始化。初始化权重和偏置的工作用命令init来实

计算方法_全主元消去法_matlab程序

%求四阶线性方程组的MA TLAB程序 clear Ab=[0.001 2 1 5 1; 3 - 4 0.1 -2 2; 2 -1 2 0.01 3; 1.1 6 2.3 9 4];%增广矩阵 num=[1 2 3 4];%未知量x的对应序号 for i=1:3 A=abs(Ab(i:4,i:4));%系数矩阵取绝对值 [r,c]=find(A==max(A(:))); r=r+i-1;%最大值对应行号 c=c+i-1;%最大值对应列号 q=Ab(r,:),Ab(r,:)=Ab(i,:),Ab(i,:)=q;%行变换 w=Ab(:,c),Ab(:,c)=Ab(:,i),Ab(:,i)=w;%列变换 n=num(i),num(i)=num(c),num(c)=n;%列变换引起未知量x次序变化for j=i:3 Ab(j+1,:)=-Ab(j+1,i)*Ab(i,:)/Ab(i,i)+Ab(j+1,:);%消去过程 end end %最后得到系数矩阵为上三角矩阵 %回代算法求解上三角形方程组 x(4)=Ab(4,5)/Ab(4,4); x(3)=(Ab(3,5)-Ab(3,4)*x(4))/Ab(3,3); x(2)=(Ab(2,5)-Ab(2,3)*x(3)-Ab(2,4)*x(4))/Ab(2,2); x(1)=(Ab(1,5)-Ab(1,2)*x(2)-Ab(1,3)*x(3)-Ab(1,4)*x(4))/Ab(1,1); for s=1:4 fprintf('未知量x%g =%g\n',num(s),x(s)) end %验证如下 %A=[0.001 2 1 5 1; 3 -4 0.1 -2 2;2 -1 2 0.01 3; 1.1 6 2.3 9 4]; %b=[1 2 3 4]'; %x=A\b; %x1= 1.0308 %x2= 0.3144 %x3= 0.6267 %x4= -0.0513

MatLab讲义

2011年数学中国国赛培训讲座 Matlab的基础及数学建模中的应用 周吕文:zhou.lv.wen@https://www.doczj.com/doc/975971323.html, 大连大学数学建模工作室&中国科学院力学研究所 2011年7月

第一部分 MatLab基础 1 简单介绍 MATLAB是Matrix Laboratory“矩阵实验室”的缩写。MatLab语言是由美国的Clever Moler博士于1980年开发的,初衷是为解决“线性代数”课程的矩阵运算问题。1984年由美国 MathWorks公司推向市场,历经十多年的发展与竞争,现已成为国际公认的最优秀的工程应用开发环境。MATLAB功能强大、简单易学、编程效率高,深受广大科技工作者的欢迎。 在数学建模竞赛中,由于只有短短的三到四天,而论文的评判不仅注重计算的结果更注重模型的创造性等很多方面,因此比赛中把大量的时间花费在编写和调试程序上只会喧宾夺主,是很不值得的。使用MATLAB 可以很大程度上的方便计算、节省时间,使我们将精力更多的放在模型的完善上,所以是较为理想的。 这里快速的介绍一下MATLAB与数学建模相关的基础知识,并列举一些简单的例子,很多例子都是源于国内外的数学建模赛题。希望能帮助同学们在短时间内方便、快捷的使用MATLAB 解决数学建模中的问题。当然要想学好MatLab更多的依赖自主学习,一个很好的学习MatLab的方法是查看MatLab的帮助文档: z如果你知道一个函数名,想了解它的用法,你可以用'help'命令得到它的帮助文档:>>help functionname z如果你了解含某个关键词的函数,你可以用'lookfor'命令得到相关的函数: 2 基本命令与函数 基本运算 z变量的赋值 实数赋值>> x=5; 复数赋值>> x=5+10j; (或>>x=5+10i) z向量的一般值方法 行向量赋值:>>x=[1 2 3]; (或x=[1, 2 ,3]) 列向量赋值:>>y=[1;2;3]; 矩阵的赋值:>>x=[1 2 3; 4 5 6; 7 8 9]; z常用矩阵(zeros ones eye) n行m列0矩阵:>>x=zeros(n,m); n行m列1矩阵:>>x=ones(n,m); n 阶的单位阵:>>y=eye(n); z矩阵行列操作 >> A=[1 2 3;4 5 6;7 8 9] A= 1 2 3 4 5 6 7 8 9 >>x=A(1,3) %取第一行的第三列元素 x= 3

天津大学matlab讲义-应用基础第一章

MATLAB应用基础 赵国瑞 天津大学电子信息工程学院 计算机基础教学部 2000.3 制作

概述 MATLAB是世界流行的优秀科技应用软件之一。具有功能强大(数值计算、符号计算、图形生成、文本处理及多种专业工具箱)、界面友好,可二次开发等特点。 自1984年由美国MathWorks公司推向市场以来,先后发布了多个版本,1993年发布4.0版,1996年发布5.0版,1999年发布5.3版。目前发布的为6.5版。 MATLAB有专业和学生版之分。二者功能相同,但计算规模和计算难度有差别。 在国内外,已有许多高等院校把MATLAB列为本科生、研究生必须掌握的基本技能。我校自1999年列为研究生选修课程。而且有很多教师、研究生把它作为进行科研的重要工具。 国内关于MATLAB的书籍很多,如: 《精通MATLAB 5.3》张志涌等编著北京航空航天大学出版社,2000.8 《科学计算语言MATLAB简明教程》杜藏等编著南开大学出版社,1999.6 《精通MATLAB 5》张宜华编写清华大学出版社,1999.6 《精通MATLAB--综合辅导与指南》 Duane Hanselman、Bruce Littlefield编著李人厚等译较西安交通大学出版社,1998.1 等等 本课程主要介绍MATLAB 5.3的基本功能和基础知识。至于其包含的多种工具箱,如仿真工具箱、解非线性方程(组)工具箱、优化工具箱等,应通过本学习后,结合各专业自己进一步学习和使用。 第1章MATLAB基础 1.1 源文件(M-文件) 分为两类:函数文件和非函数文件。 都用扩展名.M 1.1.1函数文件 格式1(无返回值函数) function函数名(输入表) %称为函数头 函数体 例如: function box(opt_box); %BOX Axis box. % BOX ON adds a box to the current axes. % BOX OFF takes if off. % BOX, by itself, toggles the box state. % % BOX sets the Box property of the current axes. % % See also GRID, AXES. % Copyright (c) 1984-98 by The MathWorks, Inc. % $Revision: 1.5 $ $Date: 1997/11/21 23:32:59 $

MATLAB讲义

第一章基础准备及入门 什么是MATLAB? MATLAB是MathWorks公司于1984年推出的数学软件,是一种用于科学工程计算的高效率的高级语言。MATLAB最初作为矩阵实验室(Matrix Laboratory),主要向用户提供一套非常完善的矩阵运算命令。随着数值运算的演变,它逐渐发展成为各种系统仿真、数字信号处理、科学可是化的通用标准语言。 在科学研究和工程应用的过程中,往往需要大量的数学计算,传统的纸笔和计算机已经不能从根本上满足海量计算的要求,一些技术人员尝试使用Basic,Fortran,C\C++等语言编写程序来减轻工作量。但编程不仅需要掌握所用语言的语法,还需要对相关算法进行深入分析,这对大多数科学工作者而言有一定的难度。与这些语言相比, MATLAB的语法更简单,更贴近人的思维方式。用MATLAB编写程序,犹如在一张演算纸上排列公式和求解问题一样高效率,因此被称为“科学便笺式”的科学工程计算语言。 MATLAB由主包和功能各异的工具箱组成,其基本数据结构是矩阵。正如其名“矩阵实验室”,MATLAB起初主要是用来进行矩阵运算。经过MathWorks 公司的不断完善,时至今日,MATLAB已经发展成为适合多学科、多工作平台的功能强大的大型软件。 本章有两个目的:一是讲述MATLAB正常运行所必须具备的基础条件;二是简明系统地介绍高度集成的Desktop操作桌面的功能和使用方法。 本章的前两节分别讲述:MATLAB的正确安装方法和MATLAB 环境的启动。因为指令窗是MATLAB最重要的操作界面,所以本章用第 1.3、1.4 两节以最简单通俗的叙述、算例讲述指令窗的基本操作方法和规则。这部分内容几乎对MATLAB各种版本都适用。 MATLAB6.x 不同于其前版本的最突出之处是:向用户提供前所未有的、成系列的交互式工作界面。了解、熟悉和掌握这些交互界面的基本功能和操作方法,将使新老用户能事半功倍地利用MATLAB去完成各种学习和研究。为此,本章特设几节用于专门介绍最常用的交互界面:历史指令窗、当前目录浏览器、工作空间浏览器、内存数组编辑器、交互界面分类目录窗、M文件编辑/调试器、及帮助导航/浏览器。 本章是根据MATLAB6.5版编写的,但大部分内容也适用于其他6.x版。 1.1M ATLAB的安装和内容选择

MATLAB软件基础知识讲义(doc 74页)

MATLAB软件基础 §1MATLAB 概述 MATLAB 是MATrix LABoratory(“矩阵实验室”)的缩写,是由美国MathWorks 公司开发的集数值计算、符号计算和图形可视化三大基本功能于一体的,功能强大、操作简单的语言。是国际公认的优秀数学应用软件之一。 20世纪80年代初期,Cleve Moler与John Little等利用C语言开发了新一代的MATLAB语言,此时的MATLAB语言已同时具备了数值计算功能和简单的图形处理功能。1984年,Cleve Moler与John Little等正式成立了Mathworks公司,把MA TLAB 语言推向市场,并开始了对MATLAB工具箱等的开发设计。1993年,Mathworks公司推出了基于个人计算机的MATLAB 4.0版本,到了1997年又推出了MATLAB 5.X版本(Release 11),并在2000年又推出了最新的MATLAB 6版本(Release 12)。 现在,MATLAB已经发展成为适合多学科的大型软件,在世界各高校,MATLAB已经成为线性代数、数值分析、数理统计、优化方法、自动控制、数字信号处理、动态系统仿真等高级课程的基本教学工具。特别是最近几年,MATLAB在我国大学生数学

建模竞赛中的应用,为参赛者在有限的时间内准确、有效的解决问题提供了有力的保证。 概括地讲,整个MATLAB系统由两部分组成,即MATLAB 内核及辅助工具箱,两者的调用构成了MATLAB的强大功能。MATLAB语言以数组为基本数据单位,包括控制流语句、函数、数据结构、输入输出及面向对象等特点的高级语言,它具有以下主要特点: 1)运算符和库函数极其丰富,语言简洁,编程效率高,MATLAB 除了提供和C语言一样的运算符号外,还提供广泛的矩阵和向量运算符。利用其运算符号和库函数可使其程序相当简短,两三行语句就可实现几十行甚至几百行C或FORTRAN的程序功能。 2)既具有结构化的控制语句(如for循环、while循环、break 语句、if语句和switch语句),又有面向对象的编程特性。 3)图形功能强大。它既包括对二维和三维数据可视化、图像处理、动画制作等高层次的绘图命令,也包括可以修改图形及编制完整图形界面的、低层次的绘图命令。 4)功能强大的工具箱。工具箱可分为两类:功能性工具箱和学科性工具箱。功能性工具箱主要用来扩充其符号计算功能、图

(整理)matlab16常用计算方法.

常用计算方法 1.超越方程的求解 一超越方程为 x (2ln x – 3) -100 = 0 求超越方程的解。 [算法]方法一:用迭代算法。将方程改为 01002ln()3 x x =- 其中x 0是一个初始值,由此计算终值x 。取最大误差为e = 10-4,当| x - x 0| > e 时,就用x 的值换成x 0的值,重新进行计算;否则| x - x 0| < e 为止。 [程序]P1_1abs.m 如下。 %超越方程的迭代算法 clear %清除变量 x0=30; %初始值 xx=[]; %空向量 while 1 %无限循环 x=100/(2*log(x0)-3); %迭代运算 xx=[xx,x]; %连接结果 if length(xx)>1000,break ,end %如果项数太多则退出循环(暗示发散) if abs(x0-x)<1e-4,break ,end %当精度足够高时退出循环 x0=x; %替换初值 end %结束循环 figure %创建图形窗口 plot(xx,'.-','LineWidth',2,'MarkerSize',12)%画迭代线'.-'表示每个点用.来表示,再用线连接 grid on %加网格 fs=16; %字体大小 title('超越方程的迭代折线','fontsize',fs)%标题 xlabel('\itn','fontsize',fs) %x 标签 ylabel('\itx','fontsize',fs) %y 标签 text(length(xx),xx(end),num2str(xx(end)),'fontsize',fs)%显示结果 [图示]用下标作为自变量画迭代的折线。如P0_20_1图所示,当最大误差为10-4时,需要迭代19次才能达到精度,超越方程的解为27.539。 [算法]方法二:用求零函数和求解函数。将方程改为函数 100()2ln()3f x x x =-- MATLAB 求零函数为fzero ,fzero 函数的格式之一是 x = fzero(f,x0) 其中,f 表示求解的函数文件,x0是估计值。fzero 函数的格式之二是 x = fzero(f,[x1,x2])

MATLAB讲义第二章

第二章 序列的付氏变换(DTFT )和Z 变换 一、序列的DTFT :X (e jw ) 序列x(n)的付氏变换如下: ∑+∞ ∞--=n j j e n x e X ωω )()( ∞≤≤∞-ω ωπ ωπ π ωd e e X n x n j j ?- = )(21)( 因为MATLAB 无法计算连续变量w,只能在πωπ<≤-(或考虑对称性,在0<≤-ωπ)范围内,把w 赋值为很密的、长度很长的向量来近似连续变量。通常最简单的就是赋以K 个等间隔的值: K k d k π ωω2=?= 1:0-=K k 它表示把基本数字频率的范围π2均分成K 份后,每一份的大小。 则频率向量表示为w=[w1,w2,…,wk]=k ?dw, 序列的位置向量为n=[n1,n2,…,nN] 则DTFT 的计算式可用一个向量与矩阵相乘的运算来实现: [X(w 1),X(w 2),…,X(w k )] =[x(n 1),x(n 2),…,x(n N )]?????? ?????????N k N N k k n j n j n j n j n j n j n j n j n j e e e e e e e e e ωωωωωωωωω 212222111211 =[x(n 1),x(n 2),…,x(n N )]? w *jn T e 又因为 (jn T *w)=jn T *kdw=j*dw*n ’*k 所以 Xw=xn*exp(j*dw*n ’*k)

例1:求有限长序列xn=[1 3 5 3 1],n=-1:3的DTFT,画出它在w=-8~8rad/s 范围内的频率特性,讨论其对称性。再把xn 左右移动,讨论时移对DTFT 的影响。 解:根据DTFT 定义得 ωωωωωω 32353)()(j j f f n n j j e e e e e n x e X ---∞ -∞ =-++++== ∑ 88≤≤-ω 将w 在-8~8rad/s 之间分为1000份。 >> xn=[1 3 5 3 1];nx=-1:3; >> w=linspace(-8,8,1000);%设定频率向量? >> Xw=xn*exp(-j*nx'*w);%用定义计算DTFT >> subplot(3,5,1);stem(nx,xn);axis([-2,6,0,6]);title('?-ê?DòáD');ylabel('xn');%画序列图 >> subplot(3,5,2);plot(w,abs(Xw));title('·ù?è');% 画幅频曲线 >> subplot(3,5,3);plot(w,angle(Xw));title('?à??')% 画相频曲线 >> subplot(3,5,4);plot(w,real(Xw));title('êμ2?')% 画实频曲线 >> subplot(3,5,5);plot(w,imag(Xw));title('Dé2?')% 画虚频曲线 >> nx_2=nx+2;%使xn 右移2位 >> Xw_2=xn*exp(-j*nx_2'*w); >> subplot(3,5,6);stem(nx_2,xn);axis([-2,6,0,6]);ylabel('xn_2');title('óòò?2??') >> subplot(3,5,7);plot(w,abs(Xw_2)); >> subplot(3,5,8);plot(w,angle(Xw_2)); >> subplot(3,5,9);plot(w,real(Xw_2)); >> subplot(3,5,10);plot(w,imag(Xw_2)); >> nx_1=nx-1;%使xn 左移1位 >> Xw_1=xn*exp(-j*nx_1'*w); >> subplot(3,5,11);stem(nx_1,xn);axis([-2,6,0,6]);ylabel('xn_1');title('×óò?1??') >> subplot(3,5,12);plot(w,abs(Xw_1)); >> subplot(3,5,13);plot(w,angle(Xw_1)); >> subplot(3,5,14);plot(w,real(Xw_1)); >> subplot(3,5,15);plot(w,imag(Xw_1));

Matlab基础知识点汇总

MATLAB讲义 第一章 MATLAB系统概述 1.1 MATLAB系统概述 MATLAB(MATrix LABoratory)矩阵实验室的缩写,全部用C语言编写。 特点: (1)以复数矩阵作为基本编程单元,矩阵运算如同其它高级语言中的语言变量操作一样方便,而且矩阵无需定义即可采用。 (2)语句书写简单。 (3)语句功能强大。 (4)有丰富的图形功能。如plot,plot3语句等。 (5)提供了许多面向应用问题求解的工具箱函数。目前,有20多个工具箱函数,如信号处理、图像处理、控制系统、系统识别、最优化、神经网络的模糊系统等。 (6)易扩充。 1.2 MATLAB系统组成 (1)MATLAB语言 MATLAB语言是高级的矩阵、矢量语言,具有控制流向语句、函数、数据结构、输入输出等功能。同时MATLAB又具有面向对象编程特色。MATLAB语言包括运算符和特殊字符、编程语言结构、字符串、文件输入/输出、时间和日期、数据类型和结构等部分。 (2)开发环境 MATLAB开发环境有一系列的工具和功能体,其部分具有图形用户界面,包括MATLAB桌面、命令窗口、命令历史窗口、帮助游览器、工作空间、文件和搜索路径等。 (3)图形处理 图形处理包括二维、三维数据可视化,图像处理、模拟、图形表示等图形命令。还包括低级的图形命令,供用户自由制作、控制图形特性之用。 (4)数学函数库 有求和、正弦、余弦等基本函数到矩阵求逆、求矩阵特征值和特征矢量等。 MATLAB数学函数库可分为基本矩阵和操作、基本数学函数、特殊化数学函数、线性矩阵函数、数学分析和付里叶变换、多项式和二重函数等。 (5)MATLAB应用程序接口(API) MATLAB程序可以和C/C++语言及FORTRAN程序结合起来,可将以前编写的C/C++、FORTRAN语言程序移植到MATLAB中。 1.3 MATLAB的应用围包括: MATLAB的典型应用包括: ●数学计算 ●算法开发 ●建模、仿真和演算 ●数据分析和可视化 ●科学与工程绘图 ●应用开发(包括建立图形用户界面) 以矩阵为基本对象 第二章 Matlab基础

matlab用于计算方法的源程序

1、Newdon迭代法求解非线性方程 function [x k t]=NewdonToEquation(f,df,x0,eps) %牛顿迭代法解线性方程 %[x k t]=NewdonToEquation(f,df,x0,eps) %x:近似解 %k:迭代次数 %t:运算时间 %f:原函数,定义为内联函数 ?:函数的倒数,定义为内联函数 %x0:初始值 %eps:误差限 % %应用举例: %f=inline('x^3+4*x^2-10'); ?=inline('3*x^2+8*x'); %x=NewdonToEquation(f,df,1,0.5e-6) %[x k]=NewdonToEquation(f,df,1,0.5e-6) %[x k t]=NewdonToEquation(f,df,1,0.5e-6) %函数的最后一个参数也可以不写。默认情况下,eps=0.5e-6 %[x k t]=NewdonToEquation(f,df,1) if nargin==3 eps="0".5e-6; end tic; k=0; while 1 x="x0-f"(x0)./df(x0); k="k"+1; if abs(x-x0) < eps || k >30 break; end x0=x; end t=toc; if k >= 30 disp('迭代次数太多。'); x="0"; t="0"; end

2、Newdon迭代法求解非线性方程组 function y="NewdonF"(x) %牛顿迭代法解非线性方程组的测试函数 %定义是必须定义为列向量 y(1,1)=x(1).^2-10*x(1)+x(2).^2+8; y(2,1)=x(1).*x(2).^2+x(1)-10*x(2)+8; return; function y="NewdonDF"(x) %牛顿迭代法解非线性方程组的测试函数的导数 y(1,1)=2*x(1)-10; y(1,2)=2*x(2); y(2,1)=x(2).^+1; y(2,2)=2*x(1).*x(2)-10; return; 以上两个函数仅供下面程序的测试 function [x k t]=NewdonToEquations(f,df,x0,eps) %牛顿迭代法解非线性方程组 %[x k t]=NewdonToEquations(f,df,x0,eps) %x:近似解 %k:迭代次数 %t:运算时间 %f:方程组(事先定义) ?:方程组的导数(事先定义) %x0:初始值 %eps:误差限 % %说明:由于虚参f和df的类型都是函数,使用前需要事先在当前目录下采用函数M文件定义% 另外在使用此函数求解非线性方程组时,需要在函数名前加符号“@”,如下所示 % %应用举例: %x0=[0,0];eps=0.5e-6; %x=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %[x k]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %[x k t]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps) %函数的最后一个参数也可以不写。默认情况下,eps=0.5e-6 %[x k t]=NewdonToEquations(@NewdonF,@NewdonDF,x0,eps)

计算方法上机实验报告-MATLAB

《计算方法》实验报告 指导教师: 学院: 班级: 团队成员:

一、题目 例2.7应用Newton 迭代法求方程210x x --=在1x =附近的数值解 k x ,并使其满足8110k k x x ---< 原理: 在方程()0f x =解的隔离区间[],a b 上选取合适的迭代初值0x ,过曲线()y f x =的点()() 00x f x ,引切线 ()()()1000:'l y f x f x x x =+- 其与x 轴相交于点:()() 0100 'f x x x f x =-,进一步,过曲线()y f x =的 点()()11x f x , 引切线 ()()()2111: 'l y f x f x x x =+- 其与x 轴相交于点:() () 1211 'f x x x f x =- 如此循环往复,可得一列逼近方程()0f x =精确解*x 的点 01k x x x ,,,,,其一般表达式为: ()() 111 'k k k k f x x x f x ---=- 该公式所表述的求解方法称为Newton 迭代法或切线法。

程序: function y=f(x)%定义原函数 y=x^3-x-1; end function y1=f1(x0)%求导函数在x0点的值 syms x; t=diff(f(x),x); y1=subs(t,x,x0); end function newton_iteration(x0,tol)%输入初始迭代点x0及精度tol x1=x0-f(x0)/f1(x0);k=1;%调用f函数和f1函数 while abs(x1-x0)>=tol x0=x1;x1=x0-f(x0)/f1(x0);k=k+1; end fprintf('满足精度要求的数值为x(%d)=%1.16g\n',k,x1); fprintf('迭代次数为k=%d\n',k); end 结果:

(整理)matlab 动态规划讲义.

第四章动态规划 §1 引言 1.1 动态规划的发展及研究内容 动态规划(dynamic programming)是运筹学的一个分支,是求解多阶段决策问题的最优化方法。20世纪50年代初R. E. Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优性原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,逐个求解,创立了解决这类过程优化问题的新方法—动态规划。1957年出版了他的名著《Dynamic Programming》,这是该领域的第一本著作。 动态规划问世以来,在经济管理、生产调度、工程技术和最优控制等方面得到了广泛的应用。例如最短路线、库存管理、资源分配、设备更新、排序、装载等问题,用动态规划方法比用其它方法求解更为方便。 虽然动态规划主要用于求解以时间划分阶段的动态过程的优化问题,但是一些与时间无关的静态规划(如线性规划、非线性规划),只要人为地引进时间因素,把它视为多阶段决策过程,也可以用动态规划方法方便地求解。 应指出,动态规划是求解某类问题的一种方法,是考察问题的一种途径,而不是一种特殊算法(如线性规划是一种算法)。因而,它不象线性规划那样有一个标准的数学表达式和明确定义的

一组规则,而必须对具体问题进行具体分析处理。因此,在学习时,除了要对基本概念和方法正确理解外,应以丰富的想象力去建立模型,用创造性的技巧去求解。 例1 最短路线问题 下面是一个线路网,连线上的数字表示两点之间的距离(或费用)。试寻求一条由A到G距离最短(或费用最省)的路线。 例2 生产计划问题 工厂生产某种产品,每单位(千件)的成本为1(千元),每次开工的固定成本为3(千元),工厂每季度的最大生产能力为6(千件)。经调查,市场对该产品的需求量第一、二、三、四季度分别为2,3,2,4(千件)。如果工厂在第一、二季度将全年的需求都生产出来,自然可以降低成本(少付固定成本费),但是对于第三、四季度才能上市的产品需付存储费,每季每千件的存储费为0.5(千元)。还规定年初和年末这种产品均无库存。试制定一个生产计划,即安排每个季度的产量,使一年的总费用(生产成本和存储费)最少。 1.2 决策过程的分类

Matlab基础教程

1-1、基本运算与函数 在MATLAB下进行基本数学运算,只需将运算式直接打入提示号(>>)之後,并按入Enter键即可。例如: >> (5*2+1.3-0.8)*10/25 ans =4.2000 MATLAB会将运算结果直接存入一变数ans,代表MATLAB运算後的答案(Answer)并显示其数值於萤幕上。 小提示: ">>"是MATLAB的提示符号(Prompt),但在PC中文视窗系统下,由於编码方式不同,此提示符号常会消失不见,但这并不会影响到MATLAB的运算结果。 我们也可将上述运算式的结果设定给另一个变数x: x = (5*2+1.3-0.8)*10^2/25 x = 42 此时MATLAB会直接显示x的值。由上例可知,MATLAB认识所有一般常用到的加(+)、减(-)、乘(*)、除(/)的数学运算符号,以及幂次运算(^)。 小提示: MATLAB将所有变数均存成double的形式,所以不需经过变数宣告(Variable declaration)。MATLAB同时也会自动进行记忆体的使用和回收,而不必像C语言,必须由使用者一一指定.这些功能使的MATLAB易学易用,使用者可专心致力於撰写程式,而不必被软体枝节问题所干扰。 若不想让MATLAB每次都显示运算结果,只需在运算式最後加上分号(;)即可,如下例: y = sin(10)*exp(-0.3*4^2);

若要显示变数y的值,直接键入y即可: >>y y =-0.0045 在上例中,sin是正弦函数,exp是指数函数,这些都是MATLAB常用到的数学函数。 下表即为MATLAB常用的基本数学函数及三角函数: 小整理:MATLAB常用的基本数学函数 abs(x):纯量的绝对值或向量的长度 angle(z):复数z的相角(Phase angle) sqrt(x):开平方 real(z):复数z的实部 imag(z):复数z的虚部 conj(z):复数z的共轭复数 round(x):四舍五入至最近整数 fix(x):无论正负,舍去小数至最近整数 floor(x):地板函数,即舍去正小数至最近整数 ceil(x):天花板函数,即加入正小数至最近整数 rat(x):将实数x化为分数表示 rats(x):将实数x化为多项分数展开

数值计算方法matlab程序

function [x0,k]=bisect1(fun1,a,b,ep) if nargin<4 ep=1e-5; end fa=feval(fun1,a); fb=feval(fun1,b); if fa*fb>0 x0=[fa,fb]; k=0; return; end k=1; while abs(b-a)/2>ep x=(a+b)/2; fx=feval(fun1,x); if fx*fa<0 b=x; fb=fx; else a=x; fa=fx;

end end x0=(a+b)/2; >> fun1=inline('x^3-x-1'); >> [x0,k]=bisect1(fun1,1.3,1.4,1e-4) x0 = 1.3247 k = 7 >> 简单迭代法 function [x0,k]=iterate1(fun1,x0,ep,N) if nargin<4 N=500; end if nargin<3 ep=1e-5; end x=x0; x0=x+2*ep;

while abs(x-x0)>ep & k> fun1=inline('(x+1)^(1/3)'); >> [x0,k]=iterate1(fun1,1.5) x0 = 1.3247 k = 7 >> fun1=inline('x^3-1'); >> [x0,k]=iterate1(fun1,1.5) x0 = Inf k =

MATLAB讲义第五、六章

第五、六章 IIR 滤波器的设计 滤波器结构: 一、系统函数的表示法及其转换 1、表示方法 (1)传递函数法 若N M z N a z a z M b z b b z H ----++++++=)()2(1)()2()1()(11 则a=[1 a(2) a(3)… a(N)] b=[b(1) b(2)… b(M)] (2)零极点增益法 若∏∏-=--=---=10 1101 ) 1() 1()(N k k M i i z z z z k z H 则 零点向量 Z=[z 1 z 2 z M -1]; 极点向量 P=[z 1,z 2,…,z N -1] k 为系统增益。 (3)部分分式法 若)(1)1()1()(1) ()1(1)1()(N M n z N M k k z n p n r z p r z H ----+-+++-++-= 则极点向量 p=[p(1) p(2) … p(n)] 其对应系数向量 r=[r(1) r(2) … r(n)] 余数多项式系数向量 k=[k(1) k(2) … k(M-N+1)] (4)二阶分式法

把H(z)划成二阶因式 ∏∏==----++++==N k N k k k k k k k k z z z z z H z H 112 21102 2110)()(αααβββ 则其二阶因式为: b01 b11 b21 1 a11 a21 b02 b12 b22 1 a21 a22 Sos= … b0N b1N b2N 1 a1N a2N 2、各表示方法的转换: (1)由传递函数转换为零极点增益(tf2zp ) 对应,由零极点增益转换为传递函数(zp2tf ) 调用方法:[z,p,k]=tf2zp(b,a) [b,a]=zp2tf(z,p,k) ――a,b 的长度要相等,不等的话要补零 (2)由零极点增益转换为二次分式(zp2sos ) 对应,由二次分式转换为零极点增益(sos2zp ) 调用方法:[sos,g]=zp2sos(z,p,k),g 为整个系统的增益,即H(z)=g*H1(z)*H2(z)…*HN(z) 调用方法:sos2zp(z,p,k) =[sos,g],g 为整个系统的增益,默认为1。 (3)二次分式转换为传递函数(sos2tf) 调用方法:[b,a]=sos2tf(sos) 对应,由传递函数转换为二次分式 (tf2sos),调用方式: [sos,g]=tf2sos(b,a)

matlab讲义要点

前期知识:高等数学,机械原理,液压传动,控制原理 学习目标:了解基本原理、掌握基本应用、熟练使用matlab 、精通机械工程的建模和仿真 本课计划:课堂学习、课后练习、 任务:要看课堂笔记 引例:斐波纳西数列的递推公式为)2()1()(--+=n n n F F F ,通项表达式是什么? 高等数学上册第48页。斐波纳西数列在优化设计和股票分析中有用处。 第1章 了解Matlab 本章要求:了解Matlab 的功能、组成 第1节 Matlab 的界面 1.命令窗口:输入命令和显示运行结果和寻求帮助的窗口。 第1个例子求不定积分 问题:在编写代码时不能输入或者不能显示汉字 解决办法:将use custom font 换成use desktop font

先定义一个符号变量x syms x 设2 11 )(x x f += 求不定积分 ?dx x f )( matlab 求解:int(1/(1+x .^2)) 详见l1_bdjf.m 最重要的问题一:工作路径 查看当前工作路径的命令是 pwd matlab 默认的路径为安装好的目录下work ,为了需要我们需要改换路径。 改换路径的方法有:(1)采用DOS 命令 mkdir('根目录名称','新目录名称') 例:mkdir('d:\','mywork') 如果d 盘下没有mywork 即创建,如有就会给出警告。 进入新建文件夹 cd d:\mywork (2)采用matlab 命令 editpath ,pathtool (3)通过matlab 界面 [file]菜单->set path 难点:我想将打开MATLAB 时的默认工作路径改为F:\Program\MATLAB\WorkSpace\ ,只需要在原来的默认路径(bin)下创建一个名为startup.m 的文件,内容为相对路径 cd ..\..\WorkSpace\ 或绝对路径 cd F:\Program\MATLAB\WorkSpace\ 即可。再次打开MA TLAB 时便会自动执行startup.m 文件,将工作路径转至WorkSpace 下。 最重要的问题二:工作路径设置不能设置在有汉字的目录下或汉字文件夹,不支持汉字运算。 汉字用的是Unicode 编码一个字符占两个字节,字母用的是ASC Ⅱ编码,一个字母占一个字节。到2008版才能处理汉字。 初学者容易出现的错误就是把别人的程序拷在带汉字的文件夹下,运行出现错误。 如果我们已知某个文件名,但忘了在哪个文件夹下,可以用which 命令如which FUN what 命令:M-files in the current directory 思考题:what 和dir 的区别? 2.工作空间:显示数据的变量信息,包括变量名、字节大小、变量类型等。 输入 load wind 和load cities 加载了后缀为mat 的wind 和cities 数据文件 在命令窗口输入who 就可以列出空间的变量 在命令窗口输入whos 可以列出名称、大小和类型 whos -file 文件名.mat 可以查看加载前的数据信息。 3.历史记录: 显示所有在命令窗口输入的执行过的命令,清除历史的方法有两种

matlab讲义

2.3终值及其应用 2.3.1终值的概念 终值是与现值相对的概念,是指当前的一项现金流在未来某个时刻的价值。在求终值问题时应该考虑单利和复利的问题,一般如果没有特别的说明则都是按照复利(离散复利)进行计算。 在复利计息的情况下,当前的现金流PV在利率为r时到第t期期末的终值为: t FV) = 1(+ r PV 2.3.2终值的计算 在Matlab中,用来计算现金流的终值的函数有fvfix和fvvar两个。同样,-fix函数用来计算规则现金流的终值;而-var函数则用来计算不规则现金流的终值。 【例2.9】一投资者的储蓄账户初始余额为$1500,在随后的10年中,每月末都会收到$200并存入该账户,银行的年利率为9%。试计算其到期时的价值。 通过执行fvfix函数命令: FutureVal = fvfix(Rate, NumPeriods, Payment, PresentVal, Due) 即可计算出该固定收入现金流的的终值。 变量解释: Rate:周期性收支的利息率,以小数的形式输入; NumPeriods:周期性收支的次数; Payment:每期收支的现金流数额; PresentVal:初始余额 Due:收支被预定或确定的时间:0表示在期末收支(默认值),1表示在期初收支(任选)。 输入命令: >>FutureVal = fvfix(0.09/12, 12*10, 200, 1500, 0) 输出结果: FutureVal = 42379.89 即该现金流到期时的价值为42379.89$。 【例2.10】设某投资者期初投资为$10,000,在随后的5年投资期中每年产生的收入流依次为$2000、$1500、$3000、$3800、$5000,年利率为8%。试计算该现金流到期时的价值。 通过执行fvvar函数命令: FutureVal = fvvar(CashFlow, Rate, IrrCFDates) 即可求出这个规则(周期性的)现金流的终值。 输入命令: >>FutureVal = fvvar([-10000 2000 1500 3000 3800 5000], 0.08) 输出结果: FutureVal = 2520.47 即该现金流到期时的价值为2520.47$。 如果期初投资的$10,000产生的是一个不规则的现金流(如下所示),则计算时要将期初的投资和各个现金流发生的日期也考虑进去。利率为9%。

相关主题
文本预览
相关文档 最新文档