学习matlab的吐血经验.docx

上传人:飞****2 文档编号:54365890 上传时间:2022-10-28 格式:DOCX 页数:7 大小:13.51KB
返回 下载 相关 举报
学习matlab的吐血经验.docx_第1页
第1页 / 共7页
学习matlab的吐血经验.docx_第2页
第2页 / 共7页
点击查看更多>>
资源描述

《学习matlab的吐血经验.docx》由会员分享,可在线阅读,更多相关《学习matlab的吐血经验.docx(7页珍藏版)》请在得力文库 - 分享文档赚钱的网站上搜索。

1、经验之一:Matlab函数句柄、feval函数和inline函数的使用MATLAB函数句柄函数句柄(Function handle)是MATLAB的一种数据类型。包含了函数的路径、函数名、类型以及可能存在的重载方法;引入函数句柄是为了使feval及借助于它的泛函指令工作更可靠;使“函数调用”像“变量调用”一样方便灵活;提高函数调用速度,特别在反复调用情况下更显效率;提高软件重用性,扩大子函数和私用函数的可调用范围;迅速获得同名重载函数的位置、类型信息。-可以与变量一样方便地使用:比如说,在现在这个目录运行时,创建了本目录一个函数的句柄,当转到其他目录时,可以通过函数句柄直接调用上一个目录的函数

2、,而不需要把那个函数文件复制过来,因为创建的函数句柄中已经包含了路径信息;提高函数调用速度:因为matlab对函数的调用每次都是要搜索所有的路径,从set path中可以看到,路径是非常的多的,所以如果一个函数在程序中需要经常用到的话,使用函数句柄,对速度会有提高的;-MATLAB中函数句柄的使用使得函数也可以成为输入变量,并且能很方便的调用,提高函数的可用性和独立性。函数句柄实际上提供了一种间接调用函数的方法。创建函数句柄需要用到操作符创建函数句柄的语法:fhandle = function_filename调用函数时就可以调用该句柄,可以实现同样的功能。例如fhandle = sin就创建

3、了sin的句柄,输入fhandle(x)其实就是sin(x)的功能。如% % -fhandle=sinfhandle(pi)sin(pi)% % -例如:新建M文件f1.mfunction y=f1(X)x1=X(1);x2=X(2);y=x12+x1*x2;新建M文件ftest.mfunction Y=ftest(f,X)syms x1 x2;F=f(x1,x2);v=x1,x2;grad=jacobian(F,v);Y=subs(grad,v,X);在MATLAB命令窗口输入Y=ftest(f1,2,1),得到结果:Y = 5 2此处f1即为函数f1的句柄,可以用class(f1)判断变量

4、的类型,得到ans = function_handle即函数句柄。函数ftest是求一个二维函数在指定点的梯度值。我们可以替换目标函数为f2或其他函数同样可以求得梯度。这样函数ftest就可以适用于任何二维函数而不必做改动了。 feval函数如何理解feval函数的最通常的应用是以下形式:feval(functionname,parameter),举个简单的例子:比如要计算sin(2),当然可以直接用命令y=sin(2);利用feval,还可以这样来做:yfeval(sin,2);另外这里的函数名字还可以是一个函数句柄,即h=sin;y=feval(h,2);或者直接写成y=feval(sin

5、,2); 内联函数(inline function)inline函数不是函数句柄, 是另外一种类型, 它也可以用变量来表示函数, 用法也和一般函数, 函数句柄是一样的.内联函数和普通的函数句柄,准确说跟匿名函数比较类似,可以通过一个函数表达式近而得到该函数。在matlab中创建局部函数时,可用inline。优点是不必将其储存为一个单独文件。在运用中有几点限制:不能调用另一个 inline函数,只能由一个matlab表达式组成,并且只能返回一个变量-显然不允许u,v这种形式。因而,任何要求逻辑运算或乘法运算以求得最终结果的场合,都不能应用inline。语法格式如下:1 变量名=inline(表达

6、式);2 变量名=inline(函数表达式, 变量名1,变量名2, . ,变量名n);(推荐)例如:a=x+y;f=inline(a);f(2,3)ans = 5或者:f=inline(x+y,x,y);f(2,3)ans = 5inline函数可以对某个变量调用数组,如:Fofx=inline(x .2*cos(a*x)-b , x,a,b);g= Fofx(pi/3 pi/3.5,4,1)系统输出为:g=-1.5483 -1.7259经验之二:break就是直接跳出该层循环continue就是直接进入该层循环的下一次迭代return就是直接退出程序或函数返回了经验之三:Matlab中添加高

7、斯白噪声(Learning to use Matlab) MATLAB中产生高斯白噪声非常方便,可以直接应用两个函数,一个是WGN,另一个是AWGN。WGN用于产生高斯白噪声,AWGN则用于在某一信号中加入高斯白噪声。1. WGN:产生高斯白噪声y = wgn(m,n,p) 产生一个m行n列的高斯白噪声的矩阵,p以dBW为单位指定输出噪声的强度。y = wgn(m,n,p,imp) 以欧姆(Ohm)为单位指定负载阻抗。y = wgn(m,n,p,imp,state) 重置RANDN的状态。在数值变量后还可附加一些标志性参数:y = wgn(,POWERTYPE) 指定p的单位。POWERTYP

8、E可以是dBW, dBm或linear。线性强度(linear power)以瓦特(Watt)为单位。y = wgn(,OUTPUTTYPE) 指定输出类型。OUTPUTTYPE可以是real或complex。2. AWGN:在某一信号中加入高斯白噪声y = awgn(x,SNR) 在信号x中加入高斯白噪声。信噪比SNR以dB为单位。x的强度假定为0dBW。如果x是复数,就加入复噪声。y = awgn(x,SNR,SIGPOWER) 如果SIGPOWER是数值,则其代表以dBW为单位的信号强度;如果SIGPOWER为measured,则函数将在加入噪声之前测定信号强度。y = awgn(x,S

9、NR,SIGPOWER,STATE) 重置RANDN的状态。y = awgn(,POWERTYPE) 指定SNR和SIGPOWER的单位。POWERTYPE可以是dB或linear。如果POWERTYPE是dB,那么SNR以dB为单位,而SIGPOWER以dBW为单位。如果POWERTYPE是linear,那么SNR作为比值来度量,而SIGPOWER以瓦特为单位。经验之四:error( 报错跳出) nargin 定义的函数中应该输入的变量个数经验之五rref是把矩阵化为最简矩阵的函数 用det计算方阵的行列式值 用rank计算矩阵的特征值drawnow是刷新屏幕的语句;Imfinfo 可以查看

10、图片的所在的位置信息经验之六:求解Ax=d的解x1. LU分解% file: myLU.mfunction L,U=myLU(A)%实现对矩阵A的LU分解,L为下三角矩阵An,n=size(A);L=zeros(n,n);U=zeros(n,n);for i=1:n L(i,i)=1;endfor k=1:n for j=k:n U(k,j)=A(k,j)-sum(L(k,1:k-1).*U(1:k-1,j); end for i=k+1:n L(i,k)=(A(i,k)-sum(L(i,1:k-1).*U(1:k-1,k)/U(k,k); endend2. 用分解获得的L,U求解x?L,U

11、= myLU(A)n,m=size(A)y(1)=d(1);for i=2:n for j=1:i-1 d(i)=d(i)-L(i,j)*y(j); end y(i)=d(i);endx(n)=y(n)/U(n,n);for i=(n-1):-1:1 for j=n:-1:i+1 y(i)=y(i)-U(i,j)*x(j); end x(i)=y(i)/U(i,i);end经验之七:对于用imread读回来的图片信息 例如 123,12,3;123 12 分别是图片的宽高 也是一个三维度的矩阵 包含了 图片的色度信息吐血经验之八:%如何设置图片的大小cleara=imread(01.jpg);

12、%读入一张图片b=imresize(a,100 200);%设置你想要的大小imwrite(b,02.jpg);%按改变后的大小输出你的图片数据%GIF动画文件生成I=cell(1,30); %这个好像是创99个房间用来一个放图片信息 这里值得注意图片是一个三维矩阵奥for b=1:30 m1=imread(int2str(b),.jpg); %m1是一个公共变量会不停的被下一张图片信息覆盖最后是最后一张图片的信息 Ib=m1; %I1。I99就是每一张图片的信息endc=cell(1,30);I1,c1=rgb2ind(I1,256);imwrite(I1,c1,test1.GIF,gif,

13、Loopcount,inf,DelayTime,0.4);for i=2:30;Ii,ci=rgb2ind(Ii,256);imwrite(Ii,ci,test1.GIF,gif,WriteMode,append,DelayTime,0.4);end;经验之九:Sum的用法a=sum(x); %列求和a=sum(x,2); %行求和a=sum(x(:); %矩阵求和经验之九:这个有很多很好地的函数用法!大吐血经验之十:Excel和matlab数据的导入与导出xlswrite(tj.xlsx,W,B3:I5);把matlab中产生的数据W导入到制定的tj.xlsx对于制定区域的格式 要当心 a=xlsread(tj.xlsx,W,B3:I5);

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 教案示例

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知得利文库网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号-8 |  经营许可证:黑B2-20190332号 |   黑公网安备:91230400333293403D

© 2020-2023 www.deliwenku.com 得利文库. All Rights Reserved 黑龙江转换宝科技有限公司 

黑龙江省互联网违法和不良信息举报
举报电话:0468-3380021 邮箱:hgswwxb@163.com