MATLAB实习报告-1

MATLAB实习报告-1
MATLAB实习报告-1

MATLAB --实习报告

班级:******

姓名:**

学号:***********

指导老师:***

日期:2011/11/24

目录

一.MATLAB简介 (3)

二.上机实习题目 (3)

1.第2章第1题 (3)

2.第3章第2题 (3)

3.第5章第2题 (3)

4.第4章第1题 (4)

三.题目实现过程 (4)

1.牛顿插值以及三次样条插值(第一个实验题) (4)

a.牛顿插值 (4)

b.三次样条插值 (4)

c.牛顿插值截图 (5)

d.三次样条插值截图 (6)

2.3次,4次多项式的曲线拟合 (7)

a.先输入表格中对应的数据, (7)

b.3次拟合 (8)

c. 3次拟合截图 (9)

d. 4次拟合 (9)

e. 4次拟合截图 (10)

3.高斯消去法解线性方程组 (11)

a.高斯消去法源代码 (11)

b.第一个小题 (12)

c.第二个小题 (13)

4.雅克比迭代法与SOR方法 (13)

a. 雅克比迭代法的计算公式 (13)

b. 超松弛迭代法的计算公式 (14)

c.得到希尔矩阵 (14)

d.得到b矩阵 (14)

e.雅克比迭代法实现的函数 (14)

f.SOR迭代法实现的函数 (15)

g.对于雅克比迭代法,通过执行以下代码 (16)

h. 对于SOR迭代法,执行相对应代码 (16)

四.心得与感想 (19)

一.M ATLAB简介

MATLAB是一个软件,用来进行科学计算。在实际生活或者在科学研究中,大量的计算有时候是不可避免的,在这个时候,我们可以选择很多种方式来解决我们的问题。但是选择一个好的软件对于我们来说有时候却是非常困难的,尤其是现在各种软件层出不穷,当然里面有好的,可是有大多数的软件却是鱼目混珠,在里面滥竽充数。如果我们不避开这些,那么我们可能面临的是用很大的工作量来完成一个极其简单的问题,或者说在付出了时间与精力之后却完不成问题。所以必须选择一个好的计算软件来解决问题。MATLAB 就是这样一个软件,在你能够熟悉并且流畅运用它之后,那它将是一把能够解决很多问题的钥匙。

MATLAB是Matrix Laboratory,即矩阵实验室的缩写。它是一个有Math Work公司(由Moler,Little,Bangert在1984年在加利福利亚成立)开发的软件包。用来实现数值计算或者符号操作。

另外MATLAB还拥有M-file这一功能,在这里面你可以编写自己的程序(当然这个程序不是windows程序),在这里你就可以实现很多计算,虽然说

MATLAB自带的函数在大多数情况下已经够用,但是总会有某些时候你觉得自己编写的程序运用起来更加灵活,而且在一些具体问题的时候,这个优势将会是一大突破,可以让我们很轻松解决很多问题。除了自己编写外,MATLAB 自带的很多优秀的程序,如plot(绘图)函数,cond(求矩阵条件数)函数,关于矩阵的一些相关函数,都是相当经典的。

总之,熟悉使用MATLAB可以让我们的工作变得很简单,经过这次的学习,我们以后的很多学习工作问题都可以很方便地解决了。

二.上机实习题目

1.第2章第1题

4

进行插值。用图给出{(x i,y i),x i=0.2+0.08i,i=0,1,11,10},P4(x)及S(x)。

2.第3章第2题

拟合曲线,用图示数据曲线及相应的三种拟合曲线。

3.第5章第2题

用列主元高斯消去法解线性方程组Ax=b。

(1)[3.01 6.03 1.99

1.27 4.16?1.23

0.987?4.819.34

][

x1

x2

x3

]=[

1

1

1

];

(2) [3.00 6.03 1.99

1.27 4.16?1.23

0.990?4.819.34

][

x1

x2

x3

]=[

1

1

1

].

分别输出A,b,det (A),解向量x,(1)中A的条件数。分析比较(1),(2)。

4.第4章第1题

给出线性方程组H n x=b,其中系数矩阵H n为希尔伯特矩阵:H n=(h ij)∈

,i,j=1,2,…,n。

R n×n,h ij=1

i+j?1

假设x?=(1,1,…,1)T∈R n×n,b=H n x?。若取n=6,8,10,分别用雅克比

迭代法及SOR迭代法(ω=1,1.25,1.5)求解。比较计算结果。

三.题目实现过程

下面开始进行计算:

1.牛顿插值以及三次样条插值(第一个实验题)

此题要求利用给定点,及给定点的函数值进行牛顿插值以及三次样条插

值。

a.牛顿插值

要实现牛顿插值,要用到以下代码

% 调用格式:yi=Lagran_(x,y,xi)

% x,y 数组形式的数据表

function fi=Lagran_(x,f,xi)

fi=zeros(size(xi));

np1=length(f);

for i=1:np1

z=ones(size(xi));

for j=1:np1

if i~=j,z=z.*(xi-x(j))/(x(i)-x(j));end

end

fi=fi+z*f(i);

end

b.三次样条插值

要实现三次样条插值,要用到以下代码

function S=csfit(X,Y,dx0,dxn)

N=length(X)-1;

H=diff(X);

D=diff(Y)./H;

A=H(2:N-1);

B=2*(H(1:N-1)+H(2:N));

C=H(2:N);

U=6*diff(D);

B(1)=B(1)-H(1)/2;

U(1)=U(1)-3*(D(1));

B(N-1)=B(N-1)-H(N)/2;

U(N-1)=U(N-1)-3*(-D(N));

for k=2:N-1

temp=A(k-1)/B(k-1);

B(k)=B(k)-temp*C(k-1);

U(k)=U(k)-temp*U(k-1);

end

M(N)=U(N-1)/B(N-1);

for k=N-2:-1:1

M(k+1)=(U(k)-C(k)*M(k+2))/B(k);

end

M(1)=3*(D(1)-dx0)/H(1)-M(2)/2;

M(N+1)=3*(dxn-D(N))/H(N)-M(N)/2;

for k=0:N-1

S(k+1,1)=(M(k+2)-M(k+1))/(6*H(k+1));

S(k+1,2)=M(k+1)/2;

S(k+1,3)=D(k+1)-H(k+1)*(2*M(k+1)+M(k+2))/6;

S(k+1,4)=Y(k+1);

end

c.牛顿插值截图

在输入对应的两个数组后,首先进行4次牛顿插值,下面是运行截图

然后根据结果绘图

d.三次样条插值截图

首先得到的是三次样条插值后的多项式系数矩阵,然后利用polyval()函数计算在对应点的值,

并且通过绘图函数将结果表示在图像上面,

通过与上面的牛顿插值所得到的图像进行比较,可以发现,利用三次样条插值得到的结果更加的精确。

2.3次,4次多项式的曲线拟合

a.先输入表格中对应的数据,

然后首先通过调用plot()函数,绘图

b.3次拟合

通过以下代码

>> x

x =

0 0.1000 0.2000 0.3000 0.5000 0.8000 1.0000

>> y

y =

1.0000 0.4100 0.5000 0.6100 0.9100

2.0200

2.4600

>> s1 = polyfit(x, y, 3);

>> temp = 0:0.001:1;

>> y_temp = zeros(size(temp));

>> y_temp = polyval(s1, temp);

>> hold on;

>> plot(temp, y_temp)

c. 3次拟合截图

可以得到下面的截图,这是看到3次拟合后的多项式与原来的图形比较

d. 4次拟合

通过下面代码

>> x

x =

0 0.1000 0.2000 0.3000 0.5000 0.8000

1.0000

>> y

y =

1.0000 0.4100 0.5000 0.6100 0.9100

2.0200

2.4600

>> s2 = polyfit(x, y, 4);

>> y_temp = polyval(s2, temp);

>> hold on;

>> plot(temp, y_temp, 'r')

e. 4次拟合截图

通过进行4次拟合,我们会感觉不同,从图像上可以看出(不同次数的拟合在图像上用不同的颜色标示出来以便观察,其中3次拟合是蓝色,4次的是红色)

以上都是用多项式进行拟合,下面代码用一个线性函数来进行拟合

>> xmean = mean(x);

>> ymean = mean(y);

>> sumx2 = (x - xmean) * (x - xmean)';

>> sumxy = (y - ymean) * (y - ymean)';

>> A = sumxy / sumx2;

>> B = ymean - A * xmean;

>> temp = 0:0.01:1;

>> y_temp = A * temp + B;

>> plot(temp, y_temp, 'green')

的到下图其中绿色的线是这次拟合的结果,很明显,误差很大

在进行解决这个题目时候用的拟合函数是MATLAB自带的拟合函数polyfit(),这里是多项式拟合。polyfit()函数得到的是一个矩阵,然后运用另一个MATLAB自带的函数polyval()来进行计算给定点的函数值。

到这里这一题完成。

3.高斯消去法解线性方程组

对于这道题目,要求用高斯消去法解两个线性方程组,所以利用MATLAB 的M-file编写一个文件便可以解决两个小题。

而高斯消去法的核心是逐渐利用消去法是原来的系数矩阵变成一个上三角矩阵。然后一个迭代便可以解出方程的每一个解。

a.高斯消去法源代码

function X = p178_2_GAUSS(A, b)

[n, m] = size(A);

X = zeros(n, 1);

temp = zeros(1, m);

temp_b = 0;

i = 1;

for j = 1: (m - 1)

if (A(i, j) ~= 0)

for k = (i + 1):n

if (A(k, j) ~= 0)

temp = A(k, :) + A(i, :) * (-A(k, j) / A(i, j));

temp_b = b(k) + b(i) * (-A(k, j) / A(i, j));

A(k, :) = temp;

b(k) = temp_b;

end

end

end

i = i + 1;

end;

A

b

disp('det(A) is ...');

x = det(A);

disp(x);

disp('cond(A) is ...');

x = cond(A);

disp(x);

X(n) = b(n) / A(n, n);

for i = (n - 1):-1:1

temp_b = 0;

for j = (i + 1):n

temp_b = temp_b + A(i, j) * X(j);

end

X(i) = (b(i) - temp_b) / A(i, i);

end

end

这个程序要求输入两个参数,一个是系数矩阵,另外一个是矩阵b。从程序中我们可以看出程序首先初始化一个解向量,全部以0为元素。然后通过循环来进行系数矩阵的上三角化,在这个过程中,需要判断每一个系数矩阵的行向量的第一元素是否为0,若是0的话,则需要进行换行操作,或者跳过此次循环,直接进入下一次循环(因为有可能是这一行已经达到要求,不需要再进行操作。)

b.第一个小题

通过以下过程:

>> A = [3.01 6.03 1.99;1.27 4.16 -1.23; 0.987 -4.81 9.34];

>> b = [1; 1; 1];

>> p178_2_GAUSS(A, b)

可以解出方程:

A =

3.0100 6.0300 1.9900

0 1.6158 -2.0696

0 0 -0.0063

b =

1.0000

0.5781

3.1004

det(A) is ...

-0.0305

cond(A) is ...

4.0724e+003

ans =

1.0e+003 *

1.5926

-0.6319

-0.4936

c.第二个小题

通过以下过程:

>> A = [3.00 6.03 1.99;1.27 4.16 -1.23; 0.990 -4.81 9.34];

>> b = [1; 1; 1];

>> p178_2_GAUSS(A, b)

可以解出方程:

A =

3.0000 6.0300 1.9900

0 1.6073 -2.0724

0 0 -0.0844

b =

1.0000

0.5767

3.1097

det(A) is ...

-0.4070

cond(A) is ...

305.2933

ans =

119.5273

-47.1426

-36.8403

到这里这一大题已经完全解决,下面进入下一题。

4.雅克比迭代法与SOR方法

这一题考查的是迭代法的使用,雅克比迭代法与SOR方法,在这道题中用。

a. 雅克比迭代法的计算公式

{

x (0)=(x 1(0),x 2(0),…,x n (0)

)T ,

x i (k+1)=(b i ?∑a ij x i (k )

n

j=1j≠i

)a ii ?,

i =1,2,…n;k =0,1,…表示迭代次数

b. 超松弛迭代法的计算公式

{

x (0)=(x 1(0),x 2(0),…,x n (0)

)T ,

x i (k+1)=x i

(k )+ω((b i ?∑a ij x i (k )n j=i ?∑a ij x i (k+1)i?1j=1))a ii ?,

i =1,2,…n;k =0,1,…表示迭代次数

ω为松弛因子

首先要通过程序获得希尔矩阵与b 矩阵,然后才能进行下面的工作,而要实现这个功能需要以下的函数: c.得到希尔矩阵

function Hn = GET_Hn(n) Hn = zeros(n); for i = 1:n for j = 1:n

Hn(i, j) = 1 / (i + j - 1); end end end d.得到b 矩阵

function b = GET_b(n) Hn_temp = GET_Hn(n); b = zeros(n, 1); for i = 1:n for j = 1:n

b(i) = b(i) + Hn_temp(i, j); end end end

e. 雅克比迭代法实现的函数

function X = p211_1_JJ(n) Hn = GET_Hn(n); b = GET_b(n); temp = 0;

X0 = zeros(1, n);

X_old = zeros(1, n);

X_new = zeros(1, n);

disp('Now Jacobi method!');

disp('Start with the vector that (0, 0, 0, ...)^T');

for i = 1:n

for k = 1:n

X_old = X_new;

temp = 0;

for j = 1:n

if(j ~= i)

temp = temp + Hn(i, j) * X_old(j);

end

end

X_new(i) = (b(i) - temp) / Hn(i, i);

end

end

X = X_new;

end

f.SOR迭代法实现的函数

function X = p211_1_SOR(n, w)

Hn = GET_Hn(n);

b = GET_b(n);

temp01 = 0;

temp02 = 0;

X0 = zeros(1, n);

X_old = zeros(1, n);

X_new = zeros(1, n);

disp('Now Successive Over Relaxtion method!');

disp('Start with the vector that (0, 0, 0, ...)^T');

for i = 1:n

for k = 1:n

X_old = X_new;

temp01 = 0;

temp02 = 0;

for j = 1:n

if(j < i)

temp01 = temp01 + Hn(i, j) * X_new(j);

end

if(j > i)

temp02 = temp02 + Hn(i, j) * X_old(j);

end

end

end

X_new(i) = w * (b(i) - temp01 - temp02) / Hn(i, i) + X_old(i);

end

X = X_new;

End

g.对于雅克比迭代法,通过执行以下代码

>> p211_1_JJ(6)

>> p211_1_JJ(8)

>> p211_1_JJ(10)

可以分别得到:

Now Jacobi method!

Start with the vector that (0, 0, 0, ...)^T

ans =

2.4500 1.1036 0.6265 0.4060 0.2831 0.2071 Now Jacobi method!

Start with the vector that (0, 0, 0, ...)^T

ans =

2.7179 1.4101 0.8524 0.5809 0.4221 0.3198

0.2497 0.1995

Now Jacobi method!

Start with the vector that (0, 0, 0, ...)^T

ans =

Columns 1 through 9

2.9290 1.6662 1.0517 0.7423 0.5554 0.4315 0.3445 0.2807 0.2325

Column 10

0.1951

h. 对于SOR迭代法,执行相对应代码

n=6, ω=1,1.25,1.5的时候

>> p211_1_SOR(6, 1)

Now Successive Over Relaxtion method!

Start with the vector that (0, 0, 0, ...)^T

ans =

2.4500 1.1036 0.6265 0.4060 0.2831 0.2071

>> p211_1_SOR(6, 1.25)

Now Successive Over Relaxtion method!

Start with the vector that (0, 0, 0, ...)^T

ans =

3.0625 0.2310 0.8704 0.3389 0.3141 0.2097

>> p211_1_SOR(6, 1.5)

Now Successive Over Relaxtion method!

Start with the vector that (0, 0, 0, ...)^T

ans =

3.6750 -1.1009 2.0106 -0.3994 0.7670 -0.0384

与n=8, ω=1,1.25,1.5的时候

>> p211_1_SOR(8, 1)

Now Successive Over Relaxtion method!

Start with the vector that (0, 0, 0, ...)^T

ans =

2.7179 1.4101 0.8524 0.5809 0.4221 0.3198 0.2497 0.1995

>> p211_1_SOR(8, 1.25)

Now Successive Over Relaxtion method!

Start with the vector that (0, 0, 0, ...)^T

ans =

3.3973 0.4887 1.0898 0.5062 0.4501 0.3203 0.2573 0.2042

>> p211_1_SOR(8, 1.5)

Now Successive Over Relaxtion method!

Start with the vector that (0, 0, 0, ...)^T

ans =

4.0768 -0.9424 2.2923 -0.2753 0.9252 0.0578 0.4071 0.1275

与n=10, ω=1,1.25,1.5的时候

>> p211_1_SOR(10, 1)

Now Successive Over Relaxtion method!

Start with the vector that (0, 0, 0, ...)^T

ans =

Columns 1 through 9

2.9290 1.6662 1.0517 0.7423 0.5554 0.4315 0.3445 0.2807 0.2325

Column 10

0.1951

>> p211_1_SOR(10, 1.25)

Now Successive Over Relaxtion method!

Start with the vector that (0, 0, 0, ...)^T

ans =

Columns 1 through 9

3.6612 0.7098 1.2835 0.6617 0.5807 0.4299 0.3506 0.2844 0.2363

Column 10

0.1984

>> p211_1_SOR(10, 1.5)

Now Successive Over Relaxtion method!

Start with the vector that (0, 0, 0, ...)^T

ans =

Columns 1 through 9

4.3935 -0.7958 2.5326 -0.1523 1.0720 0.1565 0.5050 0.2041 0.2819

Column 10

0.1766

到此这道题目结束了。

四.心得与感想

在此次实验的四个题目中,第一个题使用的是老师的程序代码,第二个题是用的是MATLAB自带的函数,第三个题和第四个题中的5个函数(包括p178_2_GAUSS(A, b),GET_Hn(n),GET_b(n),

p211_1_JJ(A,b),p211_1_SOR(A,b))是自己写的程序代码。

在学习数值分析的同时,进行学习MATLAB,有助于将两者都更加的熟悉并加以充分利用。比如在学习数值分析过程中对某个问题不是很明白,也许我们就会找出各种借口来将它跳过去,以至于过了一段时间之后连自己有什么问题都忘了,就给以后的生活留下了一个炸弹,有可能在某天我们急需要解决一个问题,而要解决那个问题就需要在数值分析中有个一个知识点,但是因为在学的时候我们没有搞懂,所以在那时候就不能够及时做出来,有可能造成其他问题。但是由于要进行MATLAB实验,我们就必须要把那个问题解决,要不然就不能够让MATLAB运行。同理对于MATLAB的学习是一样的。两者促进另外一者的学习。

MATLAB是一个软件,更可以是一门语言,还有好多的功能我们未曾用过,那些都是值得去搞懂的,但是由于时间原因,不可能停下学习,所以现在有这么多,先满足吧。

MATLAB基本操作实验报告

南昌航空大学 数学与信息科学学院 实验报告 课程名称:数学实验 实验名称: MATLAB基本操作 实验类型:验证性■综合性□ 设计性□ 实验室名称:数学实验室 班级学号: 10 学生姓名:钟 X 任课教师(教师签名): 成绩: 实验日期: 2011-10- 10

一、实验目的 1、熟悉MATLAB基本命令与操作 2、熟悉MATLAB作图的基本原理与步骤 3、学会用matlab软件做图 二、实验用仪器设备、器材或软件环境 计算机MATLAB软件 三、实验原理、方案设计、程序框图、预编程序等 问题1:在区间【0,2π】画sinx 实验程序: >> x=linspace(0,2*pi,30); >> y=sin(x); >> plot(x,y) 问题2:在【0,2π】用红线画sinx,用绿圈画cosx,实验程序:

>> x=linspace(0,2*pi,30); >> y=sin(x); >> z=cos(x); >> plot(x,y,'r',x,z,'co') >> 问题3:在【0,π】上画y=sinx的图形。 实验程序: >> ezplot('sin(x)',[0,pi]) >> 问题4:在【0,π】上画x=cos3t,y=sin3t星形图形。

实验程序: >> ezplot('cos(t).^3','sin(t).^3',[0,pi]) >> 问题5:[-2,0.5],[0,2]上画隐函数 实验程序: >> ezplot('exp(x)+sin(x*y)',[-2,0.5,0,2]) >> 问题6:在[-2,2]范围内绘制tanh的图形。实验程序: >> fplot('tanh',[-2,2])

MATLAB实验报告(1-4)

信号与系统MATLAB第一次实验报告 一、实验目的 1.熟悉MATLAB软件并会简单的使用运算和简单二维图的绘制。 2.学会运用MATLAB表示常用连续时间信号的方法 3.观察并熟悉一些信号的波形和特性。 4.学会运用MATLAB进行连续信号时移、反折和尺度变换。 5.学会运用MATLAB进行连续时间微分、积分运算。 6.学会运用MATLAB进行连续信号相加、相乘运算。 7.学会运用MATLAB进行连续信号的奇偶分解。 二、实验任务 将实验书中的例题和解析看懂,并在MATLAB软件中练习例题,最终将作业完成。 三、实验内容 1.MATLAB软件基本运算入门。 1). MATLAB软件的数值计算: 算数运算 向量运算:1.向量元素要用”[ ]”括起来,元素之间可用空格、逗号分隔生成行向量,用分号分隔生成列向量。2.x=x0:step:xn.其中x0位初始值,step表示步长或者增量,xn为结束值。 矩阵运算:1.矩阵”[ ]”括起来;矩阵每一行的各个元素必须用”,”或者空格分开; 矩阵的不同行之间必须用分号”;”或者ENTER分开。2.矩阵的加法或者减法运算是将矩阵的对应元素分别进行加法或者减法的运算。3.常用的点运算包括”.*”、”./”、”.\”、”.^”等等。

举例:计算一个函数并绘制出在对应区间上对应的值。 2).MATLAB软件的符号运算:定义符号变量的语句格式为”syms 变量名” 2.MATLAB软件简单二维图形绘制 1).函数y=f(x)关于变量x的曲线绘制用语:>>plot(x,y) 2).输出多个图像表顺序:例如m和n表示在一个窗口中显示m行n列个图像,p 表示第p个区域,表达为subplot(mnp)或者subplot(m,n,p) 3).表示输出表格横轴纵轴表达范围:axis([xmax,xmin,ymax,ymin]) 4).标上横轴纵轴的字母:xlabel(‘x’),ylabel(‘y’) 5).命名图像就在subplot写在同一行或者在下一个subplot前:title(‘……’) 6).输出:grid on 举例1:

实验一 MATLAB基本操作及运算(含实验报告).

实验一 MATLAB 基本操作及运算 一、 实验目的 1、 理解Matlab 数据对象的特点; 2、 掌握基本Matlab 运算规则; 3、 掌握Matlab 帮助的使用方法; 二、 实验的设备及条件 计算机一台(带有MATLAB7.0以上的软件环境)。 三、 实验内容 要求建立一个名为experiment01.m 的,把与实验内容1-7相关的实验命令都放入该文件中,题与题之间用相应注释分割。注意对实验中出现的相关函数或变量,请使用help 或doc 查询相关帮助文档,学习函数的用法。 1、 建立以下标量: 1) a=10 2) b=2.5×1023 3) c=2+3i ,(i 为虚数单位) 4) d=3/2πj e ,(j 为虚数单位,这里要用到exp ,pi ) 2、 建立以下向量: 1) aVec=[3.14 15 9 26] 2) bVec=????? ???????18228871.2 3) cVec=[5 4.8 … -4.8 -5 ] (向量中的数值从5到-5,步长为-0.2) 4) dVec=[100 100.01 … 100.99 101] (产生1到10之间的等对数间隔向量,参考logspace ,注意向量的长度) 3、 建立以下矩阵: 1)???? ??????=2222 aMat aMat 一个9×9的矩阵,其元素全为2;(参考ones 或zeros )

2)??????? ?????????=1000005000001 bMat bMat 是一个9×9的矩阵,除主对角上的元素为[1 2 3 4 5 4 3 2 1]外,其余元素均为0。(参考diag )。 3)100 20109212291111 =cMat cMat 为一个10×10的矩阵,可有1:100的向量来产生(参考reshape ) 4)???? ??????=NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN NaN dMat dMat 为3×4的NaN 矩阵,(参考nan ) 5)?? ????---=8710225113eMat 6)产生一个5×3随机整数矩阵fMat ,其值的范围在-3到3之间。(参考rand 和floor 或ceil ) 4、 使用题1中的变量计算下列等式的x,y,z 的值: 1) ) 6/)15((11--+=a e x 2) g g h h b a y /121,)(=+=提示π,参考sqrt 。 3) c c a d c d c R z ))3/sin()]))([(log(π-+= ,其中R 表示取括号内复数的实数部分,c 表示c 的共轭复数,log 是自然对数。(参考real ,conj ,log ) 5、 使用题2中的向量求解一下等式: 1))25.2/(22 25.221 cVec e xVec -=π, 其中cVec 指的是题2 中定义的向量cVec ,一下雷同。 2)22)(bVec aVec yVec T +=,T aVec 表示aVec 的转置 3) )/1(log 10dVec zVec =,10log 表示已10为底的对数,参考log10 6、 使用题2和题3中所产生的向量和矩阵计算以下等式,注意本题的操作

MATLAB实验报告实验二

实验二 MATLAB矩阵及其运算 学号:3121003104 姓名:刘艳琳专业:电子信息工程1班日期:2014.9.20 一实验目的 1、掌握Matlab数据对象的特点以及数据的运算规则。 2、掌握Matlab中建立矩阵的方法以及矩阵处理的方法。 3、掌握Matlab分析的方法。 二实验环境 PC_Windows 7旗舰版、MATLAB 7.10 三实验内容 4、1. (1)新建一个.m文件,验证书本第15页例2-1; (2)用命令方式查看和保存代码中的所有变量;

(3)用命令方式删除所有变量; (4)用命令方式载入变量z。 2. 将x=[4/3 1.2345e-6]在以下格式符下输出:短格式、短格式e方式、长格式、长格式e方式、银行格式、十六进制格式、+格式。 短格式 短格式e 长格式

长格式e方式 银行格式 十六进制格式 3.计算下列表达式的值 (1)w=sqrt(2)*(1+0.34245*10^(-6)) (2)x=(2*pi*a+(b+c)/(pi+a*b*c)-exp(2))/(tan(b+c)+a) a=3.5;b=5;c=-9.8; (3)y=2*pi*a^2*((1-pi/4)*b-(0.8333-pi/4)*a) a=3.32;b=-7.9; (4)z=0.5*exp(2*t)*log(t+sqrt(1+t*t)) t=[2,1-3i;5,-0.65];

4. 已知A=[1 2 3 4 5 ;6 7 8 9 10;11 12 13 14 15;16 17 18 19 20],对其进行如下操作:(1)输出A在[ 7, 10]范围内的全部元素; (2)取出A的第2,4行和第1,3,5列; (3)对矩阵A变换成向量B,B=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20]; (4)删除A的第2,3,4行元素; (1) (2)

matlab操作实验报告

实验一matlab基本操作 一、实验目的 熟悉matlab的安装与启动;熟悉matlab用户界面;熟悉matlab功能、建模元素;熟悉matlab优化建模过程。 二、实验设备与工具 1.计算机 2.matlab软件 三、实验步骤 1. 了解matlab的硬件和软件必备环境; 2. 启动matlab; 3. 学习优化建模过程。 四、实验报告要求 1. 写出matlab系统界面的各个构成;以及系统布局区的组成;以及每一部 分的功能; 2. 优化建模过程应用举例 五、实验内容 (一)、Matlab操作界面 1.命令窗口(command window) 2.命令历史窗口(command history) 3.工作空间管理窗口(workspace) 4.当前路径窗口(current directory) (二)、优化建模过程应用举例 1、简单矩阵 123 456 789 A ?? ?? =?? ?? ?? 的输入步骤。 (1)在键盘上输入下列内容 A = [1,1,3; 4,5,6; 7,8,9] (2)按【Enter】键,指令被执行。 (3)在指令执行后,MATLAB指令窗中将显示以下结果: A = 1 2 3 4 5 6 7 8 9

2、矩阵的分行输入。 A=[1,2,3 4,5,6 7,8,9] A = 1 2 3 4 5 6 7 8 9 3、指令的续行输入 S=1-1/2+1/3-1/4+ ... 1/5-1/6+1/7-1/8 S = 0.6345 4、画出衰减振荡曲线t e y t 3sin 3-=及其它的包络线3 0t e y -=。t 的取值范围是]4,0[π。 t=0:pi/50:4*pi; y0=exp(-t/3); y=exp(-t/3).*sin(3*t); plot(t,y,'-r',t,y0,':b',t,-y0,':b') grid 5、画出2222) sin(y x y x z ++=所表示的三维曲面。y x ,的取值范围是]8,8[-。 clear;x=-8:0.5:8; y=x';

matlab实验报告

MATLAB程序设计语言 实 验 报 告 专业及班级___________________ 姓名___________________ 学号___________________ 日期___________________

实验一 MATLAB 的基本使用 一、 实验目的 1.了解MA TALB 程序设计语言的基本特点,熟悉MATLAB 软件的运行环境; 2.掌握变量、函数等有关概念,掌握M 文件的创建、保存、打开的方法,初步具备将一般数学问题转化为对应计算机模型处理的能力; 3.掌握二维图形绘制的方法,并能用这些方法实现计算结果的可视化。 二、 MATLAB 的基础知识 通过本课程的学习,应基本掌握以下的基础知识: 一. MATLAB 简介 二. MATLAB 的启动和退出 三. MATLAB 使用界面简介 四. 帮助信息的获取 五. MATLAB 的数值计算功能 六. 程序流程控制 七. M 文件 八. 函数文件 九. MATLAB 的可视化 三、上机练习 1. 仔细预习第二部分内容,关于MATLAB 的基础知识。 2. 熟悉MATLAB 环境,将第二部分所有的例子在计算机上练习一遍 3、已知矩阵???? ??????=??????????=123456789,987654321B A 。求A*B ,A .* B ,比较二者结果是否相同。并利用MA TLAB 的内部函数求矩阵A 的大小、元素和、长度以及最大 值。 解:>> A=[1 2 3;4 5 6;7 8 9]; >> B=[9 8 7;6 5 4;3 2 1]; >> A*B ans = 30 24 18 84 69 54 138 114 90 >> A.*B ans = 9 16 21 24 25 24

动态规划讲解大全(含例题及答案)

动态规划讲解大全 动态规划(dynamic programming)是运筹学的一个分支,是求解决策过程(decision process)最优化的数学方法。20世纪50年代初美国数学家R.E.Bellman等人在研究多阶段决策过程(multistep decision process)的优化问题时,提出了著名的最优化原理(principle of optimality),把多阶段过程转化为一系列单阶段问题,逐个求解,创立了解决这类过程优化问题的新方法——动态规划。1957年出版了他的名著Dynamic Programming,这是该领域的第一本著作。 动态规划问世以来,在经济管理、生产调度、工程技术和最优控制等方面得到了广泛的应用。例如最短路线、库存管理、资源分配、设备更新、排序、装载等问题,用动态规划方法比用其它方法求解更为方便。 虽然动态规划主要用于求解以时间划分阶段的动态过程的优化问题,但是一些与时间无关的静态规划(如线性规划、非线性规划),只要人为地引进时间因素,把它视为多阶段决策过程,也可以用动态规划方法方便地求解。 动态规划程序设计是对解最优化问题的一种途径、一种方法,而不是一种特殊算法。不象前面所述的那些搜索或数值计算那样,具有一个标准的数学表达式和明确清晰的解题方法。动态规划程序设计往往是针对一种最优化问题,由于各种问题的性质不同,确定最优解的条件也互不相同,因而动态规划的设计方法对不同的问题,有各具特色的解题方法,而不存在一种万能的动态规划算法,可以解决各类最优化问题。因此读者在学习时,除了要对基本概念和方法正确理解外,必须具体问题具体分析处理,以丰富的想象力去建立模型,用创造性的技巧去求解。我们也可以通过对若干有代表性的问题的动态规划算法进行分析、讨论,逐渐学会并掌握这一设计方法。 基本模型 多阶段决策过程的最优化问题。 在现实生活中,有一类活动的过程,由于它的特殊性,可将过程分成若干个互相联系的阶段,在它的每一阶段都需要作出决策,从而使整个过程达到最好的活动效果。当然,各个阶段决策的选取不是任意确定的,它依赖于当前面临的状态,又影响以后的发展,当各个阶段决策确定后,就组成一个决策序列,因而也就确定了整个过程的一条活动路线,如图所示:(看词条图) 这种把一个问题看作是一个前后关联具有链状结构的多阶段过程就称为多阶段决策过程,这种问题就称为多阶段决策问题。 记忆化搜索 给你一个数字三角形, 形式如下: 1 2 3 4 5 6 7 8 9 10 找出从第一层到最后一层的一条路,使得所经过的权值之和最小或者最大. 无论对与新手还是老手,这都是再熟悉不过的题了,很容易地,我们写出状态转移方程:f(i, j)=a[i, j] + min{f(i+1, j),f(i+1, j + 1)} 对于动态规划算法解决这个问题,我们根据状态转移方程和状态转移方向,比较容易地写出动态规划的循环表示方法。但是,当状态和转移非常复杂的时候,也许写出循环式的动态规划就不是那么

MATLAB基本操作实验报告

MATLAB基本操作 实验报告 课程名称: 院系: 专业班级: 学号: 学生姓名: 指导教师: 开课时间:至学年第学期

一、学生撰写要求 按照实验课程培养方案的要求,每门实验课程中的每一个实验项目完成后,每位参加实验的学生均须在实验教师规定的时间内独立完成一份实验报告,不得抄袭,不得缺交。 学生撰写实验报告时应严格按照本实验报告规定的内容和要求填写。字迹工整,文字简练,数据齐全,图表规范,计算正确,分析充分、具体、定量。 二、教师评阅与装订要求 1.实验报告批改要深入细致,批改过程中要发现和纠正学生实验报告中的问题,给出评语和实验报告成绩,签名并注明批改日期。实验报告批改完成后,应采用适当的形式将学生实验报告中存在的问题及时反馈给学生。 2.实验报告成绩用百分制评定,并给出成绩评定的依据或评分标准(附于实验报告成绩登记表后)。对迟交实验报告的学生要酌情扣分,对缺交和抄袭实验报告的学生应及时批评教育,并对该次实验报告的分数以零分处理。对单独设课的实验课程,如学生抄袭或缺交实验报告达该课程全学期实验报告总次数三分之一以上,不得同意其参加本课程的考核。 3.各实验项目的实验报告成绩登记在实验报告成绩登记表中。本学期实验项目全部完成后,给定实验报告综合成绩。 4.实验报告综合成绩应按课程教学大纲规定比例(一般为10-15%)计入实验课总评成绩;实验总评成绩原则上应包括考勤、实验报告、考核(操作、理论)等多方面成绩; 5.实验教师每学期负责对拟存档的学生实验报告按课程、学生收齐并装订,按如下顺序装订成册:实验报告封面、实验报告成绩登记表、实验报告成绩评定依据、实验报告(按教学进度表规定的实验项目顺序排序)。装订时统一靠左侧按“两钉三等分”原则装订。

matlab实验报告

2015秋2013级《MATLAB程序设计》实验报告 实验一班级:软件131姓名:陈万全学号:132852 一、实验目的 1、了解MATLAB程序设计的开发环境,熟悉命令窗口、工作区窗口、历史命令等窗口的使用。 2、掌握MATLAB常用命令的使用。 3、掌握MATLAB帮助系统的使用。 4、熟悉利用MATLAB进行简单数学计算以及绘图的操作方法。 二、实验内容 1、启动MATLAB软件,熟悉MATLAB的基本工作桌面,了解各个窗口的功能与使用。 图1 MATLAB工作桌面 2、MATLAB的常用命令与系统帮助: (1)系统帮助 help:用来查询已知命令的用法。例如已知inv是用来计算逆矩阵,键入help inv即可得知有关inv命令的用法。 lookfor:用来寻找未知的命令。例如要寻找计算反矩阵的命令,可键入lookfor inverse,MATLAB即会列出所有和关键字inverse相关的指令。找到所需的

命令後,即可用help进一步找出其用法。 (2)数据显示格式: 常用命令:说明 format short 显示小数点后4位(缺省值) format long 显示15位 format bank 显示小数点后2位 format + 显示+,-,0 format short e 5位科学记数法 format long e 15位科学记数法 format rat 最接近的有理数显示 (3)命令行编辑:键盘上的各种箭头和控制键提供了命令的重调、编辑功能。 具体用法如下: ↑----重调前一行(可重复使用调用更早的) ↓----重调后一行 →----前移一字符 ←----后移一字符 home----前移到行首 end----移动到行末 esc----清除一行 del----清除当前字符 backspace----清除前一字符 (4)MATLAB工作区常用命令: who--------显示当前工作区中所有用户变量名 whos--------显示当前工作区中所有用户变量名及大小、字节数和类型 disp(x) -----显示变量X的内容 clear -----清除工作区中用户定义的所有变量 save文件名-----保存工作区中用户定义的所有变量到指定文件中 load文件名-----载入指定文件中的数据

实验5 Matlab绘图操作实验报告

Tutorial 5 实验报告 实验名称:Matlab 绘图操作 实验目的: 1、 掌握绘制二维图形的常用函数; 2、 掌握绘制三维图形的常用函数; 3、 掌握绘制图形的辅助操作。 实验内容: 1. 设sin .cos x y x x ?? =+ ??+?? 23051,在x=0~2π区间取101点,绘制函数的曲线。 2. 已知: y x =21,cos()y x =22,y y y =?312,完成下列操作: (1) 在同一坐标系下用不同的颜色和线性绘制三条曲线; (2) 以子图形式绘制三条曲线; (3) 分别用条形图、阶梯图、杆图和填充图绘制三条曲线。 3. 已知:ln(x y x x ≤=??+>??0102 ,在x -≤≤55区间绘制函数曲线。 4. 绘制极坐标曲线sin()a b n ρθ=+,并分析参数a 、b 、n 对曲线形状的影响。 5.在xy 平面内选择区域[][],,-?-8888, 绘制函数z =的三种三维曲面图。 6. 用plot 函数绘制下面分段函数的曲线。 ,(),,x x f x x x x ?+>? ==??+

8. 在同一坐标轴中绘制下列两条曲线。 (1).y x =-205 (2)sin()cos ,sin()sin x t t t y t t π=?≤≤? =?303 实验结果: 1. 2. (1)

(2)

(3)

matlab实验报告

实验报告 2. The Branching statements 一、实验目的: 1.To grasp the use of the branching statements; 2.To grasp the top-down program design technique. 二、实验内容及要求: 1.实验内容: 1).编写 MATLAB 语句计算 y(t)的值 (Write the MATLAB program required to calculate y(t) from the equation) ???<+≥+-=0 530 53)(2 2t t t t t y 已知 t 从-5到 5 每隔0.5取一次值。运用循环和选择语句进行计算。 (for values of t between -5 and 5 in steps of 0.5. Use loops and branches to perform this calculation.) 2).用向量算法解决练习 1, 比较这两个方案的耗时。 (tic ,toc 的命令可以帮助你完成的时间计算,请使用'help'函数)。 Rewrite the program 1 using vectorization and compare the consuming time of these two programs. (tic, toc commands can help you to finish the time calculation, please use the …help ? function). 2.实验要求: 在报告中要体现top-down design technique, 对于 3 要写出完整的设计过程。 三、设计思路: 1.用循环和选择语句进行计算: 1).定义自变量t :t=-5:0.5:5; 2).用循环语句实现对自变量的遍历。 3).用选择语句实现对自变量的判断,选择。 4).将选择语句置入循环语句中,则实现在遍历中对数据的选择,从而实现程序的功能。 2. 用向量法实现: 1).定义自变量t :t=-5:0.5:5; 2).用 b=t>=0 语句,将t>=0得数据选择出,再通过向量运算y(b)=-3*t(b).^2 + 5; 得出结果。 3).用取反运算,选择出剩下的数据,在进行向量运算,得出结果。 四、实验程序和结果 1.实验程序 实验程序:创建m 文件:y_t.m

MATLAB实验报告1(推荐文档)

学生实验报告

一、实验目的 熟悉MATLAB 软件的用户环境;了解MATLAB 软件的一般命令;掌握MATLAB 向量、数组、矩阵操作与运算函数;掌握MATLAB 软件的基本绘图命令;掌握MATLAB 语言的几种循环、条件和开关选择结构,及其编程规范。 通过该实验的学习,使学生能灵活应用MATLAB 软件解决一些简单问题,能借助MATLAB 软件的绘图功能,对函数的特性进行探讨,广泛联想,大胆猜想,发现进而证实其中的规律。 二、实验仪器、设备或软件: 电脑,MATLAB 软件 三、实验内容 1.MATLAB 软件的数组操作及运算练习; 2.直接使用MATLAB 软件进行作图练习; 3.用MATLAB 语言编写命令M 文件和函数M 文件。 四、实验步骤 1.在D 盘建立一个自己的文件夹; 2.开启软件平台——MATLAB ,将你建立的文件夹加入到MATLAB 的搜索路径中; 3.利用帮助了解函数max, min, sum, mean, sort, length ,rand, size 和diag 的功能和用法; 4.开启MATLAB 编辑窗口,键入你编写的M 文件(命令文件或函数文件); 5.保存文件(注意将文件存入你自己的文件夹)并运行; 6.若出现错误,修改、运行直到输出正确结果; 7.写出实验报告,并浅谈学习心得体会。 五、实验要求与任务 根据实验内容和步骤,完成以下具体实验,要求写出实验报告(实验目的→问题→算法与编程→计算结果或图形→心得体会) 1. 已知矩阵??????????=321212113A , ???? ? ?????--=101012111B 要求:(1)屏幕输出A 与B ;(2)A 的转置A′;(3)求A+B 的值;(4)求A-B 的值;(5)求4A ;(6)求A×B ;(7)求A -1.

动态规划matlab仿真实例

动态规划在火力分配中的应用 1.问题描述 设有m个目标,目标价值(重要性和危害性)各不相同,用数值A K( K=1, 2, ..m )表示,计划用n枚导弹突袭,导弹击毁目标的概率P= ,其中是常数,取决于导弹的 特性与目标的性质;为向目标发射的导弹数,问题:做出方案使预期的突击效果最大。 2.问题建模 上述问题可以表述为 约束条件为 ( 为非负整数) 3.算法描述 下面通过一个实例说明:设目标数目为4 (m=4),导弹为5 (n=5), 和a K取值情况如下表所示:表1:A k,取值情况 将火力分配可分为4个阶段,每个阶段指标函数为: 可能取值为0,1, 2,3, 4,5,将函数值带人如下表: 表2函数值

k=le ngth(x(1,:)) % x_is nan=~is nan( x); % t_vubm=i nf*on es(size(x)); % 判断决策级数 非空状态矩阵 性能指标中间矩阵 动态规划问题基本方程为: c =0 逐次向前推一级 K=4 K=3 K=2 K=1 ( 只需要求解的最大值然后反推回去就可以获得最优的分配方案 可取等号) 4. Matlab仿真求解 因为与取值为整数,可以采用动态规划的方法,获得的最大值, fun cti on[ p_opt,fval]=d yn prog(x,DecisFu n,SubObjFu n, Tra nsFu n,ObjFun) % 规划问题最小值函数对应的最优方 求解动态

f_opt=nan*ones(size(x)); % 总性能指标矩阵 d_opt=f_opt; % 每步决策矩阵 tmp1=find(x_isnan(:,k)); % 最后一步状态向量 tmp2=length(tmp1); % 最后一步状态个数for i=1:tmp2 u=feval(DecisFun,k,x(tmp1(i),k)); tmp3=length(u);% 决策变量 for j=1:tmp3 % 求出当前状态下所有决策的最小性能指标 tmp=feval(SubObjFun,k,x(tmp1(i),k),u(j)); if tmp <= t_vubm(i,k) %t_vub f_opt(i,k)=tmp; d_opt(i,k)=u(j); t_vubm(i,k)=tmp; end; end; end for ii=k-1:-1:1 tmp10=find(x_isnan(:,ii)); tmp20=length(tmp10); for i=1:tmp20 % 求出当前状态下所有可能的决策 u=feval(DecisFun,ii,x(tmp10(i),ii)); tmp30=length(u) ; for j=1:tmp30 % 求出当前状态下所有决策的最小性能指标 tmp00=feval(SubObjFun,ii,x(tmp10(i),ii),u(j)); % tmp40=feval(TransFun,ii,x(tmp10(i),ii),u(j)); % tmp50=x(:,ii+1)- tmp40; % 找出下一状态在x tmp60=find(tmp50==0) ; if~isempty(tmp60) if nargin<6 % 矩阵不同需要修改 tmp00=tmp00+f_opt(tmp60(1),ii+1); % set the default object value else tmp00=feval(ObjFun,tmp00,f_opt(tmp60(1),ii+1)); end % 当前状态的性能指标 if tmp00<=t_vubm(i,ii) f_opt(i,ii)=tmp00; d_opt(i,ii)=u(j); t_vubm(i,ii)=tmp00; end; end; end; end; end fval=f_opt(:,1); tmp0 = find(~isnan(fval)); fval=fval(tmp0,1); p_opt=[];tmpx=[];tmpd=[];tmpf=[]; 单步性能指标 下一状态 矩阵的位置 nargin 的值,很重要

Matlab上机实验报告

20140110170124 14级测绘工程1班齐新煜 Matlab基础运用实验报告(一) MATLAB在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。 软件安装 1.安装出错时,可换注册码继续安装,到同一目录; 2.【谨记】安装路径不要有中文名称; 3.成功安装完毕之后,如果遇到matlab启动后,窗口在打开一到两秒后就自动关闭了,可按以下方法试试:【假设你安装的目录为c:\MATLAB\】(不过不建议安装到C盘,那样会影响系统速度!) 4.确认安装好后,在此路径下c:\MATLAB\bin\win32有一个名为atlas_Athlon.dll的文件;

5.我的电脑上右击点"属性",再在"高级"中点"环境变量",在"系统变量"中点击 "新建" 输入以下信息:变量名:BLAS_VERSION 变量址: c:\MATLAB\bin\win32\atlas_Athlon.dll 6.安装MATLAB成功! 实验结语 MATLAB在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。 MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。 Matlab基础运用实验报告(二) 一、实验目的 1.了解MATLAB程序设计语言的基本特点,熟悉MATLAB软件的运行环境;

动态规划经典案例详解(背包问题)

动态规划经典案例详解之背包问题 【摘要】本文主要从动态规划经典案例——背包问题的动态规划设计思路出发,结合具体实例,对动态规划在程序设计中的典型应用以及衍生拓展进行详细分析。 【关键字】动态规划信息学奥赛0/1背包问题 动态规划并非一个算法,而是一种解题的思路,其核心思想是通过使用大量的存储空间把中间结果记录下来,大大减少重复计算的时间,从而提高的程序的执行效率,因为信息学奥林匹克复赛题目的解决程序一般是有时间限制的,对于某些用搜索必然耗费大量时间的题目,动态规划几乎是唯一的选择。但是动态规划并没有一个简单的模型可以套用,对于每个不同的题目都有对应的不同规划思路,我们只能通过对一些动态规划经典案例的学习来训练自己的动态规划思维能力,从而以不变应万变,应付各种复杂的程序设计,本文通过对动态规划经典案例之一的背包问题进行详细阐述,旨在让学生了解动态规划和搜索的不同设计思路以及动态规划的优越性。 【原型例题】 从n个物品中选取装入背包的物品,每件物品i的重量为wi,价值为pi。求使物品价值最高的选取方法。 【输入文件】 第一行一个数c,为背包容量。 第二行一个数n,为物品数量 第三行n个数,以空格间隔,为n个物品的重量 第四行n个数,以空格间隔,为n个物品的价值 【输出文件】 能取得的最大价值。 【分析】 初看这类问题,第一个想到的会是贪心,但是贪心法却无法保证一定能得到最优解,看以下实例: 贪心准则1:从剩余的物品中,选出可以装入背包的价值最大的物品,利用这种规则,价值最大的物品首先被装入(假设有足够容量),然后是下一个价值最大的物品,如此继续下去。这种策略不能保证得到最优解。例如,考虑n=2,w=[100,10,10],p=[20,15,15],c=105。当利用价值贪婪准则时,获得的解为x=[1,0,0],这种方案的总价值为20。而最优解为[0,1,1],其总价值为30。 贪心准则2:从剩下的物品中选择可装入背包的重量最小的物品。虽然这种规则对于前面的例子能产生最优解,但在一般情况下则不一定能得到最优解。考虑n=2,w=[10,20], p=[5,100],c=25。当利用重量贪婪策略时,获得的解为x=[1,0],比最优解[0,1]要差。

东北大学matlab实验报告1

1、安装MATLAB 软件,应用demo 命令了解主要功能,熟悉基本功能,会用help 命令。 2、 用MATLAB 语句输入矩阵A 和B ????????? ???=14 23 143212344321 A , ?? ??? ?? ?? ???++++++++++++++++=4j 11j 43j 22j 34j 11j 42j 33j 24j 13j 22j 31j 41j 42j 33j 24j 1B 前面给出的是44?矩阵,如果给出 5)6,5(=A 命令将得出什么结果?

3.假设已知矩阵A,试给出相应的MATLAB命令,将其全部偶数行提取出来, A 命令生成A矩阵,用上述命令检验一下结果是不是赋给B矩阵,用magic(8) 正确。

4.用数值方法可以求出∑=++++++==63 63622284212i i S ,试不采用循环的形 式求出和式的数值解。由于数值方法是采用double 形式进行计算的,难以保证有效位数字,所以结果不一定精确。试采用运算的方法求该和式的精确值。 5.选择合适的步距绘制出下面的图形。 (1))/1sin(t ,其中)1,1(-∈t ; (2))tan(sin )sin(tan t t -,其中),(ππ-∈t 。

(1)t=[-1:0.014:1];y=sin(1./t);plot(t,y) (2)t=[-pi:0.05:pi];y=sin(tan(t))-tan(sin(t));plot(t,y) 6. 试绘制出二元函数2 2 2 2 )1(1)1(1),(y x y x y x f z +++ +-= =的三维图和三 视图。 [x,y]=meshgrid(-2:.1:2);z=1./(sqrt((1-x).^2+y.^2))+1./(sqrt((1+x).^2+y.^2)); subplot(224),surf(x,y,z)subplot(221),surf(x,y,z),view(0,90); subplot(222),surf(x,y,z),view(90,0);subplot(223),surf(x,y,z),view(0.0);

动态规划典型例题

1、单调递增最长子序列 描述 求一个字符串的最长递增子序列的长度 如:dabdbf最长递增子序列就是abdf,长度为4 输入 第一行一个整数0

2、最长公共子序列 描述 如题,需要写一个程序,得出最长公共子序列。 tip:最长公共子序列也称作最长公共子串(不要求连续),英文缩写为LCS(Longest Common Subsequence)。其定义是,一个序列S ,如果分别是两个或多个已知序列的子序列,且是所有符合此条件序列中最长的,则S 称为已知序列的最长公共子序列。 输入 第一行给出一个整数N(0

3、括号匹配 时间限制:1000 ms | 内存限制:65535 KB 描述 给你一个字符串,里面只包含"(",")","[","]"四种符号,请问你需要至少添加多少个括号才能使这些括号匹配起来。 如: []是匹配的 ([])[]是匹配的 ((]是不匹配的 ([)]是不匹配的 输入 第一行输入一个正整数N,表示测试数据组数(N<=10) 每组测试数据都只有一行,是一个字符串S,S中只包含以上所说的四种字符, S的长度不超过100 输出 对于每组测试数据都输出一个正整数,表示最少需要添加的括号的数量。每组 测试输出占一行 样例输入 4 [] ([])[] ((] ([)] 样例输出 3 2

MATLAB实验报告(一)-西安邮电大学

西安邮电学院 《Matlab》 实验报告 (一) 2011- 2012 学年第 1 学期 自动化 专业: 自动0903 班级: 学号: 姓名: 2011 年9月28日

MATLAB语言实验项目 实验一熟悉MATLAB集成环境与基础运算 一、实验目的 1.熟悉启动和退出MATLAB软件的方法、熟悉MATLAB软件的运行环境。 2.熟悉MATLAB命令窗口的组成。 3.熟悉MATLAB的基本操作。 4.掌握建立矩阵的方法。 5.掌握MATLAB各种表达式的书写规则以及常用函数的使用。 二、实验设备及条件 计算机一台(MATLAB R2010b的软件环境)。 三、实验原理 1.MATLAB的启动 MATLAB系统的启动有三种常见方法: 1)使用Windows“开始”菜单。 2)运行MATLAB系统启动程序matlab.exe。 3)利用快捷方式。 2.MATLAB系统的退出 要退出MATLAB系统,也有三种常见方法: 1)在MATLAB主窗口File菜单中选择Exit matlab 命令。 2)在MATLAB命令窗口输入Exit或Quit命令。 3)单击MATLAB主窗口的“关闭”按钮。 3.MATLAB帮助窗口 进入帮助窗口可以通过以下三种方法: 1)单击MATLAB主窗口工具栏中的help按钮。 2)在命令窗口中输入helpwin、helpdesk或doc。 3)选择help菜单中的“matlab help”选项。 4.MATLAB帮助命令

1)help命令 在MATLAB命令窗口直接输入help命令将会显示当前帮助系统中所包含的所有项目,即搜索路径中所有的目录名称。同样,可以通过help加函数名来显示该函数的帮助说明。 2)lookfor命令 help命令只搜索出那些关键字完全匹配的结果,lookfor命令对搜索范围内的m文件进行关键字搜索,条件比较宽松。 3)模糊查询 用户只要输入命令的前几个字母,然后按tab键,系统就会列出所有以这几个字母开头的命令。 5.赋值语句 1)变量=表达式 2)表达式 6.矩阵的建立 1)直接输入法:将矩阵的元素用方括号括起来,按矩阵行的顺序输入各元素,同一行的各元素之间用空格或逗号分开,不同行的元素之间用分号分开。 2)利用m文件建立矩阵 3)利用冒号表达式建立一个向量e1:e2:e3 4)利用linspace函数产生行向量linspace(a,b,n). 四、实验内容 1.练习下面指令: cd:切换目录,例如:cd . , cd .. , cd 目录 clear:清除内存单元 help:帮助 who:查看内存中存在的单元 whos:查看内存中单元的详细信息 dir:列出当前目录下的文件或文件夹 path:列出安装目录的所有路径 save:将内存中的数据保存在文件中 load:将文件中的数据加载到matlab中 2.建立自己的工作目录MYWORK和MYDATA,并将它们分别加到搜索路径的前

动态规划matlab仿真实例

动态规划在火力分配中的应用。 1.问题描述 设有m个目标,目标价值(重要性和危害性)各不相同,用数值A K(K=1,2,..m)表示,计划用n枚导弹突袭,导弹击毁目标的概率P K=,其中是常数,取决于导弹的特性与目标的性质;为向目标发射的导弹数,问题:做出方案使预期的突击效果最大。 2.问题建模 上述问题可以表述为 约束条件为 (为非负整数) 3.算法描述 下面通过一个实例说明:设目标数目为4(m=4),导弹为5(n=5),和a K取值情况如下表所示: 表1:A k 取值情况 目标K 1 2 3 4 8 7 6 3 0.2 0.3 0.5 0.9 将火力分配可分为4个阶段,每个阶段指标函数为:

可能取值为0,1,2,3,4,5,将函数值带人如下表: 表2 函数值 u 0 0 0 0 0 1 1.45 1.81 2.36 1.79 2 2.64 3.16 3.79 2.51 3 3.61 4.15 4.66 2.81 4 4.41 4.89 5.19 2.93 5 5.0 6 5.44 5.51 2.97 动态规划问题基本方程为: c =0 逐次向前推一级 K=4 K=3 K=2 K=1 () 只需要求解的最大值然后反推回去就可以获得最优的分配方案

4.Matlab仿真求解 因为与取值为整数,可以采用动态规划的方法,获得的最大值,对应的

最优方案 function[p_opt,fval]=dynprog(x,DecisFun,SubObjFun,TransFun,ObjFun) %求解动态规划问题最小值函数 k=length(x(1,:)) %判断决策级数 x_isnan=~isnan(x); % 非空状态矩阵 t_vubm=inf*ones(size(x)); % 性能指标中间矩阵 f_opt=nan*ones(size(x)); % 总性能指标矩阵 d_opt=f_opt; %每步决策矩阵 tmp1=find(x_isnan(:,k)); % 最后一步状态向量 tmp2=length(tmp1); % 最后一步状态个数 for i=1:tmp2 u=feval(DecisFun,k,x(tmp1(i),k)); tmp3=length(u);%决策变量 for j=1:tmp3 % 求出当前状态下所有决策的最小性能指标 tmp=feval(SubObjFun,k,x(tmp1(i),k),u(j)); if tmp <= t_vubm(i,k) %t_vub f_opt(i,k)=tmp; d_opt(i,k)=u(j); t_vubm(i,k)=tmp; end; end; end for ii=k-1:-1:1 tmp10=find(x_isnan(:,ii)); tmp20=length(tmp10); for i=1:tmp20 %求出当前状态下所有可能的决策 u=feval(DecisFun,ii,x(tmp10(i),ii)); tmp30=length(u) ; for j=1:tmp30 % 求出当前状态下所有决策的最小性能指标 tmp00=feval(SubObjFun,ii,x(tmp10(i),ii),u(j)); % 单步性能指标 tmp40=feval(TransFun,ii,x(tmp10(i),ii),u(j)); % 下一状态 tmp50=x(:,ii+1)-tmp40; % 找出下一状态在 x 矩阵的位置 tmp60=find(tmp50==0) ; if~isempty(tmp60) if nargin<6 %矩阵不同需要修改nargin的值,很重要 tmp00=tmp00+f_opt(tmp60(1),ii+1); % set the default object value else tmp00=feval(ObjFun,tmp00,f_opt(tmp60(1),ii+1)); end %当前状态的性能指标 if tmp00<=t_vubm(i,ii) f_opt(i,ii)=tmp00; d_opt(i,ii)=u(j);

相关文档
最新文档