Matlab第 5次课
2、三维曲线和曲面
3,M文件及程序调试
2.5.5三维曲线和曲面
1、空间曲线绘制 — plot3
格式,plot(x,y,z,’r’)
例子
clc
z=0:0.1:4*pi;
x=cos(z);
y=sin(z);
figure
plot3(x,y,z)
2、空间曲面的绘制
函数 mesh和 surf用来绘制三维曲面。
clc
x=-8:0.5:8;
y=x';
X1=ones(size(y))*x;
Y1=y*ones(size(x));
R=sqrt(X1.*X1+Y1.*Y1);
z=sin(R)./R;
mesh(z)
2.6 M文件及程序调试
2.6.1 主程序文件
注释,以“%”对本程序的特性以及关键的部份进行说明。
1)一般以 clc,clear,close all等语句开始,清除工作空间中原有的变量和图形,以避免其它已执行的程序残留数据对本程序的影响。
2)程序的主体
如果程序中要用到全局变量,要在这里说明。
格式,global 变量名 1 变量名 2 变量名 3…
一般地,若程序中用到流程控制语句,
都要缩进,并且要注意 end的对应。
3)文件命名要应按前面介绍的标志符来命名。 文件名中不能有汉字,也不能以数字开头。
函数文件及其应用
函数文件是 M文件重要的组成部分,M语言函数文件能够接受用户的输入参数,进行计算,并将计算结果作为函数的返回值返回给调用者。
格式
function [x,y]=myfun(a,b,c)-----函数定义行
%函数功能说明行
%帮助文件,说明如何使用该函数
函数体例子
计算一数组的平均值及找出其中间值。
主程序:
clc
clear,close all
N=input('n=')
x=1:N;
[mean,mid]=newstats(x)
%mean
%mid
x1=[5.8,1,3.5,2.2,6.3,3.8]
[mean1,mid1]=newstats(x1)
函数
function [avg,med]=newstats(u)
n=length(u);
avg=mean(u,n);
med=median(u,n);
function a=mean(v,n)
a=sum(v)/n;
function m=median(v,n)
w=sort(v);
if rem(n,2)==1
m=w((n+1)/2);
else
m=(w(n/2)+w(n/2+1))/2;
end
程序调试
M文件编辑器不仅是个文件编辑器,而且是个可视化的调试开发环境。
在这里可以对主程序以及函数文件进行调试,以排查程序的错误。
一般地,程序错误有两类:
1、语法错误;
2、运行错误。
断点的设置
在文件编辑器中有个 Breakpoins菜单,可以用来设置断点,只有设置了断点的程序才能进行调试。
调试程序按钮
clc
clear,close all
dt=0.01; t=0:dt:5;
x=exp(-2*t)
h=exp(-1*t);
subplot(2,2,1),plot(t,h);grid
y=conv(x,h)*dt;
figure
subplot(2,2,2),plot(t,y(1:length(t)));grid
y1=exp(-t)-exp(-2*t);
subplot(2,2,3),plot(t,y1,'r'),grid
例子
例 2,见 word文档例 3,函数文件的调试
function [avg,med]=newstats(u)
n=length(u); avg=mean(u,n);
med=median(u,n);
function a=mean(v,n)
a=sum(v)/n;
function m=median(v,n)
w=sort(v);
if rem(n,2)==1
m=w((n+1)/2);
else
m=(w(n/2)+w(n/2+1))/2;
end
%function [avg,med]=newstats(u)
clc
clear all
u=[1,2,3,4,7] ;
n=length(u);
avg=mean(u,n)
med=median(u,n)
function a=mean(v,n)
a=sum(v)/n;
function m=median(v,n)
w=sort(v);
if rem(n,2)==1
m=w((n+1)/2);
else
m=(w(n/2)+w(n/2+1))/2;
end
第四章 matalab其它函数库
4.1数据分析函数库
4.1.1基本数据分析
clc
clear
close all
data=[154 49 83 67;158 99 81 75;155 100 68 86;145
63 75 96;145 63 75 96;141 55 65 75;
155 56 64 85;147 89 87 77;147 96 54 100;145 60
76 67]
D=max(data)
Std(data)求各列标准差,是指将 N个元素与该列的平均值之差的平方和开方即

N
d at ame and at ad at as t d 2))(()(
trapz(Y):是将 Y中的各个元素相加,但它是将相邻两点的数据的平均值作为数据点,因此若 Y有 5个元素,则只有三个元素相加,这一点和 sum( Y)不同例如
Y1=[1,2,3,4];Y2=trapz(Y1)
答案,Y2 = 7.5000
trapz(x,y)是利用梯形法求积分。
例如,求
0 )s in ( dxx
clc
clear all
close all
X=0:pi/100:pi;
Y=sin(X);
Z=trapz(X,Y)
Z1=pi/100*trapz(Y)
4.1.2 用于场论的数据分析函数
1)gradient函数,用于求二维场和三维场的梯度。若 F(x,y),
jyFixF F
2)del2 是二维场和三维场的拉普拉斯算子
L = del2(U)
.,,)(
2
1
2 2
2
2
2
2
22

zd
ud
yd
ud
xd
ud
NN
ul
N是自变量的个数
cross 为两个向量的矢量积。
a× b=(aybz-azby)i+ (azbx-axbz)j+ (axby-aybx)k
Dot 为两个向量的数量级。
例,设 a=[1,2,3]; b=[2,3,8]
c=cross(a,b)=??
d=dot(a,b)=??
4.1.3 用于随机数据分析的函数
产生随机数的命令
1,rand(m,n) 产生在 0与 1之间均匀分布的 m行 n
列随机数矩阵,其均值为 0.5。
2,randn(m,n) 产生正态分布的 m行 n列随机数矩阵,其均值为 0。
练习:
x=rand(1,1000); hist(x)
figure
y=randn(1,1000);hist(y)
hist(x)的用法见书 p60
clear all
close all
tic
x=rand(1,10000);subplot(2,2,1),hist(x)
title('x,10000')
y=randn(1,10000); subplot(2,2,2),hist(y)
title('y,10000')
x=rand(1,100000); subplot(2,2,3),hist(x)
title('x,100000')
y=randn(1,100000); subplot(2,2,4),hist(y)
title('y,100000')
toc
例子
4.1.4 用于傅立叶分析的函数
1、卷积,conv(x,y),结果为 x,y的卷积。
若 x是输入信号,y是线性系统的脉冲单位冲激函数,则 x,y的卷积就是系统的输出信号。
2,filter(b,a,x) 是根据输入信号 x和线性系统的传输系数,求输出信号。 A为分母多项式的系数向量,b为分子多项式的系数向量。
3,X=fft(x,N)
求出时域信号 x的离散傅立叶变换 X。 N
为规定的点数,其默认值为 x的长度。
当 N取 2的整数幂时变换的数度最快。
通常 N取大于又最靠近 x的幂次,即
N=2^nextpow2(length(x)),若 x的长度为 12,
nextpow2(12)= 4,N= 2^4=16;
问 length(x) =13,15,17;
nextpow2(length(x))=
fft函数
格式,X=fft(x,N)
一般情况下,fft求出的函数为复数,可用 abs和
angle分别求出其幅度和相位。
clc
Clear; close all;
t=0:0.001:3;
u=sin(300*t)+2*cos(200*t);
U=fft(u);
plot(abs(U));
axis([0,300,0,3000])
figure
plot(angle(U))
4、傅立叶逆变换函数
x=ifft(X)