资源描述:
《基于MATLAB的数值分析课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、第五章自定义函数的计算函数的创建用M文件functionf=fun(x)f=1./(1+x.^2);内联函数y=inline('(3*x^2-1)/2','x');3.字符串表达式(函数)'theta=t/2,y=sin(theta)‘4.符号函数5.1字符串数组一、字符串入门【例1】先实际操作本例,以体会数值量与字符串的区别。cleara=12345.6789class(a)a_s=size(a)a=1.2346e+004ans=doublea_s=11b='S'class(b)b_s=size(b)b=San
2、s=charb_s=11whosNameSizeBytesClassa1x18doublearraya_s1x216doublearrayans1x48chararrayb1x12chararrayb_s1x216doublearray【例2】本例演示:串的基本属性、标识和简单操作。(1)创建串数组a='Thisisanexample.'a=Thisisanexample.(2)串数组a的大小size(a)ans=119(3)串数组的元素标识a14=a(1:4)ra=a(end:-1:1)a14=Thisra=.
3、elpmaxenasisihT【例3】中文字符串数组A='这是一个算例。';A_s=size(A)A56=A([56])A_s=17A56=算例【例4】由小串构成大串b='Example''3.1.2-1'''b=Example'3.1.2-1'ab=[a(1:7),'',b,'.']ab=ThisisExample'3.1.2-1'.二、复杂串数组的创建【例1】多行串数组的直接输入示例。clearS=['Thisstringarray''hasmultiplerows.']S=Thisstringarrayha
4、smultiplerows.size(S)ans=218【例2】演示:用专门函数char,str2mat,strvcat创建多行串数组示例。S1=char('Thisstringarray','hastworows.')S1=Thisstringarrayhastworows.S2=str2mat(‘这’,‘字符’,‘串数组’,‘’,'由4行组成')S2=这字符串数组由4行组成S3=strvcat('这','字符','串数组','','由4行组成')5.2串演算函数为了提高计算的灵活性,MATLAB提供了一种利用
5、字符串进行计算的能力。利用字符串可以构成函数,可以在运行中改变所执行的指令,可以被泛涵指令调用实现比较复杂的求零点、求极值等运算。一、evaly=eval(‘CEM’)[y1,y2,…]=eval(‘CEM’)注:(1)eval指令的输入宗量必须是字符串。(2)构成字符串的CEM,可以是MATLAB任何合法的指令、表达式、语句、或M文件名。(3)第二种格式中的CEM只能是(包含输入宗量在内的)M函数文件名。【例】计算“语句”串,创建变量。clear,t=pi;eval('theta=t/2,y=sin(theta
6、)');theta=1.5708y=1【例】计算“表达式”串,产生向量值。clear,t=pi;cem='[t/2,t*2,sin(t)]';y=eval(cem)y=1.57086.28320.0000【例】计算“替代”串。A=ones(2,1);B=ones(1,3);c=eval('B*A','A*B'),errmessage=lasterrc=111111errmessage=Errorusing==>*Innermatrixdimensionsmustagree.【例】计算“合成”串。CEM={'cos
7、','sin','tan'};fork=1:3theta=pi*k/12;y(1,k)=eval([CEM{1},'(',num2str(theta),')']);endyy=0.96590.86600.7071[y1,y2,…]=feval(F,arg1,arg2,…)F可以是函数句柄,函数名字符串,内联函数feval与函数句柄配套使用【例】对字符串类型函数只能用eval,而不能用feval。x=pi/4;Ve=eval('1+sin(x)')Ve=1.7071Vf=feval('1+sin(x)',x)???
8、Errorusing==>fevalInvalidfunctionname'1+sin(x)'.二、feval【例】函数句柄只能被feval运用,而不能被eval调用。(1)函数句柄被feval调用rand('seed',1);A=rand(2,2);Heig=@eig;d=feval(Heig,A)d=0.7568-0.1488(2)eval不能对函数句柄进行操作de=