MATLAB绘制二维、三维图形
例2-1 在子图形窗口中画出 上正弦、余弦曲线。
x=0:0.1*pi:2*pi;%按步长赋值生成x向量
y=sin(x); z=cos(x);%生成正弦、余弦函数值y、z向量
subplot(2,1,1)%分图形窗口为2行1列,并在第一个子窗中绘图
plot(x,y,x,z)%在第一个子窗中画出正弦、余弦曲线
subplot(2,1,2)%在第二个子窗中绘图
plot(x,y,'k:',x,z,'r-')%在第二个子窗中用不同颜画两条曲线
hold on%保持第二个子窗中绘图
plot(x,y,'bo',x,z,'k+')%用'o'和'+'标记曲线上分点
hold off%取消图形保持
例2-2 画出 上正弦、余弦曲线并对线型加粗、点型加大,重新定置坐标系以及加注相说明和注释。
x=0:0.1*pi:2*pi;%按步长赋值生成x向量
x=0:0.1*pi:2*pi;%按步长赋值生成x向量
y=sin(x); %生成正弦、余弦函数值y、z向量
z=cos(x);
plot(x,y, 'b-', x,z, 'k .-','linewidth',3, 'markersize',15)
axis([-0.2*pi 2*pi -1.2 1.2])%重新设置图形窗口坐标轴范围
grid%加注坐标网格
xlabel('Variable \it{x}')%标记横坐标轴, \it{x}表示x为斜体
ylabel('Variable \it{y}')%标记纵坐标轴
title('Sine and Cosine Cruves')%标记图名
text(2.5,0.7,'Sin(x)')%在(2.5,0.7)位置,标记曲线名称
text(1.5,0.1,'Cos(x)')%在(1.5,0.1)位置,标记曲线名称
hold on%图形保持,在同一图形窗口中叠加图形
plot([0,2*pi],[0,0], 'r-.')%叠加一条红的点划直线 0,0)到(2pi,0)
hold off%图形保持取消,再画图时将另辟窗口
例2-3 分别在两个图形窗口画出填充一正方形和极坐标方程 的图形。
h1=figure;%打开第一个图形窗口,返回其图标识号(句柄)h1
h1=figure;%打开第一个图形窗口,返回其图标识号(句柄)h1
x=[0 1 1 0 0];%闭合图形的顶点横坐标向量
y=[0 0 1 1 0];%闭合图形的顶点纵坐标向量
fill(x,y,'y') %填充闭合图形(用黄颜)
axis([-1 2 -1 2]) %重新设置坐标轴
h2=figure;%打开第二个图形窗口,返回其图标识号(句柄)h2
theta=linspace(0,2*pi);%对theta角的范围进行划分,生成分点向量
rho=sin(2*theta).*cos(2*theta);%生成相应极坐标方程的极径rho向量
polar(theta,rho,'r')%绘制相应的极坐标方程图形(用红颜)
title('Polar plot of sin(2*theta)cos(2*theta)')%添加图形标题
set(h2,'linewidth',3)%对第二个窗口中曲线加粗
例2-4在[-2.5,2.5]上画出函数 的直方图和阶梯图。
x=linspace(-2.5,2.5,20);%产生横坐标x向量
x=linspace(-2.5,2.5,20);%产生横坐标x向量
y=exp(-x.*x);%生成函数值向量
h1=subplot(1,2,1);%分图形窗口并在第一个子窗中绘图,返回其句柄h1
bar(x,y) %画出直方图
title(' Bar Chart of a Bell Curve ')%添加图形标题
h2= subplot(1,2,2);%在第二个子窗中绘图,返回其句柄h2
stairs(x,y) %画出阶梯图
title('Stairs Plot of a Bell Curve ')%添加图形标题
例2-5 采用不同形式(直角坐标、参数、极坐标),画出单位圆 的图形。
(1)直角坐标系
x=-1:0.01:1; %对x的范围进行划分,生成分点向量
例2-5 采用不同形式(直角坐标、参数、极坐标),画出单位圆 的图形。
(1)直角坐标系
x=-1:0.01:1; %对x的范围进行划分,生成分点向量
y1=sqrt(1-x.^2);%生成上半单位圆的函数值向量
y2=-y1;%生成下半单位圆的函数值向量
plot(x,y1,x,y2);%同时画出上半圆和下半圆
axis equal%让坐标系中两个坐标轴取值相同
(2)参数方程
t=0:0.01*pi:2*pi;%对t的范围进行划分,生成分点向量
t=0:0.01*pi:2*pi;%对t的范围进行划分,生成分点向量
x=cos(t); y=sin(t);%生成单位圆上的函数值向量
plot(x,y);%画出单位圆
axis equal%让坐标系中两个坐标轴取值相同
(3)极坐标系
t=0:0.01*pi:2*pi;%对t的范围进行划分,生成分点向量
r=1+0*t;%生成单位圆的极径r向量
polar(t,r)%绘制相应的极坐标方程图形
例2-6 用subplot函数画出螺旋线:x=sin(t),y=cos(t),z=t,上一段曲线。
t=0:pi/50:10*pi;%生成参数t数组
t=0:pi/50:10*pi;%生成参数t数组
X=sin(t);%生成螺旋线X数组
Y=cos(t);%生成螺旋线Y数组
Z=t;%生成螺旋线Z数组
plot3(X,Y,Z, 'k-', 'linewidth',3) %画螺旋线
grid
例2-7 画出矩形域[-1,1] ×[-1,1]上旋转抛物面:
x=linspace(-1,1,100);%分割[-1,1]区间生成x
y=x;%y与x相同
[X,Y]=meshgrid(x,y); %生成矩形域[-1,1] ×[-1,1]网格节点坐标矩阵
Z=X.^2+Y.^2;%生成 函数值矩阵
subplot(1,2,1)
mesh(X,Y,Z) ;%在第一个子图中画 网格曲面
subplot(1,2,2)
surf(X,Y,Z) ;%在第二个子图中画 光滑曲面
shading flat ;%对曲面 平滑并除去网格
Y=cos(t);%生成螺旋线Y数组
Z=t;%生成螺旋线Z数组
plot3(X,Y,Z, 'k-', 'linewidth',3) %画螺旋线
grid
例2-7 画出矩形域[-1,1] ×[-1,1]上旋转抛物面:
x=linspace(-1,1,100);%分割[-1,1]区间生成x
y=x;%y与x相同
[X,Y]=meshgrid(x,y); %生成矩形域[-1,1] ×[-1,1]网格节点坐标矩阵
Z=X.^2+Y.^2;%生成 函数值矩阵
subplot(1,2,1)
mesh(X,Y,Z) ;%在第一个子图中画 网格曲面
subplot(1,2,2)
surf(X,Y,Z) ;%在第二个子图中画 光滑曲面
shading flat ;%对曲面 平滑并除去网格
例2-8 在圆形域 上绘制旋转抛物面: 。
x=linspace(-1,1,300);%分割[-1,1]区间生成x
x=linspace(-1,1,300);%分割[-1,1]区间生成x
y=x;%生成y
[X,Y]=meshgrid(x,y); %生成矩形域[-1,1]X[-1,1]网格节点坐标矩阵
Z=X.^2+Y.^2;%生成 函数值矩阵
i=find(Z>1);%出圆域 之外的函数值(z>1)坐标点i
Z(i)=NaN;%对圆域 之外的坐标点i处函数值进行“赋空”
subplot(1,2,1)
mesh(X,Y,Z) ;%在第一个子图中画 网格曲面
subplot(1,2,2)
surf(X,Y,Z) ;%在第二个子图中画 光滑曲面
shading flat ;%对曲面平滑并除去网格
例2-9 画出 在 上的图形。
x=-7.5:0.5:7.5;
y=x;
[X,Y]=meshgrid(x,y);
u=sqrt(X.^2+Y.^2)+eps;%加eps使得u不等于0,保证z有意义
Z=sin(u)./u;
surf(X,Y,Z)
x=-7.5:0.5:7.5;
y=x;
[X,Y]=meshgrid(x,y);
u=sqrt(X.^2+Y.^2)+eps;%加eps使得u不等于0,保证z有意义
Z=sin(u)./u;
surf(X,Y,Z)
实验3MATLAB编程介绍与循环结构
例3-1:求n(n=100)个奇数的和:s=1+3+5+…+(2n-1).
clear;clc;%清除内存变量,清理命令窗口
n=100;%赋值给定奇数的个数
s=0;%设定存放和的变量s并赋初值0
for i=1:n%定义循环变量i从1到n,以1为步长,即为奇数序号
s=s+(2*i-1);%先计算右端奇数并累加后再赋给左端的变量s
例3-1:求n(n=100)个奇数的和:s=1+3+5+…+(2n-1).
clear;clc;%清除内存变量,清理命令窗口
n=100;%赋值给定奇数的个数
s=0;%设定存放和的变量s并赋初值0
for i=1:n%定义循环变量i从1到n,以1为步长,即为奇数序号
s=s+(2*i-1);%先计算右端奇数并累加后再赋给左端的变量s
fprintf('i=%.0f, s=%.0f\n',i,s)%逐行显示出累加求和的过程
end%循环结构结束
例3-2:求正整数n的阶乘:p=1×2 × 3 × … × n = n!,并求出n=20时的结果。
clear;clc;
%清除内存变量,清理命令窗口
n=20;%赋值给定正整数
p=1;%设定存放阶乘的变量p并赋初值1
for i=1:n%定义循环变量i从1到n,以1为步长,即连续正整数
p=p*i;%先计算右端乘积后再赋给左端的变量p
fprintf('i=%.0f, p=%.0f\n',i,p)%逐行显示出i!
end%循环结构结束
例3-3:根据麦克劳林公式可以得到e≈1+1+1/2!+1/3!+…+1/n!,试求e的近似值。
clear;clc;%清除内存变量,清理命令窗口
n=10;
%赋值给定正整数
end%循环结构结束
例3-2:求正整数n的阶乘:p=1×2 × 3 × … × n = n!,并求出n=20时的结果。
clear;clc;
%清除内存变量,清理命令窗口
n=20;%赋值给定正整数
p=1;%设定存放阶乘的变量p并赋初值1
for i=1:n%定义循环变量i从1到n,以1为步长,即连续正整数
p=p*i;%先计算右端乘积后再赋给左端的变量p
fprintf('i=%.0f, p=%.0f\n',i,p)%逐行显示出i!
end%循环结构结束
例3-3:根据麦克劳林公式可以得到e≈1+1+1/2!+1/3!+…+1/n!,试求e的近似值。
clear;clc;%清除内存变量,清理命令窗口
n=10;
%赋值给定正整数
p=1;%设定存放阶乘的变量p并赋初值1
s=1;%设定存放累加和的变量s并赋初值1
for i=1:n%定义循环变量i从1到n,以1为步长
p=p*i;%先计算右端乘积后再赋给左端的变量p,此时p为i的阶乘
s=s+1/p;
%先计算右端阶乘倒数的累加后再赋给左端的变量s
fprintf('i=%.0f, s=%.8f\n',i,s)%逐行显示出第i次e的近似值
end%循环结构结束
例3-4:对于数列 ,求其前n项和不超过1000时的n的值及和.
clear;clc;%清除内存变量,清理命令窗口
n=0;%设定正整数并赋初值0
s=1;%设定存放累加和的变量s并赋初值1
for i=1:n%定义循环变量i从1到n,以1为步长
p=p*i;%先计算右端乘积后再赋给左端的变量p,此时p为i的阶乘
s=s+1/p;
%先计算右端阶乘倒数的累加后再赋给左端的变量s
fprintf('i=%.0f, s=%.8f\n',i,s)%逐行显示出第i次e的近似值
end%循环结构结束
例3-4:对于数列 ,求其前n项和不超过1000时的n的值及和.
clear;clc;%清除内存变量,清理命令窗口
n=0;%设定正整数并赋初值0
s=0;%设定存放累加和的变量s并赋初值0
while s<=1000%用累加和s与1000进行比较作为循环条件
n=n+1;%改变n为连续正整数
s=s+sqrt(n);%先计算右端开方数的累加后再赋给左端的变量s
while s<=1000%用累加和s与1000进行比较作为循环条件
n=n+1;%改变n为连续正整数
s=s+sqrt(n);%先计算右端开方数的累加后再赋给左端的变量s
fprintf('n=%.0f, s=%.4f\n',n,s)%逐行显示正整数及部分和
end%循环结构结束
例3-5:根据e≈1+1+1/2!+1/3!+…+1/n! 求e的近似值,要求精确到 。
clear;clc;%清除内存变量,清理命令窗口
p=1;%设定存放阶乘的变量p并赋初值1
s=1;%设定存放累加和的变量s并赋初值1
r=1;%设定前后两次近似值的误差r并赋初值1
k=0;%设定构造连续正整数的变量k赋初值0又为循环次数
while r>=1.0e-8%当近似值的精度r没达到 时继续循环
k=k+1;%累计循环次数并作为下一个正整数k
p=p*k;%计算k的阶乘p
r=1/p;%计算前后两次近似值的误差r
s=s+r;
%计算e的近似值s
fprintf('k=%.0f, s=%.10f\n',k,s)%逐行显示出第k次e的近似值s
end%循环结构结束
例3-5:根据e≈1+1+1/2!+1/3!+…+1/n! 求e的近似值,要求精确到 。
clear;clc;%清除内存变量,清理命令窗口
p=1;%设定存放阶乘的变量p并赋初值1
s=1;%设定存放累加和的变量s并赋初值1
r=1;%设定前后两次近似值的误差r并赋初值1
k=0;%设定构造连续正整数的变量k赋初值0又为循环次数
while r>=1.0e-8%当近似值的精度r没达到 时继续循环
k=k+1;%累计循环次数并作为下一个正整数k
p=p*k;%计算k的阶乘p
r=1/p;%计算前后两次近似值的误差r
s=s+r;
%计算e的近似值s
fprintf('k=%.0f, s=%.10f\n',k,s)%逐行显示出第k次e的近似值s
end%循环结构结束
实验4 MATLAB选择结构与应用实验
实验4 MATLAB选择结构与应用实验
例4-1:求任意有限数组a=[a(1),a(2),…,a(n)]中数值最大的元素M以及所在位置k.
Function [M,k]=findM(a)
定义函数findM,输入数组a,返回最大元素M及位置k
n=length(a);%获取数组的长度即元素的个数n
M=a(1); k=1;%将第一个元素作为最大值赋值给M,位置为1;
for i=2:n%从第二个元素到最后一个元素依次进行
if a(i)>M
%比较后续元素与目前最大值M的大小
M=a(i); k=i;%将数值较大的元素赋值给M,同时保留位置i
end%选择结构结束
end %循环结构结束
a=[1,2.2,pi,-0.8,3.2,0]; 任意给定一数组
n=length(a);%获取数组的长度即元素的个数n
M=a(1); k=1;%将第一个元素作为最大值赋值给M,位置为1;
for i=2:n%从第二个元素到最后一个元素依次进行
if a(i)>M
%比较后续元素与目前最大值M的大小
M=a(i); k=i;%将数值较大的元素赋值给M,同时保留位置i
end%选择结构结束
end %循环结构结束
a=[1,2.2,pi,-0.8,3.2,0]; 任意给定一数组
[M,k]=findM(a)%调用函数findM
例4-2:编写一个函数将百分制成绩转换为优(A),良(B),中(C),差(D)四等级.
例4-2:编写一个函数将百分制成绩转换为优(A),良(B),中(C),差(D)四等级.
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论