matlab 1到无穷_分析软件工具 | MATLAB程序设计与应用第3版(刘卫国)课后实验

知行校园汇

记录学习、分享干货、吐槽人生!

关注

相关说明

  • 文章内容:MATLAB程序设计与应用·第3版(刘卫国)课后实验

  • 所属课程:分析软件工具

  • 作者主页:csdn.cxhit.com(建议电脑访问)

实验1 MATLAB系统环境与运算基础

一、实验目的

  1. 掌握启动和退出MATLAB的方法。

  2. 掌握MATLAB操作界面的组成。

  3. 掌握建立矩阵的方法。

  4. 掌握MATLAB表达式的书写规则以及常用函数的方法。

二、实验内容

实验1. T1、2

以上源码略

实验1.T3

源码:

fprintf('(1):计算:z1=2*sin(85*pi/180)/(1+exp(2))')
z1=2*sin(85*pi/180)/(1+exp(2))

fprintf('(2)计算:z2=π/(x+y)')
x2=12;y2=10^-5;
z2=pi/(x2+y2)

fprintf('(3)计算:z3=1/2*log(x+sqrt(1+x^2))')
x3=[2 1+2*1i;-.45 5];
z3=1/2*log(x3+sqrt(1+x3^2))

fprintf('(4)计算:z4=(exp(0.3.*a)-exp(-0.3.*a))./2.*sin(a+0.3)+log((0.3+a)./2)')
a=-3.0:0.1:3.0;
z4=(exp(0.3.*a)-exp(-0.3.*a))./2.*sin(a+0.3)+log((0.3+a)./2)

实验1.T4

源码:

fprintf('初始矩阵:')
A=[ 12 34 -4;34 7 87;3 65 7]
B=[ 1 3 -1;2 0 3;3 -2 7]
%第(1)题:
fprintf('A*B 的结果')
A*B
fprintf('B*A 的结果')
B*A
fprintf('A.*B 的结果')
A.*B

%第(2)题
fprintf('A^3 的结果')
A^3
fprintf('A.^3 的结果')
A.^3

%第(3)题
fprintf('A/B 的结果')
A/B
fprintf('A\\B 的结果')
A\B

%第(4)题
fprintf('[A,B] 的结果')
[A,B]
fprintf('[A([1,3],:);B^2] 的结果')
[A([1,3],:);B^2]

实验1.T5

源码:

% 定义矩阵
A=(reshape(1:1:25,5,5))'
B=[3 0 16;17 -6 9;0 23 -4;9 7 0;4 13 11]
fprintf('输出A和B的乘积,记为C:')
C=A*B
fprintf('将矩阵C的右下角3*2给D:')
D=C(3:end,2:end)

实验1.T6

源码:

% 先来一个从100到999的一维矩阵
fprintf('第6题(1)')
m=100:999;
n=find(mod(m,21)==0);
length(n)

fprintf('第6题(2)')
ch='ABC123d4武汉理工大学计算机1601e56Fg9';
k=find(ch>='A'&ch<='Z')
%ch(k)=[]

实验2 MATLAB矩阵处理

一、实验目的

  1. 掌握生成特殊矩阵的方法

  2. 掌握矩阵处理的方法

  3. 掌握用矩阵求逆法解线性方程组的方法

二、实验内容

实验2.T1

源码:

clc
E=eye(3)
R=rand(3,2)
O=zeros(2,3)
S=diag([6 6])

A=[E R;O S]

fprintf('计算A^2的结果')
A^2

fprintf('计算等号右边')
a=[E R+R*S;O S^2]

fprintf('两边做差:')
A^2-a

实验2.T2

源码:

clc
% 建立魔方矩阵
A=magic(5)
% 输出矩阵的行列式的值
fprintf('矩阵的行列式的值:')
det(A)
% 输出矩阵的迹
fprintf('输出矩阵的迹')
trace(A)
% 输出矩阵的秩
fprintf('输出矩阵的秩')
rank(A)
% 输出矩阵的范数
fprintf('输出矩阵的范数')
fprintf('一范数')
norm(A,1)%一范数
fprintf('二范数')
norm(A,2)%二范数
fprintf('无穷范数')
norm(A,inf)%无穷范数
% 输出矩阵的逆矩阵
fprintf('逆矩阵')
inv(A)

实验2.T3

源码:

clc
% 产生5阶希尔伯特矩阵
fprintf('产生5阶希尔伯特矩阵')
H=hilb(5)

% 产生5阶帕斯卡矩阵
fprintf('产生5阶帕斯卡矩阵')
P=pascal(5)

% 求二者行列式值
fprintf('求二者行列式值')
Hh=det(H)
Hp=det(P)

% 求二者条件数
fprintf('求二者条件数')
Th=cond(H)
Tp=cond(P)

实验2.T4

源码:

clc
% 输入矩阵A
fprintf('输入矩阵A')
A=[-29 6 18;20 5 12;-8 8 5]
% 计算特征值与特征向量,其中V为特征向量的列向量构成,D为特征值构成的对角矩阵
fprintf('计算特征值与特征向量,其中V为特征向量的列向量构成,D为特征值构成的对角矩阵')
[V,D]=eig(A)

fprintf('其他测试')
B=[1 0 0;0 2 0;0 0 3]
[x y]=eig(B)

实验2.T5

源码:

clc
% 输入3X3的A矩阵
fprintf('输入3X3的A矩阵')
A=[1/2 1/3 1/4;1/3 1/4 1/5;1/4 1/5 1/6]

% 输入列向量b
b=[0.95 0.67 0.52]'
% 求A矩阵的逆矩阵
A1=inv(A);
% 计算X的值
fprintf('计算X的值')
x=A1*b
% 换新的列向量b
b2=[0.95 0.67 0.53]'
% 继续求x的值
fprintf('继续求x的值')
x2=A1*b2

% 计算矩阵A的条件数
fprintf('计算矩阵A的条件数')
C=cond(A)

实验3 顺序结构程序设计

一、实验目的

  1. 掌握建立和执行M文件的方法

  2. 掌握输入输出的方法

  3. 掌握顺序结构程序设计方法

二、实验内容

实验3.T1

源码:

x=input('请输入x:');
num=[];
num=[num,rem(x,10)];
num=[num,floor(rem(x,100)/10)];
num=[num,rem(floor(x/100),10)];
num=[num,floor(x/1000)];
num=7+num;
num=rem(num,10);
t=num(1);
num(1)=num(3);
num(3)=t;
t=num(2);
num(2)=num(4);
num(4)=t;
num

实验3.T2

源码:

x=input('请输入实数x:');
a=floor(x)
b=x-floor(x)

T3~T5 源码略

实验3.T6

源码:

x=(1+pi)^(1/3);
y=(exp(-x)-tan(73*pi/180))/(10^(-5)+log(abs(sin(x)^2-sin(x*x))))

实验4 选择结构程序设计

一、实验目的

  1. 掌握利用if语句实现选择结构的方法

  2. 掌握利用switch语句实现多分支选择结构的方法

  3. 掌握try语句的使用方法

二、实验内容

实验4.T1

源码:

x=[-5.0,-3.0,1.0,2.0,2.5,3.0,5.0];
y=[];                             %建立存放所有y值的矩阵
for x0=x
    if x0<0&&x0~=-3
        y=[y,x0*x0+x0-6];
    elseif x0>=0&&x0<5&&x0~=2&&x0~=3
        y=[y,x0*x0-5*x0+6];
    else
        y=[y,x0*x0-x0-1];
    end
end
x                                 %输出所有x
y                                 %输出所有y

%f(-5.0)
%f(-3.0)
%f(1.0)
%f(2.0)
%f(2.5)
%f(3.0)
%f(5.0)

实验4.T2

源码:(if语句)

x=[-5.0,-3.0,1.0,2.0,2.5,3.0,5.0];
y=[];                             %建立存放所有y值的矩阵
for x0=x
    if x0<0&&x0~=-3
        y=[y,x0*x0+x0-6];
    elseif x0>=0&&x0<5&&x0~=2&&x0~=3
        y=[y,x0*x0-5*x0+6];
    else
        y=[y,x0*x0-x0-1];
    end
end
x                                 %输出所有x
y                                 %输出所有y

%f(-5.0)
%f(-3.0)
%f(1.0)
%f(2.0)
%f(2.5)
%f(3.0)
%f(5.0)

源码:(switch语句)

s=input('请输入一个成绩(0分到100分之间):');  %s用于存放成绩
while 1                                       %判断输入成绩的合理性
    if s<0|s>100
        disp('输入的成绩需在0到100之间,请重新输入:')
        s=input('请输入一个成绩(0分到100分之间):');
    else
        break;
    end
end
switch fix(s/10)                              %对成绩做出等级判断
    case { 9,10}
        disp('A')
    case 8
        disp('B')
    case 7
        disp('C')
    case 6
        disp('D')
    otherwise
        disp('E')
end

实验4.T3

源码:

n=input('请输入员工工号:');
h=input('该员工工作时数是:');
if h>120
x=(h-120)*84*(1+0.15)+120*84;
elseif h<60
x=h*84-700;
else
x=h*84;
end
disp([num2str(n),'号员工的应发工资为',num2str(x)]);

实验4.T4

源码:

a=fix(10+(99-10)*rand(1,2))                    %产生两个随机整数
x=a(1);
y=a(2);
t=input('请输入运算符号:','s');
if t=='+'
    z=x+y;
elseif t=='-'
    z=x-y;
elseif t=='*'
    z=x*y;
elseif t=='/'
    z=x/y;
end
disp([num2str(x),t,num2str(y),'=',num2str(z)])   %输出运算结果

实验4.T5

源码:

a=rand(5,6)              %产生5x6的随机矩阵
n=input('请输入您要输出矩阵的第几行:');
if n>5
    disp('超出了矩阵的行数,矩阵的最后一行为:')
    a(5,:)
else
    disp(['矩阵的第',num2str(n),'行为:'])
    a(n,:)
end

实验5 循环结构程序设计

一、实验目的

  1. 掌握利用for语句实现循环结构的方法

  2. 掌握利用while语句实现循环结构的方法

  3. 熟悉利用向量运算来代替循环操作的方法

二、实验内容

实验5.T1

源码:(循环结构)

y=0;
n=input('n=?');
for i=1:n
    y=y+1/(2*i-1)/3^(2*i-1);
end
y
log(2)/2

源码:(向量结构)

n=input('n=?');
i=1:n;
y=1./(2*i-1)./3.^(2*i-1);
y=sum(y)
log(2)/2
log(25)/log(5)

实验5.T2

源码:

y=0;
n=1;
while y<3
    y=y+1/(2*n-1);
    n=n+1;
end
y=y-1/(2*(n-1)-1)
n=n-2

实验5.T3

源码:

a=input('a=?');
b=input('b=?');
Xn=1;
Xn1=a/(b+Xn);
n=0;
while abs(Xn1-Xn)>1e-5
    Xn=Xn1;
    Xn1=a/(b+Xn);
    n=n+1;
    if n==500
        break;
    end
end
n
Xn1
r1=(-b+sqrt(b*b+4*a))/2
r2=(-b-sqrt(b*b+4*a))/2

实验5.T4

源码:

for i=1:100
   if i==1
      f(i)=1;
   elseif i==2
      f(i)=0;
   elseif i==3
      f(i)=1;
   else
      f(i)=f(i-1)-2*f(i-2)+f(i-3);
   end
end
max(f)
min(f)
sum(f)
length(find(f>0))
length(find(f==0))
length(find(f<0))

实验5.T5

源码:

s=0;n=0;
for i=2:49
   b=i*(i+1)-1;
   m=fix(sqrt(b));
   for j=2:m
      if rem(b,j)==0
         break
      end
   end
   if j==m
      n=n+1;
      s=s+b;
   end
end
n
s

实验6 函数文件

一、实验目的

  1. 掌握函数文件的概念

  2. 掌握利用和调用MATLAB函数的方法

二、实验内容

实验6.T1

源码:shiyan6_1.m

function y = shiyan6_1( x )
%SHIYAN6_1 此处显示有关此函数的摘要
%   此处显示详细说明y=[exp(x),log(x),sin(x),cos(x)];

%在命令窗口调用上述函数文件:
%y=mat1(1+i)

end

源码:shiyan6_1_exe.m

y=shiyan6_1(2+3i)

实验6.T2

源码:shiyan6_2.m

function [a,b,N,M] = shiyan6( m,n,t )
%SHIYAN6_2 此处显示有关此函数的摘要
%   此处显示详细说明A=[m*cos(t*pi/180),-m,-sin(t*pi/180),0;m*sin(t*pi/180),0,cos(t*pi/180),0;0,n,-sin(t*pi/180),0;0,0,-cos(t*pi/180),1];
B=[0,9.8*m,0,9.8*n];
C=inv(A)*B';
a=C(1);
b=C(2);
N=C(3);
M=C(4);
%在命令窗口调用该函数文件:
%m1=input('m1=');
%m2=input('m2=');
%theta=input('theta=');
%[a1,a2,N1,N2]=shiyanwu2(m1,m2,theta)
end

源码:shiyan6_2_exe.m

m1=input('m1=');
m2=input('m2=');
theta=input('theta=');
[a1,a2,N1,N2]=shiyan6_2(m1,m2,theta)

实验6.T3

源码:shiyan6_3.m

function flag = shiyan6_3( x )
%SHIYAN6_3 此处显示有关此函数的摘要
%   此处显示详细说明flag=1;
for i=2:sqrt(x)
if rem(x,i)==0
      flag=0;
      break;
end
end
end

源码:shiyan6_3_exe.m

for i=10:99
j=10*rem(i,10)+fix(i/10);
if shiyan6_3(i)&shiyan6_3(j)
   disp(i)
end
end

实验6.T4

源码:shiyan6_4.m

function y = shiyan6_4( x )
%SHIYAN6_4 此处显示有关此函数的摘要
%   此处显示详细说明
%y=1./((x-2).^2+0.1)+1./((x-3).^4+0.01);
y=1./((x-2)*(x-2)+0.1)+1./((x-3).^4+0.01);
end

源码:shiyan6_4_exe.m

y=shiyan6_4(2)
a=[1,2;3,4];
y=shiyan6_4(a)

实验6.T5

源码:第一题(函数文件)

function f1 = shiyan6_5_1( n )
%SHIYAN6_5_1 此处显示有关此函数的摘要
%   此处显示详细说明f1=n+10*log(n*n+5);
end

源码:第二题(函数文件)

function f2 = shiyan6_5_2( n )
%SHIYAN6_5_2 此处显示有关此函数的摘要
%   此处显示详细说明i=1:n;
m=i.*(i+1);
f2=sum(m);
end

源码:运行文件

%第一题输出:
y=shiyan6_5_1(40)/(shiyan6_5_1(30)+shiyan6_5_1(20))

%第二题输出:
y=shiyan6_5_2(40)/(shiyan6_5_1(30)+shiyan6_5_1(20))

实验7 绘图操作

一、实验目的

  1. 掌握绘制二维图形的方法

  2. 掌握绘制三维图形的方法

  3. 掌握绘制图形的辅助操作

二、实验内容

实验7.T1

源码:

%(1)
x=linspace(0,2*pi,101);
y=(0.5+3*sin(x)./(1+x.^2)).*cos(x);
plot(x,y)
%(2)
x=-5:0.01:5;
y=[];   %起始设y为空向量
for x0=x
if x0<=0  %不能写成x0=<0
y=[y,(x0+sqrt(pi))/exp(2)];    %将x对应的函数值放到y中
else
y=[y,0.5*log(x0+sqrt(1+x0^2))];
end
end
plot(x,y)
%(3)
t=-2*pi:0.01:2*pi;
r=10*sin(1+5*t);
polar(t,r)

实验7.T2

源码:

%(1)
x=linspace(-2*pi,2*pi,100);
y1=x.^2;
y2=cos(2*x);
y3=y1.*y2;
plot(x,y1,'b-',x,y2,'r:',x,y3,'y--');
text(4,16,'\leftarrow y1=x^2');
text(6*pi/4,-1,'\downarrow y2=cos(2*x)');
text(-1.5*pi,-2.25*pi*pi,'\uparrow y3=y1*y2');
%(2)
x=linspace(-2*pi,2*pi,100);
y1=x.^2;
y2=cos(2*x);
y3=y1.*y2;
subplot(1,3,1);%分区
plot(x,y1);
title('y1=x^2');%设置标题
subplot(1,3,2);
plot(x,y2);
title('y2=cos(2*x)');
subplot(1,3,3);
plot(x,y3);
title('y3=x^2*cos(2*x)');
%(3)
x=linspace(-2*pi,2*pi,20);
y1=x.^2;
subplot(2,2,1);%分区
bar(x,y1);
title('y1=x^2的条形图');%设置标题
subplot(2,2,2);
stairs(x,y1);
title('y1=x^2的阶梯图');
subplot(2,2,3);
stem(x,y1);
title('y1=x^2的杆图');
subplot(2,2,4);
fill(x,y1,'r');%如果少了'r'则会出错
title('y1=x^2的填充图');
%其他的函数照样做。

实验7.T3

源码:略

实验7.4

源码:

x=linspace(-5,5,21);
y=linspace(0,10,31);
[x,y]=meshgrid(x,y);%在[-5,5]*[0,10]的范围内生成网格坐标
z=cos(x).*cos(y).*exp(-sqrt(x.^2+y.^2)/4);
subplot(2,1,1);
surf(x,y,z);
subplot(2,1,2);
contour3(x,y,z,50);%其中50为高度的等级数,越大越密

实验7.5

源码:

ezsurf('cos(s)*cos(t)','cos(s)*sin(t)','sin(s)',[0,0.5*pi,0,1.5*pi]); %利用ezsurf隐函数
shading interp  %进行插值着色处理

更多内容,请见文末留言处

(无法看留言,请复制文章链接在微信里打开)

— The End —

推荐文章
  • WUT计算机科学与技术专业 课程总览

  • 服务器端软件:集中式版本控制系统SVN

  • 谈谈阿里、腾讯、华为的学生版服务器

觉得有帮助,欢迎赞赏

你可能感兴趣的:(matlab,1到无穷,matlab求两向量夹角)