显示变量值:
直接打变量名,不加分号disp()函数,但disp()函数输出变量类型固定,如果同时输出数字和字符串需要用到num2str()函数,将数值型转化成字符型。 例如: x=1000; str='Hello world!'; disp([str,num2str(x)])显示结果:Hello world!1000
带格式输出:
生成带格式字符:sprintf(format, data) 直接生成带格式的字符串的输入:
%数值的格式化输出 str_a=sprintf('%.5f',pi); %字符串的格式化输出 str=sprintf('pi = %.5f',pi); %输出类型为char str1=sprintf(string('pi = %.5f'),pi); %输出类型为string team1='Manchester United'; team2='Chelsea'; str2=sprintf('%s won %s,congratulations',team1,team2);输出:
str_a = 3.14159 str = pi = 3.14159 str1 = string "pi = 3.14159" str2 = Manchester United won Chelsea,congratulations%c 单个字符 %d 有符号十进制数(%i也可以) %u 无符号十进制数 %f 浮点数(%8.4f表示对浮点数取8位宽度,同时4位小数) %o 无符号八进制数 %s 字符串 %x 小写a-f的十六进制数 %X 大小a-f的十六进制数
将带格式字符输出到文件:fprintf(fid, format, data) 其中fid表示由fopen函数打开的文件句柄,如果fid省略,则直接输出在屏幕上 例如: data = [5, 1, 2; 3, 7, 4]; [row, col] = size(data); %求出矩阵data的行数和列数 %加t表示按Windows格式输出换行,即0xOD 0x0A,没有t表示按Linux格式输出换行,即0x0A fid=fopen('test.txt', 'wt'); %打开文件 for i=1:row for j=1:col fprintf(fid, '%d ', data(i, j)); %类似于C语言的输出格式 end fprintf(fid, '\n'); end fprintf(fid, 'This is a string\n'); fprintf(fid, '%X', hex2dec('ABCD')); fclose(fid); %最后不要忘记关闭文件!创建m×n矩阵:
A = [a11 a12 a13 …… a1n;a21 a22 a23 …… a2n; …… ;am1 am2 am3 …… amn];或
A = [a11,a12,a13,……,a1n;a21,a22,a23,……,a2n; …… ;am1,am2,am3,……,amn];创建m×n元素全为1的矩阵:
A = ones(m,n);创建m×n元素全为0的矩阵:
A = zeros(m,n);创建m×n元素服从0-1均匀分布的矩阵:
A = rand(m,n);创建m×n元素服从高斯分布的矩阵:
A = randn(m,n);创建n×n的单位矩阵:
I = eye(n);创建n阶幻方:
magic(n); %每行、每列、对角线之和都相等创建等差数列向量:
v = [起始值:间隔值:终止值]; v = linspace(起始值,间隔值,取值个数);创建稀疏矩阵:
sparse(u,v,S); %其中u,v,S是3个等长的向量。S是要建立的稀疏存储矩阵的非零元素,u(i)、v(i)分别是S(i)的行和列下标 B = spconvert(A); %A为m×3或m×4的矩阵 [B,d]=spdiags(A); %从带状稀疏矩阵A中提取全部非零对角线元素构成矩阵B及其这些非零对角线的位置向量d。 A=spdiags(B,d,m,n); %产生带状稀疏矩阵的稀疏存储矩阵A,其中m、n为原带状稀疏矩阵的行数与列数,矩阵B的第i列即为原带状稀疏矩阵的第i条非零对角线,向量d为原带状稀疏矩阵所有非零对角线的位置 speye(m,n); %返回一个m*n的稀疏存储单位矩阵创建网格
[X,Y]=meshgrid(xgv,ygv); %% meshgrid函数生成的X,Y是大小相等的矩阵,xgv,ygv是两个网格矢量,xgv,ygv都是行向量。 X:通过将xgv复制length(ygv)行(严格意义上是length(ygv)-1行)得到 Y:首先对ygv进行转置得到ygv',将ygv'复制(length(xgv)-1)次得到。 %% [X,Y]=meshgrid(gv); %就相当于[X,Y]=meshgrid(gv,gv)获取矩阵维度
a = size(A); %a为1×2的向量,第一个元素是矩阵维数,第二个元素是矩阵列数 [m,n] = size(A); %m是矩阵维数,n是矩阵列数 m = size(A,1); %获取A的行数 n = size(A,2); %获取A的列数 rank(A); %获取矩阵的秩获取向量长度
l = length(v); %l为v向量的个数,v如果为矩阵则返回max{m,n}获取A矩阵中的数据
a_ij = A(i,j); %获取第i行,第j列的元素 a_i = A(i,:); %获取第i行的向量 a_j = A(:,j); %获取第j列的向量 R_25 = A(2:5,:); %获取第2到3行数据的矩阵 R_13 = A([1:3],:); %获取第1行和第3行数据的矩阵 B = A'; %获得A的转置矩阵 v = A(:); %将A的所有列按顺序组合成一个列向量写入矩阵
A(i,j) = x; %令A的第i行第j列的元素为x A(i,:) = a_i; %令A第i行的向量为a_i A = [A,a_n+1]; %新写入一列,a_n+1=[a1;a2;……;am] A = [A;a_m+1]; %新写入一行,a_m+1=[a1,a2,……,an] C = [A B]; %按行合并A、B矩阵,A、B为同维矩阵 D = [A;B]; %按列合并A、B矩阵,A、B为同列矩阵获得特征值
E = eig(A); %求矩阵A的全部特征值,构成向量E [V,D] = eig(A); %对A做相似变换后求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量 [V,D] = eig(A,'nobalance'); %直接求矩阵A的全部特征值,构成对角阵D,并求A的特征向量构成V的列向量 A = compan(p); %A是p的友矩阵/伴侣矩阵求协方差
cov(x); %求向量方差 cov(A); %求矩阵协方差 cov(x,y); %求x与y的协方差,等同于cov([x y]) corrcoef(A); %求A的相关系数矩阵 corrcoef(x,y); %求x和y的相关系数,等同于corrcoef([x y])排序
sort(x); %对向量x升序排序 [Y,I]sort(X,dim); %Y为排序后的矩阵;dim=1为按列升序排序,2为按行升序排序;I为排序后元素的位置 -sort(-A)按降序排序插值 一维数组插值
y1 = interp1(x,y,x1,'method')' %通过x,y两个等长向量计算x1处的y1的值,method为方法,包括linear,nearest,spline(三次样条插值),cubic(三次多项式插值)二维数组插值
有x,y两组一维数组 [X,Y] = meshgrid(x,y); Z = X.^2 + Y.^2 z1 = interp2(x,y,Z,x1,y1,'method');若x1与y1都为列为2的行向量,则对2个点进行插值,若x1与y1分别为2维列向量和2列行向量,则对4个点插值。曲线拟合
[P,S] = polyfit(x,y,m); %采样点x与采样点函数值y为等长函数一元函数
[x,fval] = fminunc(fun,x1,x2); %x1,x2为x范围 [x,fval] = fminunc(fun,x1,x2,options);多元函数
x = fminunc(fun,x0); %从x0点开始,尝试找到fun中描述的函数的一个局部最小x。点x0可以是标量、向量或矩阵。 x = fminunc(fun,x0,options); %通过选项中指定的优化选项最小化函数。使用 optimset或optimoptions 设置这些选项。 x = fminunc(problem); %找到问题的最小值,其中问题是 Input Arguments 中描述的结构。 [x,fval] = fminunc( ___ ); %对于任何语法,返回目标函数在解x处的值 [x,fval,exitflag,output] = fminunc( __ ); %另外返回一个描述fminunc退出条件的exitflag值,以及一个包含优化过程信息的结构输出 [x,fval,exitflag,output,grad,hessian] = fminunc( ___ ); %还要返回梯度-解x处的梯度;解决方案x的x1和x2的偏导 options = optimoptions(SolverName,Name,Value,...)优化参数选项options: 可以通过optimset函数设置或改变这些参数。其中有的参数适用于所有的优化算法,有的则只适用于大型优化问题,另外一些则只适用于中型问题。 首先描述适用于大型问题的选项。这仅仅是一个参考,因为使用大型问题算法有一些条件。对于fminunc函数来说,必须提供梯度信息。 LargeScale – 当设为’on’时使用大型算法,若设为’off’则使用中型问题的算法。 适用于大型和中型算法的参数: Diagnostics – 打印最小化函数的诊断信息。 Display – 显示水平。选择’off’,不显示输出;选择’iter’,显示每一步迭代过程的输出;选择’final’,显示最终结果。打印最小化函数的诊断信息。 GradObj – 用户定义的目标函数的梯度。对于大型问题此参数是必选的,对于中型问题则是可选项。 MaxFunEvals – 函数评价的最大次数。 MaxIter – 最大允许迭代次数。 TolFun – 函数值的终止容限。 TolX – x处的终止容限。 只用于大型算法的参数: Hessian – 用户定义的目标函数的Hessian矩阵。 HessPattern –用于有限差分的Hessian矩阵的稀疏形式。若不方便求fun函数的稀疏Hessian矩阵H,可以通过用梯度的有限差分获得的H的稀疏结构(如非零值的位置等)来得到近似的Hessian矩阵H。若连矩阵的稀疏结构都不知道,则可以将HessPattern设为密集矩阵,在每一次迭代过程中,都将进行密集矩阵的有限差分近似(这是缺省设置)。这将非常麻烦,所以花一些力气得到Hessian矩阵的稀疏结构还是值得的。 MaxPCGIter – PCG迭代的最大次数。 PrecondBandWidth – PCG前处理的上带宽,缺省时为零。对于有些问题,增加带宽可以减少迭代次数。 TolPCG – PCG迭代的终止容限。 TypicalX – 典型x值。 只用于中型算法的参数: DerivativeCheck – 对用户提供的导数和有限差分求出的导数进行对比。 DiffMaxChange – 变量有限差分梯度的最大变化。 DiffMinChange - 变量有限差分梯度的最小变化。 LineSearchType – 一维搜索算法的选择。 exitflag:描述退出条件 exitflag>0 表示目标函数收敛于解x处。 exitflag=0 表示已经达到函数评价或迭代的最大次数。 exitflag<0 表示目标函数不收敛。 output: 该参数包含下列优化信息: output.iterations – 迭代次数。 output.algorithm – 所采用的算法。 output.funcCount – 函数评价次数。 output.cgiterations – PCG迭代次数(只适用于大型规划问题)。 output.stepsize – 最终步长的大小(只用于中型问题)。 output.firstorderopt – 一阶优化的度量:解x处梯度的范数。
约束问题
[x y]=fmincon(f,x0,A,B); %A为不等式左边系数,B为不等式右边系数打开数据文件
load <文件名>或
load ('<文件名>')查询已有变量名称
who查询已有变量详细信息
whos查询变量是否存在
exist('im', 'var')清除变量
clear清除屏幕
clc清除图像
clf循环操作
for
for 条件 循环语句; end;while
while 条件 循环语句; 迭代语句; end;判断操作 if
if 条件1 语块1; elseif 条件2 语块2; …… else 语块n; end;定义函数
function [输出变量] = 函数名(输入变量) 函数体; end;保存数据
save ('文件名.mat'); %保存所有变量 save 文件名.mat; %保存所有变量 save ('文件名.mat','x' 'y' ……); %保存x,y,……变量 save 文件名.mat x,y,……; %保存x,y,……变量 save 文件名.txt s -ascii; %保存x变量为txt,使数据可读画直方图
hist(w,n) %w为某一个向量,n为每一组的包含的个数描点画图
plot(x,y,format); %x为自变量,y为因变量,format为格式 hold on; %同时画多个图 hold off; %hold on结束 xlabel('x轴标签'); ylabel('y轴标签'); legend('图例1','图例2',……) title('图表标题') axis([x1 x2 y1 y2]); %使x坐标范围为x1到x2,y坐标为y1到y2 cd '存储位置'; print -dpng '图片名.png'; %输出存储 %-dbmp:保存为bmp格式 %-dbmp:保存为bmp格式 %-djpeg:保存为jpeg格式 %-dpng:保存为png格式 %-dpcx:保存为pcx格式 %-dpdf:保存为pdf格式 %-dtiff:保存为tiff格式 imagesc(A); %将矩阵A中的元素数值按大小转化为不同颜色,并在坐标轴对应位置处以这种颜色染色 imagesc(x,y,A); %x, y分别为二维向量,在[x1,x2]*[y1,y2]范围内染色 imagesc(A),colorbar,colormap gray; %显示色柱图,并改成灰度图线型 线方式: - 实线 :点线 -. 虚点线 - - 波折线。 线型 点方式: . 圆点 +加号 * 星号 x x形 o 小圆 颜色: y黄; r红; g绿; b蓝; w白; k黑; m紫; c青.
两个函数出现在两个图里
feature(1);plot(x,y1); feature(2);plot(x,y2);将多个函数分别画在一个figure里
subplot(m,n,1); %将figure划分为m×n块,对第一块进行操作 feature(2);plot(x,y2);