第一篇:MATLAB程序总结
%******************************读取数据************************************* MATLAB读取数据
Xlsread(‘lujing’,’mingcheng’)%******************************输出数据************************************* MATLAB输出Excel数据
Xlswrite(‘eular.xla’,[A],’sheet 1’)%******************************三维曲面************************************* 三维曲面
x1=[0.05 0.05 0.05 0.1 0.05 0.1 0.2 0 0 0 0 0 0 0 0];x2=[0.1 0.25 0.12 0.12 0 0 0 0 0.05 0.08 0.1 0.12 0.15 0.2 0.25];y1=[153 130 146 133 160 154 140 133 165 169 171 186 175 156 152];y2=[7.22 5.57 6.66 6 6.6 8.21 5.1 4.66 7.58 8.26 8.99 8.73 7.71 7 6.49];y3=[112 100 131 88 80 72 72 80 116 83 80 80 64 68 74];scatter3(x1,x2,y2)figure [X,Y,Z]=griddata(x1,x2,y2,linspace(min(x1),max(x1))',linspace(min(x2),max(x2)),'v4');%插值 pcolor(X,Y,Z);shading interp%伪彩色图 figure,contourf(X,Y,Z)%等高线图 figure,surf(X,Y,Z);%三维曲面
%******************************各种距离************************************* pdist(X)— 样本X中各n维向量的欧氏距离 pdist(X, 'cityblock')— 各n维向量的绝对距离 pdist(X, ‘minkowski',r)— 闵可夫斯基距离 pdist(X, 'mahal')— 各n维向量的马氏距离 mean(A)— A中各列向量的均值
Var(A)— A中各列向量的方差
Std(A)— A中各列向量的标准差
Cov(A)— A中各列向量的协方差矩阵 Corrcoef(A)— A中各列向量的相关矩阵 命令:[x,fval] = fminbnd(F,a,b)%******************************泰勒公式************************************* 计算F在a,b之间取极小值时的x与y(即fval).格式:taylor(F,a)功能:F在x=a处的泰勒级数前5项 格式:taylor(F,v)功能:F对变量v的泰勒展式前5项
格式:taylor(F,v,n)功能:求F的n 阶泰勒展式,且
(n缺省时默认为 5)
%******************************一维插值************************************* x=[-2*pi:0.5*pi:2*pi];y=cos(x);xi=-2*pi:0.3*pi:2*pi;y_nearest=interp1(x,y, xi,‘nearest’)%最近邻插值 y_linear= interp1(x,y,xi)%双线性差值
y_spline= interp1(x,y,xi, ‘spline’)%三次样条插值 y_cubic= interp1(x,y,xi, ‘cubic’)%双三次插值
plot(x,y,'o',xi,y_nearest,'-',xi,y_linear, 'r* ', xi,y_spline,'k:',xi,y_cubic,'k-');legend('original data','nearest','linear','spline','cubic')%******************************曲线拟合************************************* x1=[2:16];y1=[6.42,8.2,9.58,9.5,9.7,10,9.93,9.99,10.49,10.59,10.6,10.8,10.6,10.9,10.76];b01=[0.1435,0.084];
%初始参数值
fun1=inline('x./(b(1)+b(2)*x)','b','x');% 定义函数 [b1,r1,j1]=nlinfit(x1,y1,fun1,b01);y=x1./(0.1152+0.0845*x1);%根据b1写出具体函数
plot(x1,y1,'*',x1,y,'-or');R2=1-sum((y-y1).^2)/sum((y1-mean(y1)).^2)%*****************************残差与置信区间******************************** X=[ones(30,1), x1‘,x2’,x3‘];
%输入自变量(注意1与自变量组成的矩阵)[b,bint,r,rint,s]=regress(y',X);%多元线性回归 b,bint,s rcoplot(r,rint)%残差及其置信区间作图
a=[1,3:9,11:30];X1=X(a,:);y1=y(a);%剔除异常点
[b1,bint1,r1,rint1,s1]=regress(y1',X1);b1,bint1,s1 %再次线性回归 rcoplot(r1,rint1)
%------------%
Copula理论及其在matlab中的实现程序应用实例 %------------
%******************************读取数据************************************* % 从文件hushi.xls中读取数据 hushi = xlsread('hushi.xls');% 提取矩阵hushi的第5列数据,即沪市的日收益率数据 X = hushi(:,5);% 从文件shenshi.xls中读取数据 shenshi = xlsread('shenshi.xls');% 提取矩阵shenshi的第5列数据,即深市的日收益率数据 Y = shenshi(:,5);
%****************************绘制频率直方图*********************************
% 调用ecdf函数和ecdfhist函数绘制沪、深两市日收益率的频率直方图 [fx, xc] = ecdf(X);figure;ecdfhist(fx, xc, 30);xlabel('沪市日收益率');% 为X轴加标签 ylabel('f(x)');% 为Y轴加标签 [fy, yc] = ecdf(Y);figure;ecdfhist(fy, yc, 30);xlabel('深市日收益率');% 为X轴加标签 ylabel('f(y)');% 为Y轴加标签
%****************************计算偏度和峰度********************************* % 计算X和Y的偏度 xs = skewness(X)ys = skewness(Y)
% 计算X和Y的峰度 kx = kurtosis(X)ky = kurtosis(Y)
%******************************正态性检验*********************************** % 分别调用jbtest、kstest和lillietest函数对X进行正态性检验 [h,p] = jbtest(X)% Jarque-Bera检验
[h,p] = kstest(X,[X,normcdf(X,mean(X),std(X))])% Kolmogorov-Smirnov检验 [h, p] = lillietest(X)% Lilliefors检验
% 分别调用jbtest、kstest和lillietest函数对Y进行正态性检验 [h,p] = jbtest(Y)% Jarque-Bera检验
[h,p] = kstest(Y,[Y,normcdf(Y,mean(Y),std(Y))])% Kolmogorov-Smirnov检验 [h, p] = lillietest(Y)% Lilliefors检验
%****************************求经验分布函数值******************************* % 调用ecdf函数求X和Y的经验分布函数 [fx, Xsort] = ecdf(X);[fy, Ysort] = ecdf(Y);% 调用spline函数,利用样条插值法求原始样本点处的经验分布函数值 U1 = spline(Xsort(2:end),fx(2:end),X);V1 = spline(Ysort(2:end),fy(2:end),Y);
% 调用ecdf函数求X和Y的经验分布函数 [fx, Xsort] = ecdf(X);[fy, Ysort] = ecdf(Y);% 提取fx和fy的第2个至最后一个元素,即排序后样本点处的经验分布函数值 fx = fx(2:end);fy = fy(2:end);
% 通过排序和反排序恢复原始样本点处的经验分布函数值U1和V1 [Xsort,id] = sort(X);[idsort,id] = sort(id);U1 = fx(id);[Ysort,id] = sort(Y);[idsort,id] = sort(id);V1 = fy(id);
%*******************************核分布估计********************************** % 调用ksdensity函数分别计算原始样本X和Y处的核分布估计值 U2 = ksdensity(X,X,'function','cdf');V2 = ksdensity(Y,Y,'function','cdf');
% **********************绘制经验分布函数图和核分布估计图********************** [Xsort,id] = sort(X);% 为了作图的需要,对X进行排序 figure;% 新建一个图形窗口
plot(Xsort,U1(id),'c','LineWidth',5);% 绘制沪市日收益率的经验分布函数图 hold on plot(Xsort,U2(id),'k-.','LineWidth',2);% 绘制沪市日收益率的核分布估计图 legend('经验分布函数','核分布估计', 'Location','NorthWest');% 加标注框 xlabel('沪市日收益率');% 为X轴加标签 ylabel('F(x)');% 为Y轴加标签
[Ysort,id] = sort(Y);% 为了作图的需要,对Y进行排序 figure;% 新建一个图形窗口
plot(Ysort,V1(id),'c','LineWidth',5);% 绘制深市日收益率的经验分布函数图 hold on plot(Ysort,V2(id),'k-.','LineWidth',2);% 绘制深市日收益率的核分布估计图 legend('经验分布函数','核分布估计', 'Location','NorthWest');% 加标注框 xlabel('深市日收益率');% 为X轴加标签 ylabel('F(x)');% 为Y轴加标签
%****************************绘制二元频数直方图***************************** % 调用ksdensity函数分别计算原始样本X和Y处的核分布估计值 U = ksdensity(X,X,'function','cdf');V = ksdensity(Y,Y,'function','cdf');figure;% 新建一个图形窗口
% 绘制边缘分布的二元频数直方图,hist3([U(:)V(:)],[30,30])xlabel('U(沪市)');% 为X轴加标签 ylabel('V(深市)');% 为Y轴加标签 zlabel('频数');% 为z轴加标签
%****************************绘制二元频率直方图***************************** figure;% 新建一个图形窗口
% 绘制边缘分布的二元频数直方图,hist3([U(:)V(:)],[30,30])h = get(gca, 'Children');% 获取频数直方图的句柄值 cuv = get(h, 'ZData');% 获取频数直方图的Z轴坐标
set(h,'ZData',cuv*30*30/length(X));% 对频数直方图的Z轴坐标作变换 xlabel('U(沪市)');% 为X轴加标签 ylabel('V(深市)');% 为Y轴加标签 zlabel('c(u,v)');% 为z轴加标签
%***********************求Copula中参数的估计值****************************** % 调用copulafit函数估计二元正态Copula中的线性相关参数 rho_norm = copulafit('Gaussian',[U(:), V(:)])% 调用copulafit函数估计二元t-Copula中的线性相关参数和自由度 [rho_t,nuhat,nuci] = copulafit('t',[U(:), V(:)])
%********************绘制Copula的密度函数和分布函数图************************ [Udata,Vdata] = meshgrid(linspace(0,1,31));% 为绘图需要,产生新的网格数据 % 调用copulapdf函数计算网格点上的二元正态Copula密度函数值 Cpdf_norm = copulapdf('Gaussian',[Udata(:), Vdata(:)],rho_norm);% 调用copulacdf函数计算网格点上的二元正态Copula分布函数值 Ccdf_norm = copulacdf('Gaussian',[Udata(:), Vdata(:)],rho_norm);% 调用copulapdf函数计算网格点上的二元t-Copula密度函数值 Cpdf_t = copulapdf('t',[Udata(:), Vdata(:)],rho_t,nuhat);% 调用copulacdf函数计算网格点上的二元t-Copula分布函数值 Ccdf_t = copulacdf('t',[Udata(:), Vdata(:)],rho_t,nuhat);% 绘制二元正态Copula的密度函数和分布函数图 figure;% 新建图形窗口
surf(Udata,Vdata,reshape(Cpdf_norm,size(Udata)));% 绘制二元正态Copula密度函数图 xlabel('U');% 为X轴加标签 ylabel('V');% 为Y轴加标签 zlabel('c(u,v)');% 为z轴加标签 figure;% 新建图形窗口
surf(Udata,Vdata,reshape(Ccdf_norm,size(Udata)));% 绘制二元正态Copula分布函数图 xlabel('U');% 为X轴加标签 ylabel('V');% 为Y轴加标签 zlabel('C(u,v)');% 为z轴加标签
% 绘制二元t-Copula的密度函数和分布函数图 figure;% 新建图形窗口
surf(Udata,Vdata,reshape(Cpdf_t,size(Udata)));% 绘制二元t-Copula密度函数图 xlabel('U');% 为X轴加标签 ylabel('V');% 为Y轴加标签 zlabel('c(u,v)');% 为z轴加标签 figure;% 新建图形窗口
surf(Udata,Vdata,reshape(Ccdf_t,size(Udata)));% 绘制二元t-Copula分布函数图 xlabel('U');% 为X轴加标签 ylabel('V');% 为Y轴加标签 zlabel('C(u,v)');% 为z轴加标签
%**************求Kendall秩相关系数和Spearman秩相关系数*********************** % 调用copulastat函数求二元正态Copula对应的Kendall秩相关系数 Kendall_norm = copulastat('Gaussian',rho_norm)% 调用copulastat函数求二元正态Copula对应的Spearman秩相关系数 Spearman_norm = copulastat('Gaussian',rho_norm,'type','Spearman')% 调用copulastat函数求二元t-Copula对应的Kendall秩相关系数 Kendall_t = copulastat('t',rho_t)% 调用copulastat函数求二元t-Copula对应的Spearman秩相关系数 Spearman_t = copulastat('t',rho_t,'type','Spearman')
% 直接根据沪、深两市日收益率的原始观测数据,调用corr函数求Kendall秩相关系数 Kendall = corr([X,Y],'type','Kendall')% 直接根据沪、深两市日收益率的原始观测数据,调用corr函数求Spearman秩相关系数 Spearman = corr([X,Y],'type','Spearman')
%******************************模型评价************************************* % 调用ecdf函数求X和Y的经验分布函数 [fx, Xsort] = ecdf(X);[fy, Ysort] = ecdf(Y);% 调用spline函数,利用样条插值法求原始样本点处的经验分布函数值 U = spline(Xsort(2:end),fx(2:end),X);V = spline(Ysort(2:end),fy(2:end),Y);% 定义经验Copula函数C(u,v)C = @(u,v)mean((U <= u).*(V <= v));% 为作图的需要,产生新的网格数据 [Udata,Vdata] = meshgrid(linspace(0,1,31));% 通过循环计算经验Copula函数在新产生的网格点处的函数值 for i=1:numel(Udata)
CopulaEmpirical(i)= C(Udata(i),Vdata(i));end
figure;% 新建图形窗口
% 绘制经验Copula分布函数图像
surf(Udata,Vdata,reshape(CopulaEmpirical,size(Udata)))xlabel('U');% 为X轴加标签 ylabel('V');% 为Y轴加标签
zlabel('Empirical Copula C(u,v)');% 为z轴加标签
% 通过循环计算经验Copula函数在原始样本点处的函数值 CUV = zeros(size(U(:)));for i=1:numel(U)
CUV(i)= C(U(i),V(i));end
% 计算线性相关参数为0.9264的二元正态Copula函数在原始样本点处的函数值 rho_norm = 0.9264;Cgau = copulacdf('Gaussian',[U(:), V(:)],rho_norm);% 计算线性相关参数为0.9325,自由度为4的二元t-Copula函数在原始样本点处的函数值 rho_t = 0.9325;k = 4.0089;Ct = copulacdf('t',[U(:), V(:)],rho_t,k);% 计算平方欧氏距离
dgau2 =(CUV-Cgau)'*(CUV-Cgau)dt2 =(CUV-Ct)'*(CUV-Ct)
%******************************灰色预测*************************************
A=[ 96 144 194 276 383 466 554 652 747 832 972
169 235 400 459 565 695 805 881 1011 1139
151 238 335 425 541 641 739 866 975 1087 1238
164 263 376 531 600 711 913 1038 1173 1296 1497
182 318 445 576 708 856 1000 1145 1292 1435 1667
216 361 504 642 818 979 1142 1305 1479 1644 1920] m=size(A,2);x0=mean(A,2);x1=cumsum(x0);alpha=0.4;n=length(x0);z1=alpha*x1(2:n)+(1-alpha)*x1(1:n-1);Y=x0(2:n);B=[-z1,ones(n-1,1)];ab=BY
x_A=(x0(1)-ab(2)/ab(1))*(exp(-ab(1)*n)-exp(-ab(1)*(n-1)))
图标参数************************************* y 黄-实线.点< 小于号 m 紫: 点线o 圆s 正方形 c 青-.点划线x 叉号d 菱形 r 红--虚线+ 加号h 六角星 g 绿* 星号p 五角星 b 蓝v 向下三角形 w 白^ 向上三角形 k 黑> 大于号
%******************************图形修饰*************************************
函数 含义
grid on(/off)给当前图形标记添加(取消)网络 xlable(‘string’)标记横坐标 ylabel(‘string’)标记纵坐标 title(‘string’)给图形添加标题
text(x,y,’string’)在图形的任意位置增加说明性文本信息 gtext(‘string’)利用鼠标添加说明性文本信息
axis([xmin xmax ymin ymax])设置坐标轴的最小最大值
例5.1.2 给例5.1.1 的图形中加入网络和标记。(见图5.1.3 和5.1.4)>> x=0:pi/10:2*pi;>> y1=sin(x);>> y2=cos(x);>> plot(x,y1,x,y2)>> grid on >> xlabel('independent variable X')>> ylabel('Dependent Variable Y1 & Y2')>> title('Sine and Cosine Curve')>> text(1.5,0.3,'cos(x)')>> gtext('sin(x)')>> axis([0 2*pi-0.9 0.9])
图5.1.3 使用了图形修饰的plot 函数绘制的正弦曲线
例5.2.1 绘制方程x=t y=sin(t)z=cos(t)
在t=[0,2*pi]上的空间方程。(见图5.2.1)
>> clf >> x=0:pi/10:2*pi;>> y1=sin(x);>> y2=cos(x);>> plot3(y1,y2,x,'m:p')>> grid on >> xlabel('Dependent Variable Y1')>> ylabel('Dependent Variable Y2')>> zlabel('Independent Variable X')>> title('Sine and Cosine Curve')
图5.2.1 函数plot 绘制的三维曲线图
%******************************三维图形*************************************
例5.2.3 绘制方程
sin((x^2+y^2)^(1/2))z =---------------------(x^2+y^2)^(1/2)
在x∈[-7.5,7.5];y∈[-7.5,7.5] 的图形。
>> x=-7.5:0.5:7.5;y=x;>> [X,Y]=meshgrid(x,y);>> R=sqrt(X.^2+Y.^2)+eps;>> Z=sin(R)./R;>> surf(X,Y,Z)>> xlabel('X 轴方向')>> ylabel('Y 轴方向')>> zlabel('Z 轴方向')(见图5.2.4)
图5.2.4
例5.2.4 绘制由方程形成的立体图。(见图5.2.5)z=x*exp(-(x^2+y^2))
>> clear >> x=-2:0.1:2;y=x;>> [X,Y]=meshgrid(x,y);>> Z=X.*exp(-X.^2-Y.^2);>> surf(X,Y,Z)
图5.2.5
%******************************三维多角度观察*********************************
MTALAB 允许用户设置观察点,其指令是: view(azimuth,elevation)其中方位角azimuth 是观察点和坐标原点连线在x-y平面的投影和y 轴负方向的夹角,仰
角elevation 是观察点与坐标原点的连线和x-y平面的夹角。对于这两个角度,三维图形的
默认值分别是-37.5 和30,二维图形的默认值是0 和90。
例5.2.5 从不同的角度观察高斯矩阵的曲面。
>> z=peaks(40);>> subplot(2,2,1);>> mesh(z);>> subplot(2,2,2);>> mesh(z);>> view(-37.5,-30);>> subplot(2,2,3);>> mesh(z);>> view(180,0);>> subplot(2,2,4);>> mesh(z);>> view(0,90);
图5.2.6 对应不同观察点的三维曲面图
%******************************其他图形*************************************
除了plot 绘图函数以外,在有些场合对绘制的曲线会有一些特殊要求,这就要其他函
数来实现,常用的几种函数如下(见表5.3.1)
表5.3.1 其他图形函数表 函数 含义
loglog
使用对数坐标系绘图
semilogx
横坐标为对数坐标轴,纵坐标为线性坐标轴 semilogy
横坐标为线性坐标轴,纵坐标为对数坐标轴 polar
绘制极坐标图 fill
绘制实心图 bar
绘制直方图 pie
绘制饼图 area
绘制面积图 quiver 绘制向量场图 stairs 绘制阶梯图 sterm 绘制火柴杆图
例5.3.1 >> x=0:pi/10:2*pi;>> y1=sin(x);>> subplot(2,2,1);>> plot(x,y1);>> subplot(2,2,2);>> bar(x,y1);>> subplot(2,2,3);>> fill(x,y1,'g');>> subplot(2,2,4);>> stairs(x,y1,'k');
%******************************直方图*************************************
函数bar(x)可以绘制直方图,这对统计或者数据采集非常直观实用。它共有四种形式: bar,bar3,barh 和bar3h,其中bar 和bar3 分别用来绘制二维和三维竖直方图,barh 和b ar3h 分别用来绘制二维和三维水平直方图,调用格式是:
bar(x,y)其中x 必须单调递增或递减,y 为n m× 矩阵,可视化结果为m 组,每
组n 个垂直柱,也就是把y 的行画在一起,同一列的数据用相同的颜色表示; bar(x,y,width)(或bar(y,width))指定每个直方条的宽度,如width>1,则直方条会重
叠,默认值为width=0.8;
bar(…,’grouped’)使同一组直方条紧紧靠在一起; bar(…,’stack’)把同一组数据描述在一个直方条上。
例5.3.2
>> y=[5 3 2 9;4 7 2 7;1 5 7 3];>> subplot(2,2,1),bar(y)>> x=[5 9 11];>> subplot(2,2,2),bar3(x,y)>> subplot(2,2,3),bar(x,y,'grouped')>> subplot(2,2,4),bar(rand(2,3),.75,'stack')
%******************************面积图*************************************
5.3.2 面积图
函数area 用来绘制面积图,面积图在plot 的基础上填充x 轴和曲线之间的面积,该图
用于查看某个数在该列所有数的总和中所占的比例。
例5.3.3
>> x=-3:3;>> y=[3 2 5;6 1 8;7 4 9;6 3 7;8 2 9;4 2 9;3 1 7];>> area(x,y)
%******************************饼图*************************************
5.3.3 饼图
函数pie 用来绘制饼图,它可以形象地表示出向量中各元素所占比例。其调用格式是:
pie(x)x 中的元素通过x/sum(x)进行归一化,以确定饼图中的份额; pie(x,explode)向量explode 和x 元素数相同,用来指出需要分开的饼片,explode 中
不为零的部分会被分开。
例5.3.4 设某班的某课程的考试成绩如下:90 分以上有32 人,81 至90 有58 人,71 至80 分有27 人,60 至70 分为21 人,60 分以下有16 人,画出饼图。(见图5.3.4)
>> x=[32 58 27 21 16];>> explode0=[1 0 0 0 0];>> subplot(1,2,1)>> pie(x,explode0)>> explode1=[0 0 0 0 1];>> subplot(1,2,2)>> pie(x,explode1)
5.3.4 不同坐标系中的绘图
Semilogx,semilogy,loglo,polar(theta,rho)的使用方法和plot 完全类似,不同的只是绘
制到不同的图形坐标上。函数semilogx 绘制x 轴为对数标度的图形,在半对数坐标系中绘图; 函数semilogy 绘制y 轴为对数标度的图形;函数loglog 绘制两个轴都为对数间隔的图形;
函数polar(theta,rho)绘制极坐标图形,其中theta 为相角,rho 为其对应的半径。
例5.3.5 绘制ρ=acos(3θ),a=2 的图形。(见图5.3.5)
>> theta=-pi:pi/80:pi;>> polar(theta,2*cos(3*theta))
图5.3.5 极坐标图
5.4 符号表达式绘图
MATLAB 软件提供了将表达式进行图形显示的功能。完成此功能需调用fplot 函数和
ezplot 函数。
函数fplot 用来绘制数学函数,其调用格式为: fplot(fun,lims)其中fun 就是所要绘制的函数,可以是定义函数的M 文件名,也可以是以x 为变量的可计
算字符串。例如’diric(x,10)’或’[sin(x),cos(x)]’,对于向量x 的每个元素,函数 fun(x)必须返回一个行向量。如果fun 返回[f1(x),f2(x),f3(x)],输入[x1;x2],就会返回矩阵
f1(x1)f2(x1)f3(x1)f1(x2)f2(x2)f3(x2)lims=[XMIN XMAX YMIN YMAX]限定了x,y 轴上的绘图空间。
例5.4.1 >> subplot(2,2,1),fplot('humps',[0 1])>> subplot(2,2,2),fplot('abs(exp(-j*x*(0:9))*ones(10,1))',[0 2*pi])>> subplot(2,2,3),fplot('[tan(x),sin(x),cos(x)]',2*pi*[-1 1-1 1])>> subplot(2,2,4),fplot('sin(1./x)',[0.01 0.1],1e-3)
图5.4.1 fplot 函数绘制表达式图形
ezplot 函数是简捷绘图指令之一,它无需数据准备,直接画出函数图形,基本调用格式
为ezplot(f)其中f 是字符串或代表数学函数的符号表达式,只有一个符号变量,可以是x,缺省情况下
x 轴的绘图区域为[-π, π ],但我们可以用ezplot(f,xmin,xmax)或ezplot(f,[xmin,xmax])来指定x 的范围。
例5.4.2
>> y='x^2';>> subplot(1,2,1)>> ezplot(y)>> subplot(1,2,2)>> y='sin(x)';>> ezplot(y,[-pi,pi])
图5.4.2 ezplot 函数绘制表达式图形
5.5 plot 函数
MATLAB 对数据是按列存储和计算的,运用plot(x)时,当x 为一个向量时,以其元
素为纵坐标,其序号为横坐标值绘制曲线。当x 为实矩阵时,则以其序号为横坐标,按列
绘制每列元素相对于序号的曲线,当x 为n m× 矩阵时,就有n 条曲线。
如果x,y 是同维向量,plot(x,y)指令以x 元素为横坐标值,y 元素为纵坐标值绘制曲线。
如x 是向量,y 是有一维与x 元素数量相等的矩阵,则以x 为共同横坐标,按列绘制y 每
列元素值,曲线数为y 的另一维的元素数。如果x,y 是同维矩阵,则以x,y 对应列元素为、纵坐标分别绘制曲线,数目等于矩阵的列数。
例5.5.1
>> x=[3 5 10 8];>> subplot(2,2,1)>> plot(x)>> x=[3 5 10 8;7 2 9 4;2 7 2 7]';>> subplot(2,2,2)>> plot(x)>> x=[3 5 6 8];>> y=[1 5 10 4];>> subplot(2,2,3)>> plot(x,y)>> x=[1 3 5 7;2 4 6 8]';>> y=[6 2 5 10;3 5 2 6]';>> subplot(2,2,4)>> plot(x,y,'k:*')
第二篇:单纯形法matlab程序
算法实现与分析
算法1.单纯形法 具体算例:
minz=−3x1+x2+2x3 3x1+2x2−3x3=6 x1−2x2+x3+x5=4
x1,x2,x3≥0标准化后:
min z=−3x1+x2+2x3+Mx4+Mx5
3x1+2x2−3x3+x4=6 x1−2x2+x3+x5=4
x1,x2,x3,x4,x5≥0用单纯形法求解,程序如下: clear clc
M=1000000;
A=[3,2,-3,1,0;1,-2,1,0,1];%系数矩阵 C=[-3,1,2,M,M,0];%价值矩阵 B=[6;4];Xt=[4 5];
for i=1:length(C)-1 D=0;
for j=1:length(Xt)
D=D+A(j,i)*C(Xt(j));
end
xi(i)=C(i)-D;end s=[];
for i=1:length(xi)
if xi(i)<0 s=[s,i];
end end
f=length(s);h=1;
while(f)
for k=1:length(s)j=1;A x=[];
for i=1:length(Xt)
if A(i,s(k))>0 x(j)=i;j=j+1;
end end x
if(length(x)+1==1)break;end y=1 x
for i=1:length(x)
if B(x(i))/A(x(i),s(k))
end end y=x(y);end
y1=Xt(y);%»»³ö±äÁ¿ s k
aa=A(y,s(k))%s(k)Ϊ»»Èë±äÁ¿ A(y,:)=A(y,:)./aa;B(y,:)=B(y,:)./aa;z=[];
for i=1:length(Xt)z=[z,i];end
z z(y)=[];z Xt
for i=1:length(z);yz=-A(z(i),s(k))
A(z(i),:)=A(z(i),:)+A(y,:).*yz B(z(i))B(y)yz
B(z(i))=B(z(i))+B(y).*yz end
for i=1:length(Xt)
if Xt(i)==y1 Xt(i)=s(k);break
end end Xt
disp('ת»»ºó')A=A B=B AB=[A,B];
for i=1:length(C)D=0;
for j=1:length(Xt)D=D+AB(j,i)*C(Xt(j));
end
xi(i)=C(i)-D;
end xi s=[];
for i=1:length(xi)-1
if xi(i)<0 s=[s,i];
end
end s
vpa([A,B;C]);f=length(s);h=h+1;
if h==5
break
end end
-xi(length(xi))
第三篇:改进单纯形法matlab程序
clear clc
X=[1 2 3 4 5];A=[ 1 2 1 0 0;4 0 0 1 0;0 4 0 0 1];C=[2 3 0 0 0 ];b=[8;16;12];t=[3 4 5];B0=A(:,t);while 1
CB0=C(:,t);XN01=X;
for i=1:length(t);
for j=1:length(X);
if XN01(j)==t(i)
XN01(j)=0;
end
end
end j=1;
for i=1:length(X);
if XN01(i)~=0
XN0(j)=XN01(i);
j=j+1;
end
end
for j=1:length(XN0);
CN0(j)=C(XN0(j));
end N0=[];
for i=1:length(XN0);
N0=[N0,A(:,XN0(i))];
end
xiN0=CN0-CB0*B0*N0;j=1;z=[];
for i=1:length(xiN0)
if xiN0(i)>0
z(j)=i;
j=j+1;
end
end
if length(z)+1==1;
break;
end n=1;
for i=1:length(z)
if z(i)>z(n)
n=i;
end
end
k=XN0(z(n));%换入变量 B=B0*b;
P=B0*A(:,k);j=1;
for i=1:length(P)
if P(i)>0
x(j)=i;
j=j+1;
end
end y=1;
for i=1:length(x)
if B(x(y))/P(x(y))>B(x(i))/P(x(i))
y=i;
end
end
y1=x(y);
y=t(y1);%换出变量
for i=1:length(t)
if t(i)==y
m=i;
break;
end
end
t(m)=k;
P2=B0*A(:,k);q=P2(y1);P2(y1)=-1;P2=-P2./q;
E=[1 0 0;0 1 0;0 0 1];E(:,m)=P2;B0=E*B0;end
CB0*B0*b
第四篇:matlab总结
班级: 学号: 姓名:
Matlab学习综述
MATLAB是一种科学计算软件,专门以矩阵的形式处理数据。MATLAB将高性能的数值计算和强大的数据可视化功能集成在一起,并提供了大量的内置函数,从而被广泛地应用于科学计算、控制系统、信息处理等领域的分析、仿真和设计工作,而且利用MATLAB产品的开放式结构,可以非常容易地对MATLAB的功能进行扩充。
MATLAB产品由若干个模块组成,不同的模块完成不同的功能,其中主要的核心模块有MATLAB、MATLAB Toolboxex、MATLAB Compiler Simulink、Simulink Blocksets、Real-time Workshop(RTW)Stateflow。这些产品大体上可以分为以MATLAB为基础的产品和以Simulink为基础的产品两大分支。其中,MATLAB是MATLAB产品家族的基础,任何其他MATLAB产品产品都以这个模块为基础。MATLAB的桌面应用程序开发工具是以MATLAB Compiler为核心的一组编译工具。Simulink是基于MATLAB的框图设计环境,可以用来对各种动态系统进行建模,分析和仿真,它的建模范围广泛,可以针对任何能够用数字来描述的系统进行建模。
一种完整的计算机应用语言应该提供对数据的描述和对数据的操作。在M语言中,最常用的数据类型表现手段和形式就是变量和常量,由于MATLAB软件自身的特点,它是一种以数值计算为基础的软件,因此M语言的基本处理单位是数值矩阵或者数值向量,在M语言中统一将矩阵或者向量称之为数组,因此掌握一些基本的矩阵、向量和数组操作的基本知识就成为了掌握MATLAB软件的基础。变量和常量是编程语言中类型的表现手段和形式,掌握变量和常量的概念也是掌握M语言编程的基础。所谓变量,就是指在程序运行中需要改变数值的量,每一个变量都具有一个名字,变量将在内存中占据一定的空间,以在程序运行的过程中保存其数值,对变量的命名有相应的要求:变量必须以字母开头,后面可以是字母、数字或者下划线之间的组合。所谓常量就是在程序运行的过程中不需要改变数值的量。
MATLAB专门以矩阵作为基本的运算单位,首先要掌握向量、矩阵、索引和多维数组的概念,以及在MATLAB环境下创建向量、矩阵和多维数组的方法,以及操作矩阵和多维数值的函数的使用方法。
目前的MATLAB版本中不仅有多达十几种的基本数据类型。在不同的专业工具箱中还有特殊的数据类型,并且MATLAB还支持面向对象的编程技术,支持用户自定义的数据类型。获取MATLAB的数据类型可以在MATLAB命令行窗体中键入help datatypes。MATLAB的数据类型包括基本的数值类型,逻辑类型数据、元胞数值、结构和字符串等,需要指出一点,MATLAB的基本数据是双精度数据类型和字符类型。MATLAB提供了完整的编写应用程序的功能,这种能力被称为M语言的高级语言来实现。这种语言是一种解释性语言,利用该语言编写的代码仅能被MATLAB接受,被MATLAB解释执行。其实,一个M语言文件就是由若干MATLAB的命令组合在一起构成的,和C语言类似。M语言文件都是标准的纯文本格式的文件,其文件的扩展名为.m。MATLAB的函数主要有两类,一类被称为内建函数,这类函数是由MATLAB的内核提供的,能够完成基本的运算,例如三角函数、矩阵运算函数等。另外一类函数就是利用高级语言开发的函数文件,这里的函数文件包括用C/FORTRAN语言开发的MEX函数文件,也包括了M函数文件。
M语言文件可以分为两类,其中一类是脚本文件,另一类是函数文件,脚本文件是最简单的一种M语言文件。所谓脚本文件就是由一系列的M语言文件指令和命令组成的纯文本格式的M文件,执行脚本文件时,文件中的指令或者命令按照出现在脚本文件中的顺序依次执行。脚本文件没有输入参数,也没有输出参数,脚本文件处理的数据或者变量必须在MATLAB的公共工作空间中,脚本文件主要是由注视行和代码行组成。
函数文件是M文件最重要的组成部分,M语言函数文件能够接受用户的输入参数,并进行计算,然后将计算结果作为函数的返回值返回给调用者,M函数文件和脚本文件不同,函数文件不仅有自己特殊的文件格式,而且不同的函数还分别具有自己的工作空间,函数文件的输/输出参数不同,这些输入/输出参数在定义的时候不需要指出变量的类型,因为MATLAB默认这些参数都使用双精度类型,这样可以简化程序的编写。M语言的函数文件不仅可以有一个输入参数和一个返回值,还可以为M语言函数文件定义多个输入参数和多个输出参数,同一个M函数文件中可以包含多个函数。如果在同一个M函数文件中包含了多个函数,那么将出现在文件中的第一个M函数称为主函数,其余的函数称为子函数。
经过这么一段时间的学习,对MATLAB有了初步的认识。但是关于它还有很多知识我们所不知道,还有待进一步的学习。以上内容是我对这学期所学课程的总结,可能有些地方总结的不够到位,因为有些地方学习的不够深入,所以,以后要更加努力,在MATLAB的学习上多花一些时间,为以后的学习和工作打下基础。
第五篇:MATLAB总结
目录
一、Matlab相关说明.....................................................................2
二、Matlab操作注意事项..............................................................2
三、Matlab常用代码(图像处理相关)......................................5
四、Matlab常用快捷键.................................................................7
五、Matlab学习心得.....................................................................8
一、Matlab相关说明
Matlab是“Matrix Laboratory”的缩写,意为“矩阵实验室”。MATLAB和Mathematica、Maple并称为三大数学软件。它在数学类科技应用软件中在数值计算方面首屈一指。MATLAB可以进行矩阵运算、绘制函数和数据、实现算法、创建用户界面、连接其他编程语言的程序等,主要应用于工程计算、控制设计、信号处理与通讯、图像处理、信号检测、金融建模设计与分析等领域。
MATLAB的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用MATLAB来解算问题要比用C,FORTRAN等语言完成相同的事情简捷得多,并且MATLAB也吸收了像Maple等软件的优点,使MATLAB成为一个强大的数学软件。在新的版本中也加入了对C,FORTRAN,C++,JAVA的支持。
我所使用的Matlab版本是2012a,下文所涉及到图片、专业术语等都是以此版本为基础。
二、Matlab操作注意事项
1.打开并运行一个现存的m文件且这个m文件运行时需用到同一级文件夹中的其他文件,会出现如下提示框:
选择变更文件夹,将当前文件夹变更为这个m文件所在的文件夹。
2.不小心点错或关闭了各种小窗口,将Matlab恢复成默认布局
点击桌面—桌面布局—默认
3.查看某个函数的用法
在命令窗口输入该变量的名称,回车即可。
4.查找某个函数的用法
在命令窗口输入help+函数的名称,回车后会自动显示该函数的相关信息。
5.运行文件后报错 如下图所示,命令窗口中报错的第一段是错误的原因,后面几段会显示发生错误的文件夹以及在该文件夹中的位置。
点击文件的名称,会跳转出一个提示框,上面显示了该文件的具体实现功能,如下图所示。点击文件名后面的行标号,可以直接跳转到发生错误的那一行。
6.如何编辑界面?
修改如图所示的fig文件
1.新建一个GUI文件
2.选择打开现存的GUI文件,点击Open,就可以对当前界面进行编辑了。
7.如何将MAtlab中默认的current folder修改为自己想要的路径,每次启动后都默认是自己 设定的这个路径?
>>右键matlab 快捷方式,属性-快捷方式-起始位置 填入你自己的工作目录。8.把图复制到WORD文件的方法:电机EDIT—>Copy Figure—>Ctrl+V 9.输入时,标点必须是英文状态下的
10.大多数情况下,matlab对空格不予处理
11.小括号代表运算级别,中括号用于生成矩阵,大括号用于构成单元数组
12.分号;的作用:不显示运算结果,但对图形窗口不起作用。分号也用于区分行,13.逗号,的作用:函数参数分隔符,也用于区分行,显示运算结果,当然不加标点也显示运算结果
14.冒号:多用于数组
15.续行号...不能放在等号后面使用,不能放在变量名中间使用,起作用时默认显蓝色 16.双引号'string'是字符串的标识符 17.感叹号!用于调用操作系统运算
18.百分号%是注释号,百分号后面直到行末的语句matlab跳过执行.另外还有一个块注释,即对多行一次注释,会使用到,格式为(注意%{ 和%}都要单独成行)%{ %} 19.矩阵中用圆括号表示下标,单元数组用大括号表示下标
20.对变量名的基本要求:区分大小写,不超过63个字符,以字母开头,只能是字母,数字和下划线
三、Matlab常用代码(图像处理相关)
1.创建一个文件夹 mkdir('D:myData');2.将图片保存到指定的文件夹
image_source=strcat('result',num2str(loop),'.jpg');imwrite(F.cdata,image_source);3.将电影转成图片序列
fnum=size(mov,2);%读取电影的祯数 for i=1:fnum strtemp=strcat('C:UsersAdministratorDesktopparticalfiltermyself粒子滤波',int2str(i),'.jpg');%将每祯转成jpg的图片 imwrite(mov(i).cdata,strtemp,'jpg');end
4、模拟噪声生成函数和预定义滤波器
① imnoise:用于对图像生成模拟噪声,如:
i=imread('104_8.tif');j=imnoise(i,'gaussian',0,0.02);%模拟高斯噪声 ② fspecial:用于产生预定义滤波器,如: h=fspecial('sobel');%sobel水平边缘增强滤波器 h=fspecial('gaussian');%高斯低通滤波器 h=fspecial('laplacian');%拉普拉斯滤波器
h=fspecial('log');%高斯拉普拉斯(LoG)滤波器 h=fspecial('average');%均值滤波器
5、图像文件I/O函数命令
imfinfo 返回图形图像文件信息
语法:info=imfinfo(filename,fmt)info=imfinfo(filename)imread 从图像文件中读取(载入)图像
语法:A=imread(filename,fmt)[X,map]=imread(filename,fmt)[...]=imread(filename)[...]=imread(URL,...)[...]=imread(...,idx)(CUR,ICO,and TIFF only)[...]=imread(...,'frames',idx)(GIF only)[...]=imread(...,ref)(HDF only)[...]=imread(...,'BackgroundColor',BG)(PNG only)[A,map,alpha] =imread(...)(ICO,CUR,PNG only)imwrite 把图像写入(保存)图像文件中
语法:imwrite(A,filename,fmt)imwrite(X,map,filename,fmt)imwrite(...,filename)imwite(...,Param1,Val1,Param2,Val2...)imcrop 剪切图像
语法:I2=imcrop(I)X2=imcrop(X,map)RGB2=imcrop(RGB)I2=imcrop(I,rect)X2=imcrop(RGB,rect)[...]=imcrop(x,y,...)[A,rect]=imcrop(...)[x,y,A,rect]=imcrop(...)
6.impixel 确定像素颜色值
语法:P=impixel(I)P=impixel(X,map)P=impixel(RGB)P=impixel(I,c,r)P=impixel(X,map,c,r)P=impixel(RGB,c,r)[c,r,P]=impixel(...)P=impixel(x,y,I,xi,yi)P=impixel(x,y,RGB,xi,yi)P=impixel(x,y,X,map,xi,yi)[xi,yi,P]=impixel(x,y,...)
7.二进制图像操作函数
applylut 在二进制图像中利用lookup表进行行边沿操作 语法:A=applylut(BW,LUT)bwarea 计算二进制图像对象的面积 语法:total=bwarea(BW)bweuler 计算二进制图像的欧拉数 语法:eul=bweuler(BW)
8.颜色空间转换函数
hsv2rgb 转换HSV值为RGB颜色空间:M=hsv2rgb(H)ntsc2rgb 转换NTSC值为RGB颜色空间:rgbmap=ntsc2rgb(yiqmap)RGB=ntsc2rgb(YIQ)rgb2hsv 转换RGB值为HSV颜色空间:cmap=rgb2hsv(M)rgb2ntsc 转换RGB值为NTSC颜色空间:yiqmap=rgb2ntsc(rgbmap)YIQ=rgb2ntsc(RGB)rgb2ycbcr 转换RGB值为YCbCr颜色空间:ycbcrmap=rgb2ycbcr(rgbmap)YCBCR=rgb2ycbcr(RGB)ycbcr2rgb 转化YCbCr值为RGB颜色空间:rgbmap=ycbcr2rgb(ycbcrmap)RGB=ycbcr2rgb(YCBCR)
9.类型转换函数
im2bw 转换图像为二进制图像
语法:BW=im2bw(I,level)BW=im2bw(X,map,level)BW=im2bw(RGB,level)im2double 转换图像矩阵为双精度型
语法:I2=im2double(I1)RGB2=im2double(RGB1)I=im2double(BW)X2=im2double(X1,'indexed')double 转换数据为双精度型 语法:double(X)unit8、unit16转换数据为8位、16位无符号整型: i=unit8(x)i=unit16(x)im2unit8 转换图像阵列为8位无符号整型
语法:I2=im2unit8(I1)RGB2=im2unit8(RGB1)I=im2unit8(BW)X2=im2unit8(X1,'indexed')im2unit16 转换图像阵列为16位无符号整型
语法:I2=im2unit16(I1)RGB2=im2unit16(RGB1)I=im2unit16(BW)X2=im2unit16(X1,'indexed')
四、Matlab常用快捷键
1.在命令窗口(Command Window)中:
1)【上、下键】――切换到之前、之后的命令,可以重复按多次来达到你想要的命令
2)clc――清除命令窗口显示的语句,此命令并不清空当前工作区的变量,仅仅是把屏幕上显示出来的语句清除掉
3)clear――这个才是清空当前工作区的变量命令,常用语句clear all来完成 4)【Tab】键――在command窗口,输入一个命令的前几个字符,然后按tab键,会弹出前面含这几个字符的所有命令,找到你要的命令,回车,就可以自动完成。目前讨论结果是:matlab6.5版本中,如果候选命令超过100个,则不显示。而在matlab7以后版本中,则没有这个限制,均可正常提示 5)【Ctrl+C】(或【Ctrl+Break】)――在matlab程序运行过程中,可能由于程序编写的失误,导致程序不停的运行,在命令窗口输入“Ctrl+C”可以将运行的程序停下来,而不需要将整个Matlab程序关掉。不过进行此操作的前提是能够激活切换到命令窗口才行。6)edit+函数名 查看或编辑源文件 7)who 显示当前变量名列表 8)whos 显示变量详细列表
9)which+函数名 证实该函数是否在当前路径 10)what 列出当前路径的所有matlab文件 11)load 加载外部文件 12)save 保存文件到外部 13)20.matlab的帮助函数: 14)help 15)help+函数名或help+函数类名 精确查询 16)helpwin 打开帮助窗口 17)helpwin+函数名 精确查询 18)helpdesk 打开帮助窗口 19)doc 打开帮助窗口
20)doc+函数名 打开帮助窗口,精确查询
21)lookfor+关键字 这个是matlab中的谷歌,模糊查询
2.在编辑器(Editor)中: 1)【Tab】(或【Ctrl+]】)――增加缩进(对多行有效)2)3)4)5)6)【Ctrl+[】--减少缩进(对多行有效)
【Ctrl+I】--自动缩进(即自动排版,对多行有效)【Ctrl+R】――注释(对多行有效)【Ctrl+T】――去掉注释(对多行有效)
【Ctrl+B】――括号配对检查(对版本6.5有效,但版本7.0无效,不知道是取消了还是换了另外的快捷键,请大牛们指点,其他版本没有测试过)7)【F12】――设置或取消断点 8)【F5】――运行程序
五、Matlab学习心得
接触Matlab一个多月,从刚开始连最基本的操作都不会,到现在能够熟练地运用Matlab解决问题。虽然现在学到的也只是皮毛而已,离精通还相差甚远,但至少为以后研究生期间的学习打下了良好的基础。下面我就简单的谈一下这一个月来的学习感想。
首先,想要学好Matlab必须有一定数学基础。Matlab软件是与高等数学,计算机科学相结合的软件。所以,当你学习Matlab时,你也得会一定的数学。你要尽量多的熟悉matlab自带的函数,及其作用,因为matlab的自带函数特别多,基本上能够满足一般的数据和矩阵的计算,所以基本上不用你自己编函数。这一点对你的程序非常有帮助,可以使你的程序简单,运行效率高,可以节省很多时间。
其次,要注重基础知识于实际操作结合。你把基本的知识看过之后,就需要找一个实际的程序来动手编一下,不要等所有的知识都学好之后再去编程,你要在编程的过程中学习,程序需要什么知识再去补充。在遇到问题时,不要光看别人如果解决,也不要光想怎么解决,自己坐下来,动手自己解决一下,那你就会把不是你的知识变成自己的知识。
最后,也是最重要的一点就是坚持。MATLAB涉及的领域太多,每个领域里面都缺乏足够的专家分布在你周围。那么我们很难有机会接触到真正的高手,对我们的技术细节一一指点。在遇到实际问题时,就只能靠自己去摸索。常常是再坚持一两个小时,就能够解决你的问题。最大的成就感,就在付出了极大的心血和耐心,才取得一个艰难的小胜利。