用于定义函数,特点是可以以类似与句柄的调用方法进行调用
>> f=inline('a*x+b','a','b','x');
>> f(1,2,3)
ans =
5
用于绘图,特点是可以用字符串表示函数,并且只需要指定自变量变化范围,相比plot方便了一点点吧(plot实际上是连接给入的各个离散的点),而fplot专用于函数绘图
fplot('x.^3-x.^2+x-1',[-5 5])
fminbnd()中,f表示函数,min表示最小值,bnd表示bound(约束)
用于求解单变量函数在给定区间,[x1,x2]上的极小值,如果想求极大值,给目标函数加个负号即可
>> [x,val,exitflag,output]=fminbnd(@(x)x.^2-2*x+1,0,2)
x =
1.0000
val =
0
exitflag =
1
output =
包含以下字段的 struct:
iterations: 5
funcCount: 6
algorithm: 'golden section search, parabolic interpolation'
message: '优化已终止:↵ 当前的 x 满足使用 1.000000e-04 的 OPTIONS.TolX 的终止条件↵'
实际上这个函数在优化工具箱中有
unifrnd(20,30,1000,1)意思是:
产生一个1000*1 的array,这个array中的每个元素为20 到30之间连续均匀分布的随机数
e.g.:
a = unifrnd(20,30,5,1)产生(一种可能,因为是随机数)如下结果:
a =
29.5013
22.3114
26.0684
24.8598
28.9130
直接在命令行输入clock可以得到返回值(当前时间)
我们知道,傅里叶变换是一个函数,它将一个函数由时域转为频域
在matlab中为了进行傅里叶变换,调用格式是给fft一组函数值
如y=fft(x); (x是一组傅里叶变换之前的值构成的向量),这样就得到的变换后的因变量
那么变换后的自变量如何确定?我们知道,变换后的自变量量纲是赫兹,具体的变换方式是
f = (0:n-1)*(fs/n);
其中f是抽样频率,n是自变量长度。
如果不经过自变量的变换,直接绘图plot(abs(y));这样画的大致图像是对的,但是自变量的变化不对。
当然,如果要对图像进行傅里叶变换,那就不会设计到失序的问题,上来直接干,不许要考虑自变量的变化
如对
fs = 100; % sampling frequency
t = 0:(1/fs):(10-1/fs); % time vector
S = cos(2*pi*15*t);
n = length(S);
X = fft(S);
f = (0:n-1)*(fs/n); %frequency range
power = abs(X).^2/n; %power
plot(f,power)
我们希望变换后的函数,频率分量应集中在15Hz附近,但是实际结果不是,还有一个对称的分量在85hz附近
更改的方法是
Y = fftshift(X);
fshift = (-n/2:n/2-1)*(fs/n); % zero-centered frequency range
powershift = abs(Y).^2/n; % zero-centered power
plot(fshift,powershift)
这样才得到了一般认识的对称的傅里叶变换图像
而fftshift是怎样运行的?
>> help eig
eig - 特征值和特征向量
此 MATLAB 函数 返回一个列向量,其中包含方阵 A 的特征值。
e = eig(A)
[V,D] = eig(A)
[V,D,W] = eig(A)
e = eig(A,B)
[V,D] = eig(A,B)
[V,D,W] = eig(A,B)
[___] = eig(A,balanceOption)
[___] = eig(A,B,algorithm)
[___] = eig(___,eigvalOption)
另请参阅 balance, condeig, eigs, hess, qz, schur
eig 的参考页
名为 eig 的其他函数
>> test=[1 2;3 4];
>> [V,D]=eig(test)
V =
-0.8246 -0.4160
0.5658 -0.9094
D =
-0.3723 0
0 5.3723
>> diag(test)
ans =
1
4
另外注意到这里的diag()函数,它的作用是抽出矩阵中的对角线元素