matlab学习笔记

更新时间:2024-06-01 03:34:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

1]画图问题:

1对于正余玄等,其实离散的,若将t取得非常小,是连续的,如果t的间隔大,plot(t1,y1,'r.')则明显离散,plot(t1,y1,t1,y1,'r.') 则就会有一条折线将离散的

点连接起来了,

2、subplot(a,b,c),将图分为ab快; grid on 画坐标方格

title (‘加标题’)

xlabel('x'), ylabel('y')

axis([0,pi,-1,1])%控制轴的范围 axis square %使坐标轴长度相同 legend('1','2','3')%图例 text(x,y,‘’)在图片上()

3、 t=(0:pi/50:2*pi);k=0.4:0.1:1;y=cos(t)*k;plot(t,y)这是错误语句; t=(0:pi/50:2*pi)'才对,另外关于幂的问题> Y=sin(th)*sqrt(25-a^2); ??? Error using ==> mpower Matrix must be square. >> Y=sin(th)*sqrt(25-a.^2);

4、对函数加包络线,如y=sin(x)[-1,1]

5]数据拟合经典

>>x=[0 .1 .2 .3 .4 .5 .6 .7 .8 .9 1]

>>y=[-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2]; % data >>n=2; % order of fit

>>p=polyfit(x , y , n) % find polynomial coefficients p =

-9.8108 20.1293 -0.0317 >>xi=linspace(0 , 1 , 100);

>>z=polyval(p , xi); % evaluate polynomial >>plot(x , y , ‘ o ' , x , y , xi , z , ' : ')

>>xlabel(‘ x ‘) , ylabel(‘ y=f(x) ‘) , title(‘ Second Order Curve Fitting ‘) %%%%%%%%%%%%%%%%%%%曲线拟合的经典:(详见拟合PPT) > x=0:0.1:1

>> y=[-.447 1.978 3.28 6.16 7.08 7.34 7.66 9.56 9.48 9.30 11.2]; >> P=polyfit(x,y,2); >> xi=linspace(0,1,100); >> z=polyval(P,xi); >> hold on

>> plot(x,y,'r.','MarkerSize',20);

>> plot(xi,z,'b','LineWidth',2),hold off >> legend('points','line')%图例

>

经验曲线拟合:(详见拟合PPT) y=c*exp(a*x); M:wenjian

function ff=mfun(beta,x) b1=beta(1); b2=beta(2);

ff= b1*exp(b2*x);

命令窗口输入: x=[]; y=[];

C=nlinfit(x,y,@mfun,[0 0])

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

插值经典:

hours=1:12;

temps=[5 8 9 15 25 29 31 30 22 25 27 24]; h=1:0.1:12;%(将时间细化,)

t=interp1(hours,temps,h,'spline'); (每个细化后的时间通过插值得到的值,直接输出数据将是很多的)

plot(hours,temps,'+',h,t,hours,temps,'r:') %作图依次将散点图,插值后的图,及散点的折线图画出

xlabel('Hour'),ylabel('Degrees Celsius’)

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 6、k=sym('k') % k是一个符号变量;

symsum(S) 对通项S求和,其中k为变量且从0变到k-1. symsum(S,v) 对通项S求和,指定其中v为变量且v从0变到v-1. symsum(S,a,b) 对通项S求和,其中k为变量且从a变到b. symsum(S,v,a,b) 对通项S求和,指定其中v为变量且v从a变到b. 7、解微分方程:

解析解

dsolve('fangcheng1 ','fangcheng 2'…..,'chu shi tiao jian ','bian liang' ) 数值解

[自变量,函数]=ode45/ode23/ode15s(‘保存的函数名’,[自变量的范围],[函数的初始值])

高化底,

8、回归分析:

经典例制:x=0.1:0.01:0.18;x=[x,0.2,0.21,0.23]'; y=[42,41.5,45,45.5,45,47.5,49,55,50,55,55.5,60.5]'; X=[ones(12,1),x]; >> polyfit(x,y,1)

[b,bint,r,rint,stats]=regress(y,X,0.05); >> b,bint,stats,rcoplot(r,rint)

9、数组的输入:

x=linspace(a,b,n);

x=rand(1,n);//0-1之间的n的随即数 x=randperm(n);//1到n的随即整数 10、将硬盘的数据读入变量

读入txt:a=load(' shu ju lu jing ') 读入excel:a=xlsread(' shu ju lu jing ') 11、矩阵函数

eye(m,n);m*n的矩阵; magic(n);n为方阵; ones(m,n);

rand(m,n);是m*n的(0,1)分布随即数矩镇

randn(m,n);m* n矩阵,元素为正态分布的随即数珠; zeros(m,n);

meshgrid(y,x)产生x-y平面的网格点数据x,y; det 计算矩镇的行列市, eig 特征值 inv 逆 rank 秩 trace 迹

norm 摸或范数

orth 求出可将矩镇化为对角阵的正交化 poly 矩镇的特征多项式

12、点乘与矩镇运算: A.' A'

A.^n 矩镇的每个元素自乘n方 A^n矩镇自乘n方

A.^p 矩镇的每个元素自求p次方 A^p矩镇的p次幂 A.*B A*B A./B A/B B.\\A B\\A

13、(具体见统计工具)

统计工具箱有关命令:

1)数据的输入,保存,调用;data=[];save data;load data; 2)基本统计量: 均值mean(x), 中位数median(x); 标准差std(x); 方差var(x); 偏度skewness(x); 峰度kurtosis(x);

偏度:反映分布的对称性,〉0表示右偏态,此时数据位于均值得右边比位于左边的多,峰度:如果

3,常见的分布函数:

常见的几种分布的命令字符为:

正态分布:norm 指数分布:exp

帕松分布:poiss 威布尔分布:weib

?分布:beta

?2分布:chi2

t分布:t F分布:F

Matlab工具箱对每一种分布都提供五类函数,其命令字符为:

概率密度:pdf 概率分布:cdf 逆概率分布:inv 均值与方差:stat 随机数生成:rnd

(当需要一种分布的某一类函数时,将以上所列的分布命令字符与函数命令字符接起来,并输入自变量(可以是标量、数组或矩阵)和参数即可.)

4、

统计图形的作图

normplot()正态分布检验图; hist(y,x)做直方图;

chi2rnd(5,1,100)产生自由度为5的1000个卡方随即数; pie(X,explode)//X一为数组,作图时将元素求和,然后计算出每个元素的的比绿,explode:数组X 的同维数组,元素为1表示响应的突出

scatter(nd,pop,‘rs’); scatter3(X,Y,Z)立体散点图

MATLAB中灰度直方图的显示

MATLAB图象处理工具箱提供了imhist函数来计算和显示图象的直方图,imhist函数的语法格式为: imhist(I,n) imhist(X,map)

其中imhist(I,n)计算和显示灰度图象I的直方图,n为指定的灰度级数目,默认值为256。imhist(X,map)计算和显示索引色图象X的直方图,map为调色板。 例:

I = imread('rice.tif'); imshow(I)

figure, imhist(I) 5、参数估计:

1、正态总体的参数估计

设总体服从正态分布,则其点估计和区间估计可同时由以下命令获得:

[muhat,sigmahat,muci,sigmaci] = normfit(X,alpha)

此命令在显著性水平alpha下估计数据X的参数(alpha缺省时设定为0.05),返回值muhat是X的均值的点估计值,sigmahat是

标准差的点估计值, muci是均值的区间估计,sigmaci是标准差的区间估计.

(1)[muhat, muci] = expfit(X,alpha)----- 在显著性水平alpha下,求指数分布的数据X的均值的点估计及其区间估计.

(2)[lambdahat, lambdaci] = poissfit(X,alpha)----- 在显著性水平alpha下,求泊松分布的数据X 的参数的点估计及其区间估计.

(3)[phat, pci] = weibfit(X,alpha)----- 在显著性水平alpha下,求Weibull分布的数据X 的参数的点估计及其区间估计. 6、假设检验:

在总体服从正态分布的情况下,可用以下命令进行假设检验、 总体方差sigma2已知时,总体均值的检验使用 z-检验 [h,sig,ci] = ztest(x,m,sigma,alpha,tail)

检验数据 x 的关于均值的某一假设是否成立,其中sigma 为已知方差, alpha 为显著性水平,究竟检验什么假设取决于 tail 的取值: tail = 0,检验假设“x 的均值等于 m ” tail = 1,检验假设“x 的均值大于 m ” tail =-1,检验假设“x 的均值小于 m ” tail的缺省值为 0, alpha的缺省值为 0.05.

返回值 h 为一个布尔值,h=1 表示可以拒绝假设,h=0 表示不可以拒绝假设,sig 为假设成立的概率,ci 为均值的 1-alpha 置信区间. 总体方差sigma2未知时,总体均值的检验使用t-检验 两总体均值的假设检验使用 t-检验

非参数检验:总体分布的检验

7、Matlab工具箱提供了两个对总体分布进行检验的命令: 1)h = normplot(x)

此命令显示数据矩阵x的正态概率图.如果数据来自于正态分布,则图形显示出直线性形态.而其它概率分布函数显示出曲线形态.

h = weibplot(x) 14、

两自变量作图: ezsurf(f) ezsurf(f,domain) ezsurf(x,y,z)

ezsurf(x,y,z,[smin,smax,tmin,tmax]) ezsurf(。。。,n); ezsurf(。。。,‘circ’)

domain两自变量的定义域。x,y,z:参数方程 [smin,smax,tmin,tmax]自定义绘图区域, n 网格点的数,circ’作图定义于为圆

15、优化问题:(具体解释可以参考1、优化问题)

线形规划:linprog

非线性规划问题:有约束的一元函数的最小值:fminbnd

无约束多元函数最小值:fminsearch fminunc(阶数达时) 有约束的多元函数最小值:fmincon function y=objfun(x); M文件:

y=exp(x(1))*(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2)+1); %编写返回约束之的函数 function [c ceq]=confun(x) %非线性不等式约束

c=[1.5+x(1)*x(2)-x(1)-x(2):-x(1)*x(2)-10]; %线形等式约束、 ceq=[]; x0=[-1,1];

options=optimset('largescale','off');

>> [x.fval]=fmincon('objfun',x0,[],[],[],[],[],[],'confun',options) 二次规划问题quadprog “半无限”有约束的多元函数最优解fseminf 极小化极大(Minmax)问题 多目标规划问题

最小二乘最优问题: 约束线性最小二乘lsqlin()

非线性数据(曲线)拟合: 在MATLAB5.x中,使用函数curvefit解决这类问题。现在用函数 lsqcurvefit

非线性最小二乘lsqnonlin 非负线性最小二乘lsqnonneg

非线性方程(组)求解fzero

非线性方程组的解 fsolve

16

、图论工具箱的使用说明:下面是从网上搜索到的图论工具箱,但有些英文确

实不能理解,请教各位牛人

GrTheory - Graph Theory Toolbox. Functions:

一些例子 grTheoryTest - test program for all functions. grBase - find all bases of digraph;

grCoBase - find all contrabases of digraph;

寻找独立的割集grCoCycleBasis - find all independent cut-sets for a connected graph; 边着色问题 grColEdge - solve the color problem for graph edges; 点着色问题grColVer - solve the color problem for graph vertexes; 寻找所有的连通分枝grComp - find all components of graph;

连通图的独立圈grCycleBasis - find all independent cycles for a connected graph;

有向图分解为强连通分枝grDecOrd - solve the problem about decomposition(分解) of the digraph to the sections with mutually accessed vertexes (strongly connected components强连通的分枝); 最短路问题grDistances - find the distances between any vertexes of graph;

grEccentricity - find the (weighted) eccentricity(离心率) of all vertexes, radius, diameter, center vertexes and the periphery(外围) vertexes; 寻找欧拉图grIsEulerian - find the Eulerian cycle of graph;

寻找最大完全子图grMaxComSu - solve the maximal complete sugraph problem for the graph; 网络中的最大流grMaxFlows - solve the maximal flow problem for the digraph; 寻找最大匹配grMaxMatch - solve the maximal matching problem for the graph; grMaxStabSet - solve the maximal stable set(稳定集) problem for the graph; grMinAbsEdgeSet - solve the minimal absorbant set problem for the graph edges; grMinAbsVerSet - solve the minimal absorbant set problem for the graph vertexes; 寻找最小割集grMinCutSet - solve the minimal cut-set problem for the digraph; 寻找最小边覆盖grMinEdgeCover - solve the minimal edge cover problem for the graph; 寻找最小生成树grMinSpanTree - solve the minimal spanning tree problem for the graph; 寻找最小点覆盖grMinVerCover - solve the minimal vertex cover problem for the graph; grPERT - solve the project evaluation research task;

画图(有向或无向)grPlot - draw the plot of the graph (digraph);

寻找有向图的最短路问题grShortPath - solve the shortest path problem for the digraph;

寻找不对称的旅行者问题(TSP问题)grTravSale - solve the nonsymmetrical traveling salesman problem; grValidation - auxiliary function (the data validation);

还可以参考2、图论算法

17、回归分析:(详细可见回归工具)

经典例之:x=[143 145 146 147 149 150 153 154 155 156 157 158 159 160 162 164]'; >> X=[ones(16,1) x];

>> Y=[88 85 88 91 92 93 93 95 96 98 97 96 98 99 100 102]'; >> [b,bint,r,rint,stats]=regress(X,Y) ??? Error using ==> regress Y must be a vector.

>> [b,bint,r,rint,stats]=regress(Y,X)

>> rcoplot(r,rint)%%%可以看出第2个 可以删取

>> X(2,:)=[];Y(2)=[];

>> [b,bint,r,rint,stats]=regress(Y,X) 多元二项回归:有两种方法:

1)>> x1=[1000 600 1200 500 300 400 1300 1100 1300 300]; x2=[5 7 6 6 8 7 5 4 3 9];

y=[100 75 80 70 50 65 90 100 110 60]'; x=[x1' x2'];

>> rstool(x,y,'purequadratic') 2)略

非线性拟合包括函数拟合

逐步回归stepwise(x,y,inmodel,alpha)例: >> x1=[4.46 4.11 3.58 4.42 4.62]'; >> x2=[4.42 3.82 3.31 4.37 4.47]'; >> x3=[4.23 3.29 3.24 4.34 4.53]'; >> X=[x1 x2 x3];

>> y=[4.41 3.38 3.17 4.39 4.69]'; >> stepwise(X,y)

区分回归与拟合!! 18

二、网格法(半穷举法) 算法略。(类似下面的代码格式) 网格法实现代码参考:

s1=0.01;%变量x1搜索步长 s2=0.01;%变量x2搜索步长

opt_value =inf;%预置一个足够大的数 %二重嵌套循环进行“穷举” for x1=-5:s1:5, for x2=0:s2:10,

v = 100*(x2-x1^2)^2+(1-x1)^2; if v< opt_value, opt_value = v; opt_x = [x1,x2]; end????? end end

%显示结果 opt_value opt_x

计算机模拟:

追逐模拟: v=1; dt=0.05;

x=[0 0 10 10]; y=[0 10 10 0]; d=20; while (d>0.1)

x(5)=x(1);y(5)=y(1); for i=1:4

d=sqrt((x(i+1)-x(i))^2+(y(i+1)-y(i))^2); x(i)=x(i)+v*dt*(x(i+1)-x(i))/d; y(i)=y(i)+v*dt*(y(i+1)-y(i))/d; plot(x(i),y(i),'.'),hold on end end

数 值 函 数

N[expr]表达式的机器精度近似值

N[expr, n] 表达式的n位近似值,n为任意正整数 NSolve[lhs==rhs, var] 求方程数值解

NSolve[eqn, var, n] 求方程数值解,结果精度到n位 NDSolve[eqns, y, {x, xmin, xmax}]微分方程数值解 NDSolve[eqns, {y1,y2,...}, {x, xmin, xmax}] 微分方程组数值解

FindRoot[lhs==rhs, {x,x0}] 以x0为初值,寻找方程数值解 FindRoot[lhs==rhs, {x, xstart, xmin, xmax}] NSum[f, {i,imin,imax,di}] 数值求和,di为步长 NSum[f, {i,imin,imax,di}, {j,..},..] 多维函数求和 NProduct[f, {i, imin, imax, di}]函数求积 NIntegrate[f, {x, xmin, xmax}] 函数数值积分

优化函数:

FindMinimum[f, {x,x0}] 以x0为初值,寻找函数最小值 FindMinimum[f, {x, xstart, xmin, xmax}] ConstrainedMin[f,{inequ},{x,y,..}]

inequ为线性不等式组,f为x,y..之线性函数,得到最小值及此时的x,y..取值

ConstrainedMax[f, {inequ}, {x, y,..}]同上

LinearProgramming[c,m,b] 解线性组合c.x在m.x>=b&&x>=0约束下的

最小值,x,b,c为向量,m为矩阵

LatticeReduce[{v1,v2...}] 向量组vi的极小无关组

数据处理:

Fit[data,funs,vars]用指定函数组对数据进行最小二乘拟和 data可以为{{x1,y1,..f1},{x2,y2,..f2}..}多维的情况 emp: Fit[{10.22,12,3.2,9.9}, {1, x, x^2,Sin[x]}, x] Interpolation[data]对数据进行差值,

data同上,另外还可以为{{x1,{f1,df11,df12}},{x2,{f2,.}..}指定各阶导数

InterpolationOrder默认为3次,可修改

ListInterpolation[array]对离散数据插值,array可为n维 ListInterpolation[array,{{xmin,xmax},{ymin,ymax},..}] FunctionInterpolation[expr,{x,xmin,xmax}, {y,ymin,ymax},..] 以对应expr[xi,yi]的为数据进行插值 Fourier[list] 对复数数据进行付氏变换 InverseFourier[list] 对复数数据进行付氏逆变换 Min[{x1,x2...},{y1,y2,...}]得到每个表中的最小值 Max[{x1,x2...},{y1,y2,...}]得到每个表中的最大值

Select[list, crit] 将表中使得crit为True的元素选择出来 Count[list, pattern] 将表中匹配模式pattern的元素的个数 Sort[list] 将表中元素按升序排列

Sort[list,p] 将表中元素按p[e1,e2]为True的顺序比较list 的任两个元素e1,e2,实际上Sort[list]中默认p=Greater 集合论:

Union[list1,list2..] 表listi的并集并排序 Intersection[list1,list2..] 表listi的交集并排序 Complement[listall,list1,list2...]从全集listall中对listi的差集

九、虚数函数

Re[expr] 复数表达式的实部

Im[expr] 复数表达式的虚部 Abs[expr] 复数表达式的模 Arg[expr] 复数表达式的辐角 Conjugate[expr] 复数表达式的共轭

十、数的头及模式及其他操作

Integer _Integer 整数 Real _Real 实数 Complex _Complex 复数 Rational_Rational 有理数 (*注:模式用在函数参数传递中,如MyFun[Para1_Integer,Para2_Real]

规定传入参数的类型,另外也可用来判断If[Head[a]==Real,...]*) IntegerDigits[n,b,len] 数字n以b近制的前len个码元 RealDigits[x,b,len] 类上

FromDigits[list] IntegerDigits的反函数

Rationalize[x,dx] 把实数x有理化成有理数,误差小于dx Chop[expr, delta] 将expr中小于delta的部分去掉,dx默认为10^-10

Accuracy[x] 给出x小数部分位数,对于Pi,E等为无限大 Precision[x] 给出x有效数字位数,对于Pi,E等为无限大 SetAccuracy[expr, n] 设置expr显示时的小数部分位数 SetPrecision[expr, n] 设置expr显示时的有效数字位数

十一、区间函数

Interval[{min, max}] 区间[min, max](* Solve[3 x+2==Interval[{-2,5}],x]*)

IntervalMemberQ[interval, x] x在区间内吗? IntervalMemberQ[interval1,interval2] 区间2在区间1内吗? IntervalUnion[intv1,intv2...] 区间的并 IntervalIntersection[intv1,intv2...] 区间的交

十二、矩阵操作

a.b.c 或 Dot[a, b, c] 矩阵、向量、张量的点积 Inverse[m] 矩阵的逆 Transpose[list] 矩阵的转置

Transpose[list,{n1,n2..}]将矩阵list 第k行与第nk列交换 Det[m] 矩阵的行列式 Eigenvalues[m] 特征值 Eigenvectors[m] 特征向量

Eigensystem[m] 特征系统,返回{eigvalues,eigvectors} LinearSolve[m, b] 解线性方程组m.x==b

NullSpace[m] 矩阵m的零空间,即m.NullSpace[m]==零向量

RowReduce[m] m化简为阶梯矩阵

Minors[m, k] m的所有k*k阶子矩阵的行列式的值(伴随阵,好像是)

MatrixPower[mat, n] 阵mat自乘n次

Outer[f,list1,list2..] listi中各个元之间相互组合,并作为f的参数的到的矩阵

Outer[Times,list1,list2]给出矩阵的外积

SingularValues[m] m的奇异值,结果为{u,w,v}, m=Conjugate[Transpose[u]].DiagonalMatrix[w].v PseudoInverse[m] m的广义逆 QRDecomposition[m] QR分解 SchurDecomposition[m] Schur分解 LUDecomposition[m] LU分解 matlab常用到的永久变量。

ans:计算结果的默认变量名。 i j:基本虚数单位。

eps:系统的浮点(F10a9Bg个oht): inf: 无限大,例1/0

nan NaN:非数值(N航a nmnb谢) pi:圆周率n(n=3.1415926..)。 realmax:系统所能表示的最大数值。 realmin: 系统所能表示的最小数值, nargin: 函数的输入参数个数: nargout:函数的输出多数个数

①matlab的所有运算都定义在复数城上。对于方根问题运算只返回处于第一象限的解。

⑦matlab分别用左斜/和右\\来表示―左除和―右除‖运算。对于标量运算而言,这两者的作用没有区别:但对于矩阵运算来说,二者将产生不同的结果。

多项式的表示方法和运算

p(x)=x^3-3x-5 可以表示为p=[1 0 –3 5],求x=5时的值用plotval(p,5) 也可以求向量:a=[3 4 5],plotval(p,a) 函数roots求多项式的根 roots(p) p=[1 0 -3 5]; r=roots(p)

由根重组多项式poly(根) q=poly(r)

real(q) 有时会产生虚根,这时用real抽取实根即可 conv(a,b)函数多项式乘法(执行两个数组的卷积) a=[1 2 3 4]; b=[1 4 9 16]; c=conv(a,b)

多项式的加减法,低阶的多项式必须用首零填补,使其与高阶多项式有同样的阶次 多项式除法 [q , r]=deconv(c , b) 表示b/c q为商多项式,r为余数

多项式的导数 polyder(f) f=[ 2 4 5 6 2 1]; s=polyder(f)

多项式的曲线拟合 x=[1 2 3 4 5];

y=[5.6 40 150 250 498.9];

p=polyfit(x,y,n) 数据的n次多项式拟合 poly:矩阵的特征多项式、根集对应的多项式 x2=1:0.1:5; n取1时,即为最小二乘法

y2=polyval(p,x2); 计算多项式的值(polyvalm计算矩阵多项式) plot(x,y,'*',x2,y2);grid on 最小二乘法 x=[1 2 3 4 5];

y=[5.6 40 150 250 498.9]; plot(x,y,‘*‘),lsline

多项式插值(p158)

YI=interp1(x,y,XI,‘method‘) 一维插值

(XI为插值点的自变量坐标向量,可以为数组或单个数。 method为选择插值算法的方法,包括: linear(线性插值) cubic(立方插值) spline(三次样条插值) nearst(最近临插值)

例如:人口预测 year=1900:10:1900;

number=[78 91 105 ….每十年的人口数]; x=1900:1:2000;

y=interp1(year,number,x,‘spline‘); plot(year,numeber,‘*‘,x,y);grid on

一维博里叶变换插值使用函数interpft实现,计算含有周期函数值的矢量的傅里叶变换

然后使用更多的点进行傅里叶变换的逆变换,函数的使用格式如下:y=interpft(x,n) 其中x是含有周期函数值的矢量,并为等距的点,n为返同等间距点的个数。

求解一元函数的最小值

y=fminbnd('humps',0.3,1) humps为一内置函数 求解多元函数的最小值

函数fminserch用于求多元函数的最小值。它可以指定一个开始的矢量,并非指定一个区间。此函数返回一个矢量为此多元函数局部最小函数值对应的自变量

纹理成图功能

由warp函数的纹理成图功能实现平面图像在空间三维曲面上的显示。

将文件名为flowers.tif的图像分别投影到圆柱形和球星表面上 i=imread('flowers.tif'); [x,y,z]=cylinder;

subplot(1,2,1),warp(x,y,z,i); [x,y,z]=sphere(50);

subplot(1,2,2),warp(x,y,z,i); warp(x,y,z,i);

求函数的零点

求函数humps在[1,2]区间上的零点 fzero(?humps‘,[1,2]); 也可以给一个初始值 fzero(?humps‘,0.9);

对于多项式可直接由roots求其根 roots(?4*x^3+……‘); 也可以用solve c=sym('c','real'); x=sym('x','real'); s=solve(x^3-x+c)

函数定积分

q=quadl(?humps‘,0,1) 求humps函数在0 1区间上的定积分,也可以用quad语句

二重积分首先计算内积分,然后借助内积分的中间结果再求出二重积分的值,类似于积分中的分步积分法。 Result=dblquad(?integrnd‘,xin,xmax.,ymin,ymax) integrnd为被积函数的名称字符串

符号积分运算int(f) 最精确的是符号积分法 计算s=∫12[∫01xydx]dy syms x y 中间为空格,不能为逗号

s=int(int(?x^y‘,‘x‘,0,1),‘y‘,1,2) 引号可省略 vpa(s) 显示s的值 内积分限为函数的二重积分 I=∫14[∫√y2(x2+y2)dx]dy

符号法I=vpa(int(int(?x^2+y^2‘,‘x‘,sqrt(y),2),‘y‘,1,4)

微分运算(diff)

微分是描述一个函数在一点处的斜率,是函数的微观性质、因此积分对函数的形状在小范围内的改变不敏感,而微分很敏感。—个函数的小的变化,容易产生相邻点的斜率的大的改变。由干微分这个固有的困难.所以尽可能避免数值微分.特别是对实验获得的数据进行微分。在这种情况,最好用最小二乘曲线拟合这种数据,然后对所得到的多项式进行微分;或用另一种方法对点数据进行三次样条拟合,然后寻找样条微分,但是,有时微分运算是不能避免的,在MATLAB中.用函数diff汁算一个矢量或者矩阵的微分(也可以理解为差分)。

a=[1 2 3 3 3 7 8 9]; b=diff(a) 一次微分 bb=diff(a,2) 二次微分

实际上diff(a)=[a(2)-a(1),a(3)-a(2),……,a(n)-a(n-1)]

对于求矩阵的微分,即为求各列矢量的微分,从矢量的微分值可以判断矢量的单调性、是否等间距以及是否有重复的元素。 符号微分运算(diff) syms x t a f =cos(a*x)

df =diff(f) 由findsym的规则,隐式的指定对x进行微分 dfa=diff(f,'a') 指定对变量a进行微分 dfa=diff(f,'a',3) 三次微分

diff函数不仅作用在标量上,还可以在矩阵上,运算规则就是按矩阵的元素分别进行微分 syms a x

A=[cos(a*x),sin(a*x),-sin(a*x),cos(a*x)]; dA=diff(A) 微分方程dsolve

在matlab中,符号表达式中包含字母D用来表示微分运算,D2,D3分别对应第二,第三阶导数,D2y表示d2y/dt2 把t缺省了

y=dsolve(?Dy=f(y)‘) 单个方程,单个输出

[u,v]=dsolve(?Du=f(u,v)‘,‘Dv=g(u,v)‘) 2个方程,2个输出 s=dsolve(?Dx=f(x,y,z)‘,‘Dy=g(x,y,z)‘,‘Dz=k(x,y,z)‘) s.x s.y s.z 3个方程,架构数组

dsolve('Dx=-a*x') 结果:C1*exp(-a*t) 没给定初值,所以结果中含参变量 x=dsolve('Dx=-a*x','x(0)=1','s') 结果exp(-a*s) 给定了初值,独立变量设为s 计算多元函数的梯度

fx=gradient(f) f是一个矢量返回f的一维数值梯度,fx对应于x方向的微分。

[x,y]=meshgrid(-2:.2:2,-2:.2:2); z=x.*exp(-x.^2-y.^2); [px,py]=gradient(z,.2,.2); contour(z),hold on 画等值线 quiver(px,py)

matlab字符串运算 利用sym命令创建表达式

f=sym(?cos(x)+sin(x)‘)或 syms x , f=cos(x)+sin(x) diff(f) 求其导数

(也可直接用命令f=diff(?cos(x)+cos(y)‘)

当字符表达式中含有多于一个的变量时,只有—个变量是独立变量。如果不告诉matlab哪一个变量是独立变量,则可以通过findsym命令询问 利用findsym命令查询独立变量 f=sym('sin(a*x)+b')

findsym(f,1) 给出独立变量(一个变量,如果为2则给出2个变量) findsym(f) 给出所有变量

符号表达式的化简和替换

collect函数 collect(f,v)表示将f表示为关于符号变量v的多项式形式,即关于v合并同类项,v缺省,则用findsym确定的缺省变量 syms x y

f=x^2*y+y*x-x^2-2*x+1

collect(f) 得到(-1+y)*x^2+(y-2)*x+1 collect(f,y) 得到(x+x^2)*y+1-x^2-2*x expand函数 expand(f)将f展开,写成和的形式 syms x

expand((x-1)^3) 得到x^3-3*x^2+3*x-1 horner函数 horner(f)将f写成镶嵌套形式 syms x

horner(x^3-6*x^2) 得到(-6+x)*x^2

factor函数 factor(f)将f转换成低阶有理多项式的乘积 syms x

f=x^3-6*x^2+11*x-6

factor(f) 得到 (x-1)*(x-2)*(x-3) simplify(f)函数综合化简 simple(f) 函数的最简形式 syms x

f=2*sin(x^2)+cos(3*x)

simple(f) 如果不想看到中间过程,可z=simple(f) 有时使用两次simple命令可以得到最简式 如果想知道哪个简化命令得到最后结果,可以加一个参数how [z,how]=simple(f)

符号表达式的替换 subs(f,new,old) f='a*x^2+b*x+c'

subs(f,'t','x') 得到a*(t)^2+b*(t)+c subs是一个符号函数,返回一个符号变量

subexpr函数有时matlab返回的符号表达式难以理解,用subexpr函数,可以将表达式中重复出现的子式用一个符号表示,从而简化表达形式 c=sym('c','real'); x=sym('x','real'); s=solve(x^3-x+c)

a=subexpr(s) 得到sigma = -108*c+12*(-12+81*c^2)^(1/2) a =

[ 1/6*sigma^(1/3)+2/sigma^(1/3)]

[ -1/12*sigma^(1/3)-1/sigma^(1/3)+1/2*i*3^(1/2)*(1/6*sigma^(1/3)-2/sigma^(1/3))] [ -1/12*sigma^(1/3)-1/sigma^(1/3)-1/2*i*3^(1/2)*(1/6*sigma^(1/3)-2/sigma^(1/3))]

pretty函数有时也能起到同样的作用。 Pretty(f) 显示函数的习惯书写形式

线性方程组的求解

求解线性方程组,用反斜杠\\ a=hilb(3) b=[1 2 3]' a\\b

矩阵的特征值和特征向量

用eig(v,d)函数,[v,d]=eig(A); 其中d将返回特征值,v返回相应的特征向量,缺省第二个参数将只返回特征值 syms a b c real

A=[a b c; b c a; c a b]; [v,d]=eig(A);

为了观察更清楚,使用以前学过的替换函数,这里不用默认的sigma,而改用M,显式的代替繁琐的表达子式

vv=subexpr(v);

vs=subs(vv,'m','sigma') 运行结果为 vs =

[ 1, 1, 1]

[ -(c+(m)-a)/(c-b), -(c-(m)-a)/(c-b), 1] [ -(a-(m)-b)/(c-b), -(a+(m)-b)/(c-b), 1]

再用m替换d中的表达子式 dd=subexpr(d);

ds=subs(dd,‘m‘,‘sigma‘) 运行结果为ds =

[ (m), 0, 0] [ 0, -(m), 0] [ 0, 0, c+a+b]

note 求特征值也可用以下命令

f=poly(A) poly函数用来求A的特征多项式 d=solve(f) solve(f)函数用来求多项式的解

svd( )函数求矩阵的奇异值分解,将矩阵分解为两个正交矩阵和对角矩阵的乘积 a=sym(hilb(2)) [u,s,v]=svd(a)

代数方程和方程组

代数方程的求解可用solve(f)命令,如果f不含=,matlab将给表达式置零。方程的未知量在默认的情况下由findsym决定或显式指出 syms a b c x

solve(a*x^2+b*x+c) 以x为默认变量

solve(a*x^2+b*x+c,a) 指定对a为变量 求含有等号的方程的解(一定要加单引号) f=solve(?cos(x)=sin(x)‘)

x=solve('exp(x)=tan(x)') 如果不能求得符号解,就计算可变精度解。 求解方程组与单方程类似 解一个三元一次方程

v=solve('a*u^2+v^2','u-v=1','a^2-5*a+6') 结果为v =

a: [4x1 sym] u: [4x1 sym] v: [4x1 sym] 一些常用的符号运算 极限运算limit

limit(f) 求x到0的极限

limit(f,x,a)或limit(f,a) 求x到a的极限

limit(f,a,‘left‘) limit(f,a,‘right‘) 求x到a的左极限和右极限 limit(f,inf) 求x趋于无穷的极限 符号求和symsum(s)

symsum(s) 以默认的findsym决定的变量求和 symsum(s,v) 以s中指定的变量v求和

symsum(s,a,b) symsum(s,v,a,b) 从a到b的有限项求和 syms k n

symsum(k) 从0到k求和

symsum(k,0,n-1) 从0到n-1求和 symsum(1/k^2,1,inf) 无限项求和 泰勒级数taylor(f)

taylor(f)表示求f的5阶talor展开,可以增加参数指定展开的阶数(默认式5),也可以对于多元函数指定展开的变量,还可以指定在哪个点展开 syms x t taylor(exp(-x))

taylor(log(x),6,1) 在1点的6阶taylor展开 taylor(x^t,3,t) 对t的3阶taylor展开 积分变换

fourier变换和逆变换fourier(f)

fourier分析可以将信号转换为不同频率的正弦曲线。可对离散数据进行分析,也可对连续时间系统进行分析,特别在信号和图形处理领域。离散变换(DFT)作用于有限数据的采集,最有效的是快速fourier变换(FFT)

F=fourier(f) 独立变量x,返回关于参数w的函数 F=fourier(f,v) 返回函数F关于符号对象v的函数

F=fourier(f,u,v) 对关于u的函数f进行变换,而不是缺省的w,返回函数F是关于v的函数 syms t v w x fourier(1/t)

fourier(exp(-t)*sym('Heaviside(t)'),v) fourier(diff(sym('F(x)')),x,w) Fourier逆变换

f=ifourier(F) 缺省独立变量w,返回关于x的函数对w进行积分 f=ifourier(F,v) 返回函数f是关于符号对象v的函数,而不是缺省的x

f=ifourier(F,u,v) 是关于u的函数f进行变换,而不是缺省的x,返回函数f是关于v的函数 Laplace变换和逆变换laplace(f)

应用于连续系统(微分方程)中,可以用来求解微分方程的初值问题 laplace(F) 缺省独立变量t,缺省返回关于s的函数L laplace(F,t) 返回关于t的函数L,而不是缺省的s

laplace(F,w,z) 对函数F的自变量w积分,返回关于z的函数L 逆变换

F=ilaplace(L) 缺省独立变量s,返回关于t的函数F F=ilaplace(L,y) 返回关于y的函数F,而不是缺省的t

F=ilaplace(L,y,x) 对函数L的自变量y积分,返回关于x的函数F Z-变换和逆变换ztrans(f) 标量符号f的Z-变换 F=ztrans(f) 缺省独立变量n,返回关于z的函数

F=ztrans(f,w) 返回关于符号变量w的函数F,而不是缺省的z

F=ztrans(f,k,w) 关于k的符号变量作Z-变换返回关于符号变量w的函数 逆变换iztrans(F)

f=iztrans(F) 或(F,k)或 (F,w,k)

符号绘图函数

符号函数简易绘图函数ezplot(f)

f可以包含单个符号变量x的字符串或表达式,默认画图区间(-2pi,2pi),如果f包含x和y,画出的图像是f(x,y)=0的图像,缺省区间是-2pi

Ezplot(f,xmin,xmax)或ezplot(f,[xmin,xmax])绘制在xmin

ezplot('t*cos(t)','t*sin(t)',[0,4*pi])

绘制符号图像函数fplot(fun,lims,tol,‘linespec‘,n)

其中lims=[xmin,xmax]或[xmin,xmax,ymin,ymax] tol为指定相对误差,默认0.001 ?linespec‘指定绘图的线型 n指定最少以n+1个点绘图

[x,y]=fplot(fun,lims,…) 只返回用来绘图的点,并不绘图,可以自己调用plot(x,y)来绘制图形。 syms x

subplot(2,2,1),fplot('humps',[0,1]) f='abs(exp(x*(0:9))*ones(10,1))' subplot(2,2,2),fplot(f,[0,2*pi])

subplot(2,2,3),fplot('sin(1./x)',[0.01,0.1],1e-3) matlab绘图 二维图形的绘制

plot 在(x,y)坐标下绘制二维图像支持多个x-y二元结构 plot3 在(x,y,z)坐标下绘制三维图形 loglog 在(x,y)对数坐标下绘制二维图形

semilogx 在x为对数坐标,y为线性坐标的二维坐标中绘图 semilogy 在x为线性坐标,y为对数坐标的二维坐标中绘图 plotyy 在有两个y轴的坐标下绘图

plot用法

plot(x,y,'--rs','linewidth',2,'markeredgecolor','k',... 'markerfacecolor','g','markersize',10) plotyy用法

plotyy(x1,y1,x2,y2) 以x1为标准,左轴为y轴绘制y1向量,x2为基准,右轴为y轴,绘制y2向量 plotyy(x1,y1,x2,y2,fun) 用字符串fun指定的绘图函数(plot ,semilogx,semilogy,loglog,stem) plotyy((x1,y1,x2,y2,fun1,fun2) t=0:pi/20:2*pi; y=exp(sin(t));

plotyy(t,y,t,y,'plot','stem') stem为二维杆图

[ax,h1,h2]=plotyy(…) 返回左右两y轴的句柄(分别为ax(1) ax(2),以及在两坐标轴中生成的图形对象的句柄,分别为h1 h2 t=0:900; A=1000; a=0.005; b=0.005; z2=cos(b*t); z1=A*exp(-a*t);

[haxes,hline1,hline2]=plotyy(t,z1,t,z2,'semilogy','plot'); axes(haxes(1))

ylabel('semilog plot') 对数坐标 axes(haxes(2)) ylabel('linear plot') set(hline2,'linestyle','--') 其他二维图形绘图指令 bar(x,y) 二维条形图 hist(y,n) 直方图

histfit(y,n) 带拟和线的直方图,n为直方的个数 stem(x,y) 火柴杆图 comet(x,y) 彗星状轨迹图 compass(x,y) 罗盘图 errorbar(x,y,l,u) 误差限图 feather(x,y) 羽毛状图

fill(x,y,‘r‘) 二维填充函数以红色填充 pie(x) 饼图

polar(t,r) 极坐标图 r为幅值向量,t为角度向量 t=0:0.1:8*pi; r=cos(3*t/2)+1/2;

polar(t,r),xlabel('polar 指令') quiver(x,y) 磁力线图 stairs(x,y) 阶梯图 loglog(x,y) 对数图

semilogx semilogy 半对数图

matlab三维作图 plot3(x,y,z) 三维线条图 t=0:pi/50:15*pi;

plot3(sin(t),cos(t),t,'r*') 与plot相似 v=axis 返回各个轴的范围

text(0,0,0,'origin') 在某个坐标点加入文字

plot3 增加维数可以一次画多个图,使所个二维图形眼一个轴排列

三维网线图的绘制 mesh(x,y,z) 网格图

mesh(x,y,z,c) 四维作图,(x,y,z)代表空间三维,c代表颜色维 mesh(…,‘property name‘,property value,…) 设置曲面各属性的值 [x,y,z]=sphere(12);

mesh(x,y,z),hidden off 曲面设置为透明 meshc(x,y,z) 画网格图和基本的等值线图 meshz(x,y,z) 画包含零平面的网格图

waterfall(x,y,z) 与mesh一样,只是在效果上它的网格线只在x轴一个方向出现,呈瀑布状水线 两个变量的标量指令meshgrid(x)或meshgrid(x,y) (p179)

将两个一维向量生成两个二维向量,以便进行z=f(x,y)运算,算出z的所有值,z为x y的标量指令 [X,Y]=meshgrid(x) meshgrid(x,x)的简略式 [X,Y]=meshgrid(x,y)

[X,Y,Z]=meshgrid(x,y,z) 用于三维图形的绘制 [x,y]=meshgrid([-2:0.1:2]); z=x.*exp(-x.^2-y.^2); plot3(x,y,z)

surf(x,y,z,c) 着色表面图 surf(x,y,z) 隐含着c=z

surf(z)隐含着x,y的值为surf指令根据z的尺寸自动生成 surfc 画出具有基本等值线的曲面图 surfl 画出一个具有亮度的曲面图

shading flat 网线图的某整条线段或曲面图的某个贴片都着一种颜色

shading interp 某一线段或贴片上各点的颜色由线或片的顶端颜色经线性插值而得 曲面图不能设成网格图那样透明,但需要时,可以在孔洞处将数据设成nun

等高线的绘制

在二维空间绘制等高线contour

contour(x,y,z,n) 绘制n条等值线(n可省略)

contour(x,y,z,v) 在向量v所指定的高度上绘制等高线(可省) c=contour(x,y,z) 计算等值线的高度值

c=contourc(x,y,z,n) 计算n条等高线的x-y坐标数据

c=contourc(x,y,z,v) 计算向量v所指定的等高线的x-y坐标数据 clabel(c) 给c阵所表示的等高线加注高度标识 clabel(c,v) 给向量v所指定的等高线加注高度标识

clabel(c,‘manual‘) 借助鼠标给点中的等高线加注高度标识 三维空间绘制等高线contour3(x,y,z) [x,y,z]=peaks(30); contour3(x,y,z,16,'g') 二元函数的伪彩图pcolor(x,y,z)

是指令surf的二维等效指令,代表伪彩色,可与contour单色等值线结合画彩色等值线图 [x,y,z]=peaks(30); pcolor(x,y,z); 伪彩色

shading interp 颜色插值,使颜色平均渐变 hold on,contour(x,y,z,20,'k')... 画等值线 colorbar('horiz') 水平颜色标尺 c=contour(x,y,z,8); clabel(c) 标注等高线 矢量场图(速度图)quiver

用于描述函数z=f(x,y)在点(x,y)的梯度大小和方向 [X,Y]=meshgrid(x,y) X,Y为Z阵元素的坐标矩阵

[U,V]=gradient(Z,dx,dy) U,V分别为Z对x对y的导数,dx dy是x y方向上的计算步长 quiver(X,Y,U,V,s,‘linespec‘,‘filled‘) U,V为必选项,决定矢量场图中各矢量的大小和方向,s为指定所画箭头的大小,缺省时取1,linespec为字符串,指定合法的线形和彩色,filled用于填充定义的绘图标识符

[x,y]=meshgrid(-2:.2:2,-1:.15:1); z=x.*exp(-y.^2);

[px,py]=gradient(z,.2,.15); contour(x,y,z);

hold on,quiver(x,y,px,py),axis image 多边形的填色fill(x,y,c)

c定义颜色字符串,可以是‘r‘,‘b‘等,也可以用RGB三色表示[r,g,b]值为0-1 图形的四维表现

网络资源:

1. USENET新闻组

? MATLAB的新闻组是comp.soft-sys.MATLAB。浏览器指

? http://www.dejanews.com ? http://www.google.com 2. 网络上的工具箱

? http://www.mathtools.com/

? http://www.mathworks.com/matlabcentral/fileexchange/loadCategory.do

3. BBS

? 哈尔滨工业大学bbs: telnet://bbs.hit.edu.cn ? 上海交通大学bbs: telnet://bbs.sjtu.edu.cn ? 清华大学bbs mathtools 4. www服务

? http://www.mathworks.com ? http://matlab.turbo.hit.edu.cn ? Matlab 大观园: http://www.matlab-world.com

5. 首先是MATLAB窗口中的help命令,它最常用、最快,往往也是最有效的。给出关键字就能找到相应的说明。Help命令简单易用,但是它要求准确给出关键字,如果记忆不准,就很难找到。这时就应该用第二种方案。

6. Help Desk:这是MATLAB的HTML格式的帮助文档,有着很好的组织。可以在命令行键入helpdesk,进入“Matlab Help Desk”。Help Desk的搜索可以使用不完全关键字,这样即使遇

到记忆模糊的情况也可以很快查到。

7. 前面两种方法所得到的帮助信息常常是不够细致的,需要用第三种途径来补充,这就是电子版的使用手册。MATLAB里包含了大量关于MATLAB安装、使用、编程以及各种工具箱等的电子版手册,全部为PDF格式,具有搜索功能,因此也可以在指定的手册中搜索关键字,使用非常方便。

编程学习】matlab实用程序百例

实例1:三角函数曲线(1)

function shili01 h0=figure('toolbar','none',... 'position',[198 56 350 300],... 'name','实例01'); h1=axes('parent',h0,... 'visible','off'); x=-pi:0.05:pi; y=sin(x); plot(x,y); xlabel('自变量X'); ylabel('函数值Y'); title('SIN( )函数曲

线'); grid on

实例2:三角函数曲线(2)

function shili02 h0=figure('toolbar','none',... 'position',[200 150 450 350],... 'name','实例02'); x=-pi:0.05:pi; y=sin(x)+cos(x); plot(x,y,'-*r','linewidth',1);

grid on xlabel('自变量X'); ylabel('函数值Y'); title('三角函数');

实例3:图形的叠加

function shili03 h0=figure('toolbar','none',... 'position',[200 150 450 350],... 'name','实例03'); x=-pi:0.05:pi; y1=sin(x); y2=cos(x); plot(x,y1,... '-*r',... x,y2,... '--og'); grid on xlabel('自变量X'); ylabel('函数值Y');

title('三角函数');

实例5:单个轴窗口显示多个图形

function shili05 h0=figure('toolbar','none',... 'position',[200 150 450 250],...

'name','实例05'); t=0:pi/10:2*pi; [x,y]=meshgrid(t); subplot(2,2,1)

plot(sin(t),cos(t)) axis equal

subplot(2,2,2) z=sin(x)-cos(y); plot(t,z) axis([0 2*pi -2 2]) subplot(2,2,3) h=sin(x)+cos(y); plot(t,h) axis([0 2*pi -2 2]) subplot(2,2,4) g=(sin(x).^2)-(cos(y).^2); plot(t,g) axis([0 2*pi -1 1])

实例6:图形标注

function shili06 h0=figure('toolbar','none',... 'position',[200 150 450 400],...

'name','实例06'); t=0:pi/10:2*pi; h=plot(t,sin(t)); xlabel('t=0到

2\\pi','fontsize',16); ylabel('sin(t)','fontsize',16); title('\\it{从 0to2\\pi 的正弦曲线}','fontsize',16) x=get(h,'xdata'); y=get(h,'ydata'); imin=find(min(y)==y);

imax=find(max(y)==y); text(x(imin),y(imin),... ['\\leftarrow最小值

=',num2str(y(imin))],... 'fontsize',16) text(x(imax),y(imax),... ['\\leftarrow最

大值=',num2str(y(imax))],... 'fontsize',16)

实例7:条形图形

function shili07 h0=figure('toolbar','none',... 'position',[200 150 450 350],... 'name','实例07'); tiao1=[562 548 224 545 41 445 745 512]; tiao2=[47 48 57 58 54

52 65 48]; t=0:7; bar(t,tiao1) xlabel('X轴'); ylabel('TIAO1值'); h1=gca; h2=axes('position',get(h1,'position')); plot(t,tiao2,'linewidth',3) set(h2,'yaxislocation','right','color','none','xticklabel',[])

实例8:区域图形

function shili08 h0=figure('toolbar','none',... 'position',[200 150 450 250],... 'name','实例08'); x=91:95; profits1=[88 75 84 93 77]; profits2=[51 64 54 56 68];

profits3=[42 54 34 25 24]; profits4=[26 38 18 15 4];

area(x,profits1,'facecolor',[0.5 0.9 0.6],... 'edgecolor','b',... 'linewidth',3) hold on area(x,profits2,'facecolor',[0.9 0.85 0.7],... 'edgecolor','y',... 'linewidth',3) hold on area(x,profits3,'facecolor',[0.3 0.6 0.7],... 'edgecolor','r',... 'linewidth',3) hold on area(x,profits4,'facecolor',[0.6 0.5 0.9],... 'edgecolor','m',... 'linewidth',3) hold off set(gca,'xtick',[91:95])

set(gca,'layer','top') gtext('\\leftarrow第一季度销量') gtext('\\leftarrow第二季度销量') gtext('\\leftarrow第三季度销量') gtext('\\leftarrow第四季度销量')

xlabel('年','fontsize',16); ylabel('销售量','fontsize',16);

实例9:饼图的绘制

function shili09 h0=figure('toolbar','none',... 'position',[200 150 450 250],... 'name','实例09'); t=[54 21 35; 68 54 35; 45 25 12; 48 68 45; 68 54 69]; x=sum(t); h=pie(x); textobjs=findobj(h,'type','text'); str1=get(textobjs,{'string'}); val1=get(textobjs,{'extent'}); oldext=cat(1,val1{:}); names={'商品一:';'商品二:

';'商品三:'}; str2=strcat(names,str1); set(textobjs,{'string'},str2)

val2=get(textobjs,{'extent'}); newext=cat(1,val2{:}); offset=sign(oldext(:,1)).*(newext(:,3)-oldext(:,3))/2; pos=get(textobjs,{'position'}); textpos=cat(1,pos{:});

textpos(:,1)=textpos(:,1)+offset;

set(textobjs,{'position'},num2cell(textpos,[3,2]))

实例10:阶梯图

function shili10 h0=figure('toolbar','none',... 'position',[200 150 450 400],... 'name','实例10'); a=0.01; b=0.5; t=0:10; f=exp(-a*t).*sin(b*t); stairs(t,f) hold on plot(t,f,':*') hold off glabel='函数e^{-(\\alpha*t)}sin\\beta*t的阶梯图'; gtext(glabel,'fontsize',16) xlabel('t=0:10','fontsize',16) axis([0 10 -1.2 1.2])

实例11:枝干图

function shili11 h0=figure('toolbar','none',... 'position',[200 150 450 350],... 'name','实例11'); x=0:pi/20:2*pi; y1=sin(x); y2=cos(x); h1=stem(x,y1+y2); hold on

h2=plot(x,y1,'^r',x,y2,'*g'); hold off h3=[h1(1);h2];

legend(h3,'y1+y2','y1=sin(x)','y2=cos(x)') xlabel('自变量X'); ylabel('函数值Y');

title('正弦函数与余弦函数的线性组合');

实例12:罗盘图

function shili12 h0=figure('toolbar','none',... 'position',[200 150 450 250],... 'name','实例12'); winddirection=[54 24 65 84 256 12 235 62 125 324 34 254]; windpower=[2 5 5 3 6 8 12 7 6 14 10 8]; rdirection=winddirection*pi/180;

[x,y]=pol2cart(rdirection,windpower); compass(x,y); desc={'风向和风力', '北京气

象台', '10月1日0:00到', '10月1日12:00'}; gtext(desc)

实例13:轮廓图

function shili13 h0=figure('toolbar','none',... 'position',[200 150 450 250],...

'name','实例13'); [th,r]=meshgrid((0:10:360)*pi/180,0:0.05:1);

[x,y]=pol2cart(th,r); z=x+i*y; f=(z.^4-1).^(0.25); contour(x,y,abs(f),20) axis equal xlabel('实部','fontsize',16); ylabel('虚部','fontsize',16); h=polar([0

2*pi],[0 1]); delete(h) hold on contour(x,y,abs(f),20)

实例14:交互式图形

function shili14 h0=figure('toolbar','none',... 'position',[200 150 450 250],... 'name','实例14'); axis([0 10 0 10]); hold on x=[]; y=[]; n=0; disp('单击鼠标左键点取需要的点'); disp('单击鼠标右键点取最后一个点'); but=1; while but==1 [xi,yi,but]=ginput(1); plot(xi,yi,'bo') n=n+1; disp('单击鼠标左键点取下一个点'); x(n,1)=xi; y(n,1)=yi; end t=1:n; ts=1:0.1:n; xs=spline(t,x,ts); ys=spline(t,y,ts);

plot(xs,ys,'r-'); hold off

实例15:变换的傅立叶函数曲线

function shili15 h0=figure('toolbar','none',... 'position',[200 150 450 250],...

'name','实例15'); axis equal m=moviein(20,gcf);

set(gca,'nextplot','replacechildren')

h=uicontrol('style','slider','position',... [100 10 500 20],'min',1,'max',20) for j=1:20 plot(fft(eye(j+16))) set(h,'value',j) m(:,j)=getframe(gcf); end clf;

axes('position',[0 0 1 1]); movie(m,30)

实例17:填充图

function shili17 h0=figure('toolbar','none',... 'position',[200 150 450 250],... 'name','实例17'); t=(1:2:15)*pi/8; x=sin(t); y=cos(t); fill(x,y,'r') axis square

off text(0,0,'STOP',... 'color',[1 1 1],... 'fontsize',50,...

'horizontalalignment','center')

实例16:劳伦兹非线形方程的无序活动

function shili15 h0=figure('toolbar','none',... 'position',[200 150 450 250],...

'name','实例15'); axis equal m=moviein(20,gcf);

set(gca,'nextplot','replacechildren')

h=uicontrol('style','slider','position',... [100 10 500 20],'min',1,'max',20) for j=1:20 plot(fft(eye(j+16))) set(h,'value',j) m(:,j)=getframe(gcf); end clf;

axes('position',[0 0 1 1]); movie(m,30)

实例18:条形图和阶梯形图

function shili18 h0=figure('toolbar','none',... 'position',[200 150 450 250],... 'name','实例18'); subplot(2,2,1) x=-3:0.2:3; y=exp(-x.*x); bar(x,y) title('2-D

Bar Chart')

subplot(2,2,2) x=-3:0.2:3; y=exp(-x.*x); bar3(x,y,'r') title('3-D Bar Chart') subplot(2,2,3) x=-3:0.2:3; y=exp(-x.*x); stairs(x,y) title('Stair Chart') subplot(2,2,4) x=-3:0.2:3; y=exp(-x.*x); barh(x,y) title('Horizontal Bar Chart')

实例19:三维曲线图

function shili19 h0=figure('toolbar','none',... 'position',[200 150 450 400],... 'name','实例19'); subplot(2,1,1) x=linspace(0,2*pi); y1=sin(x); y2=cos(x);

y3=sin(x)+cos(x); z1=zeros(size(x)); z2=0.5*z1; z3=z1;

plot3(x,y1,z1,x,y2,z2,x,y3,z3) grid on xlabel('X轴'); ylabel('Y轴'); zlabel('Z

轴'); title('Figure1:3-D Plot')

subplot(2,1,2) x=linspace(0,2*pi); y1=sin(x); y2=cos(x); y3=sin(x)+cos(x); z1=zeros(size(x)); z2=0.5*z1; z3=z1; plot3(x,z1,y1,x,z2,y2,x,z3,y3) grid on xlabel('X轴'); ylabel('Y轴'); zlabel('Z轴'); title('Figure2:3-D Plot')

实例20:图形的隐藏属性

function shili20 h0=figure('toolbar','none',... 'position',[200 150 450 300],... 'name','实例20'); subplot(1,2,1) [x,y,z]=sphere(10); mesh(x,y,z) axis off

title('Figure1:Opaque') hidden on

subplot(1,2,2) [x,y,z]=sphere(10); mesh(x,y,z) axis off

title('Figure2:Transparent') hidden off

实例21PEAKS函数曲线

function shili21 h0=figure('toolbar','none',... 'position',[200 100 450 450],...

'name','实例21'); [x,y,z]=peaks(30); subplot(2,1,1) x=x(1,

; y=y(:,1);

i=find(y>0.8&y<1.2); j=find(x>-0.6&x<0.5); z(i,j)=nan*z(i,j); surfc(x,y,z) xlabel('X轴'); ylabel('Y轴'); zlabel('Z轴'); title('Figure1:surfc函数形成的曲

面')

subplot(2,1,2) x=x(1,; y=y(:,1); i=find(y>0.8&y<1.2); j=find(x>-0.6&x<0.5);

z(i,j)=nan*z(i,j); surfl(x,y,z) xlabel('X轴'); ylabel('Y轴'); zlabel('Z轴');

title('Figure2:surfl函数形成的曲面')

实例23:视角的调整

function shili23 h0=figure('toolbar','none',... 'position',[200 150 450 350],...

'name','实例23'); x=-5:0.5:5; [x,y]=meshgrid(x); r=sqrt(x.^2+y.^2)+eps; z=sin(r)./r; subplot(2,2,1) surf(x,y,z) xlabel('X-axis') ylabel('Y-axis')

zlabel('Z-axis') title('Figure1') view(-37.5,30)

subplot(2,2,2) surf(x,y,z) xlabel('X-axis') ylabel('Y-axis') zlabel('Z-axis')

title('Figure2') view(-37.5+90,30)

subplot(2,2,3) surf(x,y,z) xlabel('X-axis') ylabel('Y-axis') zlabel('Z-axis')

title('Figure3') view(-37.5,60)

subplot(2,2,4) surf(x,y,z) xlabel('X-axis') ylabel('Y-axis') zlabel('Z-axis')

title('Figure4') view(180,0)

实例26:柱状图

function shili26 h0=figure('toolbar','none',... 'position',[200 50 450 450],... 'name','实例26'); subplot(2,1,1) x=[5 2 1 8 7 3 9 8 6 5 5 5 4 3 2]; bar(x) xlabel('X

轴'); ylabel('Y轴'); title('第一子图');

subplot(2,1,2) y=[5 2 1 8 7 3 9 8 6 5 5 5 4 3 2]; barh(y) xlabel('X轴'); ylabel('Y

轴'); title('第二子图');

实例86:三次样条插值法

h0=figure('toolbar','none',... 'position',[200 50 350 450],... 'name','实例86'); h1=axes('parent',h0,... 'position',[0.10 0.45 0.8 0.5],... 'visible','off');

x=0:0.2:2*pi; y=sin(x); plot(x,y) b1=uicontrol('parent',h0,...

'units','points',... 'tag','b1',... 'style','pushbutton',... 'string','三次样条插值',... 'backgroundcolor',[0.75 0.75 0.75],... 'position',[20 60 70 20],... 'callback',[... 'y=0,',... 'sy=0,',... 'strn1=get(e2,''string'');,',...

'n1=str2num(strn1);,',... 'strn2=get(e3,''string'');,',...

'n2=str2num(strn2);,',... 'x=n1:0.2:n2;,',... 'i=1;,',... 'for t=n1:0.2:n2,',...

'y(i)=sin(t);,',... 'sy(i)=san(t,n1,n2);,',... 'i=i+1;,',... 'end,',...

'plot(x,y,''b*'',x,sy,''r-''),',... 'axis([0 7 -1.5 1.5]),',... 'legend(''sin(x)'',''N-Hermite插值'')']); b2=uicontrol('parent',h0,... 'units','points',... 'tag','b2',... 'style','pushbutton',... 'string','误差比较',... 'backgroundcolor',[0.75 0.75 0.75],... 'position',[170 60 70 20],... 'callback',[... 'strdn1=get(e2,''string'');,',... 'n1=str2num(strdn1);,',...

'strdn2=get(e3,''string'');,',... 'n2=str2num(strdn2);,',... 'strdn=get(e1,''string'');,',... 'dn=str2num(strdn);,',...

'dd=abs(sin(dn)-san(dn,n1,n2));,',... 'msgbox([''误差为:'',num2str(dd)],''计算结果'')']); e1=uicontrol('parent',h0,... 'units','points',... 'tag','e1',...

'style','edit',... 'fontsize',12,... 'string','1.20',...

'horizontalalignment','right',... 'backgroundcolor',[1 1 1],... 'position',[200 100 40 20]); t1=uicontrol('parent',h0,... 'units','points',... 'tag','t1',...

'style','text',... 'string','误差点:',... 'fontsize',12,... 'backgroundcolor',[0.75 0.75 0.75],... 'position',[160 100 40 20]); e2=uicontrol('parent',h0,... 'units','points',... 'tag','e2',...

'style','edit',... 'fontsize',12,... 'string','1.00',...

'horizontalalignment','right',... 'backgroundcolor',[1 1 1],... 'position',[20 85

40 20]); t2=uicontrol('parent',h0,... 'units','points',... 'tag','t2',...

'style','text',... 'string','第一节点:',... 'fontsize',12,... 'backgroundcolor',[0.75 0.75 0.75],... 'position',[15 105 50 20]); e3=uicontrol('parent',h0,... 'units','points',... 'tag','e3',...

'style','edit',... 'fontsize',12,... 'string','3.00',...

'horizontalalignment','right',... 'backgroundcolor',[1 1 1],... 'position',[100 85 40 20]); t3=uicontrol('parent',h0,... 'units','points',... 'tag','t3',...

'style','text',... 'string','第二节点:',... 'fontsize',12,... 'backgroundcolor',[0.75 0.75 0.75],... 'position',[95 105 50 20]); b3=uicontrol('parent',h0,... 'units','points',... 'tag','b3',...

'style','pushbutton',... 'string','关闭',... 'backgroundcolor',[0.75 0.75

0.75],... 'position',[100 20 60 20],... 'callback','close');

本文来源:https://www.bwwdw.com/article/3yk6.html

Top