admin 管理员组

文章数量: 887021


2024年2月25日发(作者:java软件如何配置环境变量)

MATLAB基础教程 1~8章作业

Matlab第一章

1.阐述Matlab的功能

Matlab作为一种高级计算软件,是进行算法开发、数据可视化、数据分析以及数值计算的交互式应用开发环境,已被广泛应用于不同领域。Matlab的基本功能包括:数学计算功能、图形化显示功能、M语言编程功能、编译功能、图形用户界面开发功能、Simulink建模仿真功能、自动代码生成功能。

Matlab第二章

1.创建double的变量,并进行计算。

(1) a=87,b=190,计算 a+b、a-b、a*b。

(2)创建 uint8 类型的变量,数值与(1)中相同,进行相同的计算。

>> a=87,b=190

a =

87

b =

190

>> a+b

ans =

277

>> a-b

ans =

-103

>> a*b

ans =

16530

>> c=uint8(87), d=uint8(190)

c =

87

d =

190

>> c+d

ans =

255

>> c-d

ans =

0

>> c*d

ans =

255

2.计算

(1)sin(60)

(2)e^3

(3)cos(3π/4)

>> sind(60)

ans =

0.8660

>> exp(3)

ans =

20.0855

>> cos(3*pi/4)

ans =

-0.7071

3.设u=2,v=3,计算:

(1)

(2)

(3)

>> u=2;

>> v=3;

>> 4*u*v/log(v)

ans =

21.8457

>> (exp(u)+v)^2/(v^2-u)

ans =

15.4189

>> sqrt(u-3*v)/(u*v)

ans =

0 + 0.4410i

4.计算如下表达式:

(1)

(2)

>> (3-5*i)*(4+2*i)

ans =

22.0000 -14.0000i

>> sin(2-8*i)

ans =

1.3553e+003 +6.2026e+002i

5.判断下面语句的运算结果。

(1) 4 < 20

(2) 4 <= 20

(3) 4 == 20

(4) 4 ~= 20

(5) 'b'<'B'

>> 4<20

ans =

1

>> 4<=20

ans =

1

>> 4==20

ans =

0

>> 4~=20

ans =

1

>> 'b'<'B'

ans =

0

6.设a=39,b=58,c=3,d=7判断下面表达式的值。

(1)a>b

(2)a

(3)a>b&&b>c

(4)a==d

(5)a|b>c

(6)~~d

>> a=39,b=58,c=3,d=7

a =

39

b =

58

c =

3

d =

7

>> a>b

ans =

0

>> a

ans =

0

>> a>b&&b>c

ans =

0

>> a==d

ans =

0

>> a|b>c

ans =

1

>> ~~d

ans =

1

7.编写脚本,计算上面第2题中的表达式。

%计算表达式的值并显示

disp('sin(60)=');

disp(sind(60));

disp('exp(3)=');

disp(exp(3));

disp('cos(3*pi/4)=');

disp(cos(3*pi/4));

8.编写脚本,输出上面第6题中的表达式的值。

%计算表达式的值并显示

a=39;

b=58;

c=3;

d=7;

disp('a>b'),disp(a>b);

disp('a

disp('a>b&&b>c'),disp(a>b&&b>c)

disp('a==d'),disp(a==d);

disp('a|b>c'),disp(a|b>c);

disp('~~d'),disp(~~d);

Matlab第三章

1.在命令提示符下输入以下两条命令:

>> x = [ 9 3 0 6 3]

>> y = mod((sqrt(length(((x+5).*[1 2 3 4 5]))*5)),3)

求y值为多少?

x =

9 3 0 6 3

y =

2

2.在MATLAB中运行以下命令:

a = [3, 7, 2, 7, 9, 3, 4, 1, 6];

b = [7];

a(4) = [];

vec1 = a==b;

vec2 = mod(a,2)==0;

c = sum(vec1);

vec3 = vec1+vec2;

d = vec3.*a;

vec4 = find(a > 5);

e = a(vec4) + 5;

vec5 = find(a < 5);

f = vec5.^2;求c、d、e、f的值。

>> c

c =

1

>> d

d =

0 7 2 0 0 4 0 6

>> e

e =

12 14 11

>> f

f =

1 9 25 36 49

3.向量操作时Matlab的主要部分,使用给出的向量来做下面的练习.

Vec=[4 5 2 8 4 7 2 64 2 57 2 45 7 43 2 5 7 3 3 6253 3 4 3 0 -65 -343]

(1)创建一个新的向量vecR,使其成为vec的转置.

(2)创建一个新的向量vecB,使其成为vec前半部分与后半部分对换的结果.

(3)创建一个新的向量vecS,使其包含vec中所有小于45的元素,且按vec中的顺序排列.

(4)创建一个新的向量vec3R,使其从vec中最后一个元素开始,间隔3个元素取一个元素,直到第一个元素为止.

(5)创建一个新的向量vecN,使其包含vec中所有等于2或4 的元素的索引值.

(6)创建一个新的向量vecG,使其包含vec中去掉索引值为奇数且取值为2或4的元素后的所有元素.

>> vecR=vec'

vecR =

4

5

2

8

4

7

2

64

2

57

2

45

7

43

2

5

7

3

3

6253

3

4

3

0

-65

-34

>> vec1=vec(1:13)

vec1 =

4 5 2

7

>> vec2=vec(14:26)

vec2 =

Columns 1 through 8

43

6253 3

Columns 9 through 13

4

>> vecB=[vec2 vec1]

vecB =

Columns 1 through 8

43

6253 3

Columns 9 through 16

4

5 2

Columns 17 through 24

8

57 2

Columns 25 through 26

8 4

2

3

2

3

4

7 2 64

5 7

0 -65

5 7

0 -65

7 2

2 57

3

-34

3

-34

64

2 45

3

3

4

2

45 7

>> small=vec<45

small =

Columns 1 through 17

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

1 1 1 1 1

Columns 18 through 26

1 1 0 1 1 1 1 1 1

>> vecS=vec(small)

vecS =

Columns 1 through 17

4 5 2 8 4

5 7 3 3 3

Columns 18 through 22

4 3 0 -65 -34

>> vec3R=vec(end:-3:1)

vec3R =

Columns 1 through 8

-34 3

64 4

Column 9

5

>> vecN=find(vec==2|vec==4)

vecN =

1 3 5 7 9

>> [value]=vecN(find(mod(vecN,2)))

value =

1 3 5 7 9

>> vec(value)=0

vec =

Columns 1 through 8

0 5

0 64

Columns 9 through 16

0 57

0 5

Columns 17 through 24

7 3

3 0

Columns 25 through 26

-65 -34

>> vec(vec==0)=[]

vec =

Columns 1 through 8

7 2 2

6253 7

11 15 22

11 15

0 8

0 45

3 6253

2 7

43

0

7

3

43 2

2

7

43

4

5 8

7 43

Columns 9 through 16

5 7

4 3

Columns 17 through 18

-65 -34

>> vecG=vec

vecG =

Columns 1 through 8

5 8

7 43

Columns 9 through 16

5 7

4 3

Columns 17 through 18

-65 -34

7 64 57 45

3 3 6253 3

7 64 57 45

3 3 6253 3

4.给定一下3个向量:

nums1=[7 1 3 5 32 12 1 99 10 24]

nums2=[54 1 456 9 20 45 48 72 61 32 10 94 11]

nums3=[44 11 25 41 84 77 998 85 2 3 15]

编写脚本文件创建相应的3个向量,newNum1、newNum2、newNum3,分别包含以上3个向量中从第一个元素开始且间隔取值的元素。

%取向量索引为奇数的值

clear

clc

nums1=[7 1 3 5 32 12 1 99 10 24];

nums2=[54 1 456 9 20 45 48 72 61 32 10 94 11];

nums3=[44 11 25 41 84 77 998 85 2 3 15];

x1=find(mod(find(nums1),2)==1);%向量1

[values1]=nums1(x1);

newNums1=values1;

disp('nums1=');

disp(nums1);

disp('newNums1=');

disp(newNums1);

x2=find(mod(find(nums2),2)==1);%向量2

[values2]=nums2(x2);

newNums2=values2;

disp('nums2=');

disp(nums2);

disp('newNums2=');

disp(newNums2);

x3=find(mod(find(nums3),2)==1);%向量3

[values3]=nums3(x3);

newNums3=values3;

disp('nums3=');

disp(nums3);

disp('newNums3=');

disp(newNums3);

Matlab第四章

1. 有如下数据:

X

1

1.1

1.2

1.3

y

1.00000

1.23368

1.55271

1.99372

利用本章介绍的几种插值方法对其进行插值,得到每隔0.05的结果。%4种插值方法

x=[1 1.1 1.2 1.3 1.4];

y=[1.00000 1.23368 1.55271 1.99372 2.61170];

length_of_x=length(x);

scalar_x=[x(1):0.05:x(length_of_x)];

length_of_sx=length(scalar_x);

for i=1:length_of_sx

y_nearest(i)=interp1(x,y,scalar_x(i),'nearest');

y_liner(i)=interp1(x,y,scalar_x(i),'liner');

y_spline(i)=interp1(x,y,scalar_x(i),'spline');

y_cubic(i)=interp1(x,y,scalar_x(i),'cubic');

end

subplot(2,2,1),plot(x,y,'*'),hold

on,plot(scalar_x,y_nearest),title('nearest');

subplot(2,2,2),plot(x,y,'*'),hold

on,plot(scalar_x,y_liner),title('linear');

subplot(2,2,3),plot(x,y,'*'),hold

on,plot(scalar_x,y_spline),title('spline');

subplot(2,2,4),plot(x,y,'*'),hold

on,plot(scalar_x,y_cubic),title('cubic');

2. 2. 求下列函数的解,并绘制图形。

(1) y=ex-x5,初始点为x=8.

(2) y=xsin(x)

>> y=@(x)exp(x)-x^5;

>> x=fzero(y,8)

x =

12.7132

>> fplot(y,[10,14]);

>> hold on

>> plot(x,y(x),'r*')

1.4

2.61170

%x与y的值

%定义4种方%输出

>>y=@(x)x*sin(x);

>> x=fzero(y,0)

x =

0

3.求下列函数的极值。

(1) z=x2-(y-1)2

(2) z=(x-y+1)2

>> z=@(x)x(1)^2-(x(2)-1)^2;

>> [x,fvalue]=fminsearch(z,[-1,1])

Exiting: Maximum number of function evaluations has been exceeded

- increase MaxFunEvals option.

Current function value:

-29278786696692.000000

x =

1.0e+043 *

1.1138 1.2383

fvalue =

-2.9279e+085

>> z = @(x)(x(1)-x(2)+1)^2;

>> [x,fvalue]=fminsearch(z,[-1,1])

x =

-1.2073 -0.2073

fvalue =

1.9045e-022

4.计算下列积分。

(1)

(2)

>> f = @(x)x+x.^3+x.^5;

>> q = quad(f,-1,1)

q =

2.2204e-016

>> f= @(x,y)sin(y).*(x+y)./(x.^2+4);

>> q = dblquad(f,1,10,1,10)

q =

5.5254

Matlab第五章

1.编制一个脚本,查找给定字符串中指定字符出现的次数和位置.

%查找给定字符串中指定字符出现的次数和位置

letter='a'; %指定字符

string='I have a long string'; %给定字符串

places=findstr(string,letter); %位置

times=length(places); %次数

disp('places are :');

disp(places);

disp('times are :');

disp(times);

2.编写一个脚本,判断输入字符串中每个单词的首字母是否为大写,若不是则将其修改为大写,其他字母为小写.

%将每个单词首字母变为大写

str = 'I have a long string';

disp(str);

nlength = length(str);

for k=1:nlength

if (k==1 || isspace(str(k-1))) && (str(k)<='z' && str(k)>='a')

str(k) = char(double(str(k)) - 32);

end

end

disp(str);

3.创建 2×2 单元数组,第 1、2 个元素为字符串,第三个元素为整型变量,第四个元素为双精度(double)类型,并将其用图形表示.

>> A=cell(2,2)

A =

[] []

[] []

>> A(1,1)={'string1'};

>> A(1,2)={'string2'};

>> A(2,1)={uint8(100)};

>> A(2,2)={double(60)};

>> cellplot(A)

4.创建一个结构体,用于统计学生的情况,包括学生的姓名、学号、各科成绩等。然后使用该结构体对一个班级的学生成绩进行管理,如计算总分、平均分、排列名次等.

>> student=struct('name',{'Ann','Bob','Cilly'},'number',{1,2,3},'grade',{90,60,85})

student =

1x3 struct array with fields:

name

number

grade

>> student(1)

ans =

name: 'Ann'

number: 1

grade: 90

>> student(2)

ans =

name: 'Bob'

number: 2

grade: 60

>> student(3)

ans =

name: 'Cilly'

number: 3

grade: 85

>> total=student(1).grade+student(2).grade+student(3).grade

total =

235

>> average=total/3

average =

78.3333

>> [new,index]=sort([],'descend')

new =

90 85 60

index =

1 3 2

Matlab第六章

1.假设x = [-3, 0, 0, 2, 5, 8]且y = [-5, -2,0, 3, 4, 10]。通过手算得到以下运算的结果,并使用MATLAB检验计算的结果。

(1) z = y<~x

(2) z = x&y

(3) z = x|y

(4). z = xor(x,y)

>> x = [-3, 0, 0, 2, 5, 8]

x =

-3 0 0 2 5 8

>> y = [-5, -2,0, 3, 4, 10]

y =

-5 -2 0 3 4 10

>> z1 = y<~x

z1 =

1 1 1 0 0 0

>> z2 = x&y

z2 =

1 0 0 1 1 1

>> z3 = x|y

z3 =

1 1 0 1 1 1

>> z4 = xor(x,y)

z4 =

0 1 0 0 0 0

2. 在MATLAB中使用一个循环确定:如果用户最初在一个银行帐户中存储$10000,并且在每年的年终再存储$10000(银行每年支付6%的利息),那么账户上要积累$1000000要需要多长时间。

%银行存款计算

a=10000;%本金

b=10000;%每年新增存款

sum=0;%存款总和

i=1;

sum=sum+a;

while sum<1000000

i=i+1;

sum=sum*(1+0.06)+b;

end

disp('year=')

disp(i)

near=

34

3. 某个特定的公司生产和销售高尔夫手推车。每周周末,公司都将那一周所生产的手推车转移到仓库(库存)之中。卖出的所有手推车都是从库存中提取。这个过程的一个简单模型为:

I (k + 1) = P(k) + I (k) - S(k)

其中:

P(k) = 第k周所生产的手推车数量;

I (k) = 第k周库存中的手推车数量;

S(k) = 第k周所卖出的手推车数量;

以下为10周计划中的每周销售额;

销售额

1

50

2

55

3

60

4

70

5

70

6

75

7

80

8

80

9

90

10

55

假设每周的产量都基于前一周的销售额,所以有P(k) = S(k - 1)。假设第一周的产量为50辆手推车:即,P(1) = 50。编写一个MATLAB程序计算:10周之内每周库存之中的手推车数量或者计算手推车库存数量减少到0为止的时间,并同时绘制图形。针对以下两种情况运行该程序:

(1)初始库存为50辆手推车,所以I(1)= 50;

(2)初始库存为30辆手推车,所以I (1) = 30。

>> s=[50 55 60 70 70 75 80 80 90 55]

s =

50 55 60 70 70 75 80 80 90 55

>> for i=2:1:10

p(i)=s(i-1);

end

>> p

p =

0 50 55 60 70 70 75 80 80 90

>> l=[50 0 0 0 0 0 0 0 0 0]

l =

50 0 0 0 0 0 0 0 0 0

>> for n=2:1:10

l(n)=l(n-1)+p(n)-s(n);

end

>> l

l =

50 45 40 30 30 25 20 20 10 45

>> l=[30 0 0 0 0 0 0 0 0 0]

l =

30 0 0 0 0 0 0 0 0 0

>> for n=2:1:10

l(n)=l(n-1)+p(n)-s(n);

end

>> l

l =

30 25 20 10 10 5 0 0 -10 25

库存量(1)

库存量(2)

库存量(1)

库存量(2)

1

50

30

6

30

10

2

50

25

7

30

5

3

45

20

8

25

0

4

40

20

9

20

0

30

10

10

10

(<0)

5

Matlab 第七章

1.创建符号表达式f(X)=sinx+x。

>> f = sym('sin(x)+x');

2.计算习题1中表达式在处的值,并将结果设置为以下 5 种精度:小数点之后 1

位、2 位、5 位、10位和20位有效数字。

>> digits(2)

>> vpa(subs(f,pi/6))

ans =

1.0

>> digits(3)

>> vpa(subs(f,pi/6))

ans =

1.02

>> digits(6)

>> vpa(subs(f,pi/6))

ans =

1.0236

>> digits(11)

>> vpa(subs(f,pi/6))

ans =

1.

>> digits(21)

>> vpa(subs(f,pi/6))

ans =

1.29870464

3.设x为符号变量,f(x)=x4+x2+1,g(x)=x3+4x2+5x+8,试进行如下运算:

(1)f(x)+g(x)

(2)f(x)*g(x)

(3)求g(x)的反函数

(4)求g以f(x)为自变量的复合函数

>> f = sym('x^4 + x^2 + 1');

g = sym('x^3 + 4*x^2 + 5*x + 8');

>> f+g

ans =

x^4 + x^3 + 5*x^2 + 5*x + 9

>> f*g

ans =

(x^4 + x^2 + 1)*(x^3 + 4*x^2 + 5*x + 8)

>> finverse(g)

Warning: Functional inverse is not unique.

> In D:Program FilesMATLABR2011atoolboxsymbolicsymbolicsymengine.p>symengine at

52

In se at 41

ans =

1/(9*(x/2 + ((x/2 - 82/27)^2 - 1/729)^(1/2) - 82/27)^(1/3)) + (x/2 + ((x/2 - 82/27)^2 - 1/729)^(1/2) -

82/27)^(1/3) - 4/3

>> syms x

>> compose(g,f,x)

ans =

4*(x^4 + x^2 + 1)^2 + (x^4 + x^2 + 1)^3 + 5*x^2 + 5*x^4 + 13

4.合并同类项

(1)3x-2x2+5+3x3-2x-5

(2)2x2-3xy+y2-2xy-2x2+5xy-2y+1

>> f = sym('3*x - 2*x^2 + 5 + 3*x^2 - 2*x -5');

>> collect(f)

ans =

x^2 + x

>> f = sym('2*x^2 - 3*x*y + y^2 - 2*x*y - 2*x^2 + 5*x*y - 2*y + 1');

>> collect(f)

ans =

y^2 - 2*y + 1

5.因式分解

(1)7798666进行因数分解,分解为素数乘积的形式

(2)-2m8+512

(3)3a2(x-y)2-4b2(y-x)2

>> sym 779866

ans =

779866

>> factor(779866)

ans =

2 149 2617

>> f=sym('-2*m^8+512')

f =

512 - 2*m^8

>> factor(f)

ans =

-2*(m - 2)*(m + 2)*(m^2 + 4)*(m^4 + 16)

>> g=sym('3*a^3*(x-y)^3-4*b^2*(y-x)^2')

g =

3*a^3*(x - y)^3 - 4*b^2*(x - y)^2

>> factor(g)

ans =

(x - y)^2*(3*a^3*x - 3*a^3*y - 4*b^2)

6.绘制下列函数的图像

(1)(2)>> f=sym('sin(x)+x^2')

f =

sin(x) + x^2

>> ezplot(f,[0,2*pi])

>> g=sym('x^3 + 2*x^2 + 1')

g =

x^3 + 2*x^2 + 1

>> ezplot(g,[-2,2])

7. 计算下列各式

,,

(1)(2)(3)

,求,求

,,

(4),>> limit(sym('(tan(x)-sin(x))/(1-cos(2*x))'))

ans =

0

>> y=sym('x^3-2*x^2+sin(x)')

y =

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

>> diff(y)

ans =

cos(x) - 4*x + 3*x^2

>> f=sym('x*y*log(x+y)')

f =

x*y*log(x + y)

>> diff(f,'x')

ans =

y*log(x + y) + (x*y)/(x + y)

>> diff(f,'y')

ans =

x*log(x + y) + (x*y)/(x + y)

>> y=sym('ln(1+t)')

y =

log(t + 1)

>> int(y)

ans =

(log(t + 1) - 1)*(t + 1)

>> int(y,0,27)

ans =

28*log(28) - 27

8.计算下列各式

(1)

(2)(3)

在 0 附近的Taylor 展开

>> symsum(sym('(3/n)^n'),1,inf)

ans =

sum(3^n/n^n, n = 1..Inf)

>> symsum(sym('2^n*sin(pi/(3^n))'),1,inf)

ans =

sum(2^n*sin(pi/3^n), n = 1..Inf)

>> taylor(sym('sin(x)'))

ans =

x^5/120 - x^3/6 + x

9.求解线性方程组

>> [x,y] = solve(sym('2*x+3*y=1'),sym('3*x+2*y=-1'))

x =

-1

y =

1

10.对符号表达式z=xe-x2-y2,进行如下变换

(1)关于的傅立叶变换

(2)关于的拉普拉斯变换

的 Z 变换 (3)分别关于和>> syms x y

>> z=x*exp(-(x^2)+y^2)

z =

x*exp(y^2 - x^2)

>> syms u v

>> fourier(z,x,u)

ans =

-(pi^(1/2)*u*exp(y^2 - u^2/4)*i)/2

>> laplace(z,y,v)

ans =

x*laplace(exp(y^2 - x^2), y, v)

>> ztrans(z,y,v)

ans =

x*ztrans(exp(y^2 - x^2), y, v)

11.绘制函数在,上的表面图

>> syms x y

>> z = 1/(2*pi)*exp(-(x^2+y^2))

z =

57349/(36968*exp(x^2 + y^2))

>> ezsurf(x,y,z,[-3,3,-3,3])

Matlab 第八章

1.编写程序,该程序在同一窗口中绘制函数在 之间的正弦曲线和余弦曲线,步长为

,线宽为 4 个象素,正弦曲线设置为蓝色实线,余弦曲线颜色设置为红色虚线,两条曲线交点处,用红色星号标记。

>>x=[0:pi/100:2*pi];

>>sinx=round(1000*sin(x))/1000;

>>cosx=round(1000*cos(x))/1000;

>>plot(x,sinx)

>>hold on

>>plot(x,cosx,'r--')

>>hold on

>>plot(x(find(sinx==cosx)),sinx(find(sinx==cosx)),'r*')

注:步长为pi/10时无法找到对应点。。。

2.绘制下列图像

(1),

,, (2)三维曲线:(3)双曲抛物面:,,

>>x = 0:pi/10:10*pi;

>>y=x.*sin(x);

>>plot(x,y)

>> [X,Y] = meshgrid(-10:0.5:10);

>> Z=X.^2+6*X*Y+Y.^2+6*X+2*Y-1;

>> plot3(X,Y,Z)

>> [X,Y] = meshgrid(-16:0.4:16,-4:0.1:4);

>> Z=X.^2/16-Y.^2/4;

>> plot3(X,Y,Z)

3.绘制下列图像

(1)绘制电脑磁盘使用情况的饼状图

(2)生成 100 个从 0 到 10 之间的随机整数,绘制其直方图

(3)生成 10个从 0 到 10 之间的随机整数,绘制其阶跃图

>> x=[7.84 24.4];

>> pie(x,{'可用空间','已用空间'})

>>hist(round(rand(100,1)*10))

>> X = round(rand(10,1)*10);

>> stairs(X)

4.分别通过界面交互方式和函数方式在第 1 题生成的图形中添加

注释,至少应包括:标题,文本注释,图例。

函数方式:

>> title('正弦曲线和余弦曲线');

>> gtext('sin(x)')

>> gtext('cos(x)')

>> legend('sin(x)','cos(x)')

5.对第 2 题中绘制的双曲抛物面尝试进行视点控制和颜色控制。

>>title('azimuth=0,elevation=180');

>>view(0,180)

>>title('azimuth=50,elevation=150');

>>colormap(gray);

>> view(50,150)


本文标签: 计算 功能 进行 绘制 手推车