基于MATLAB数值解析_第1页
基于MATLAB数值解析_第2页
基于MATLAB数值解析_第3页
基于MATLAB数值解析_第4页
基于MATLAB数值解析_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第五章

自定义函数的计算函数的创建1.用M文件function

f=fun(x)内联函数y=inline("(3*x^2-1)/2","x");字符串表达式(函数)"theta=t/2,y=sin(theta)‘4.符号函数Evaluation

only.ated

withfA=1s.p/o(s1e+.xS.l^i2)d);es

for

.NET

3.5

Client

ProCopyright

2004-2011

Aspose

Pty

Ltd.5.1

字符串数组一、字符串入门【例1】先实际操作cleara=12345.6789class(a)a_s=size(a)a

=1.2346e+004ans

=doublea_s

=1

1b="S"b

=Sans

=charb_s

=1

1Evaluation

only.ate本d例wi,t以h以A体s会po数se值.S量lidesfor.NETc3l.a5ssC(lbi)entPro与字•符Co串py的ri区g别ht。2004-2011

Asposbeb_Pst=ysiLzted(b.b)whosNameSizeBytes

Classa1x18double

arraya_s1x216

double

arrayans1x48 char

arrayb

1x12

c•hEavraalruraatyion

only.atedb_wsith1Axs2po1s6e.dSoluibdleesarfroary

.NET

3.5

Client

ProCopyright

2004-2011

Aspose

Pty

Ltd.【例2】本例演示:串的基本属性、标识和简单操作。。(1)创建串数组

a="This

is

an

example."a=This

is

an

example.(2)串数组a的大小ans

=Evaluation

only.atesdsiwziet(ah)Aspose.Slides

for

.NET

3.5

Client

Pro•1Co1p9yright

2004(-230)1串1

数A数s组po的se元P素ty标L识td.a14=a(1:4)ra=a(end:-1:1)a14

=Thisra

=.elpmaxe

na

si

sihT【例3】中文字符串数组

A="这是一个算例。";

A_s=size(A)A56=A([5

6])A_s

=1

7A56

=算例Example

"3.1.2-1"ab=[a(1:7),"

",b,"

."]ab

=This

is

Example

"3.1.2-1"

.【例4】由小串构•E成va大lu串ationonly.atebd="wEixtahmpAlsep"o"s3e..1S.2l-i1d"e"s"for.NET3.5ClientProb

=

•Copyright

2004-2011

Aspose

Pty

Ltd.二、复杂串数组的创建【例1】多行串数组的直接输入示例。

clearS=["This

string

array

""has

multiple

rows."]S

=has

multiple

rows.2

18Evaluation

only.ateTdhiwsitsthrAisngpgoasrera.aySlides

for

.NET

3.5

Client

Prosiz•eC(oS)p)yright

2004-2011

Aspose

Pty

Ltd.ans

=【例2】演示:用专门函数char,str2mat,strvcat创建多行串数组示例。。S2

=由4行组成S3=strvcat("这","字符","串数组","","由4行组成")S1=char("This

string

array","has

two

rows.")S1

=This

string

arrayhas

two

rows.S2=str2mat(‘这’,‘•‘E字v符a’l,u‘a串t数i组o’n,‘on’l,y"由.4行组成")ated

with

Aspose.Slides

for

.NET

3.5

Client

Pro这•Copyright

2004-2011

Aspose

Pty

Ltd.字符

串数组5.2

串演算函数为了提高计算的灵活性,MATLAB提供了一种利用字符串进行计算•的Ev能al力u。a。t利io用n字on符ly串.可以构成函数,ate可d以wi在t运h运A行s中po改se变.S所l执i执d行es的f指or令.,NE可T以3.被5泛Cl涵ie指n令tP调ro用实•现Co比py较ri复g杂ht的2求00零4-点20、1求1极A极s值po等se运P算ty。Ltd.一、evaly=eval(‘CEM’)[y1,y2,…]=eval(‘CEM’)法的指令、表达式、语句、或M文件名。

(3)第二种格式中的CEM只能是(包含输入宗量在内的)

M函数文件名。注:(1)eval指令•的Ev输a入lu宗at量io必n须on是l字y.符串。ate(d2w)it构h成As字p符os串e.的SlCEiEMd,es可f以or是.MNAETTLA3B.任5何Cl合ientProCopyright

2004-2011

Aspose

Pty

Ltd.【例】计算“表达式”串,产生向量值。。clear,t=pi;cem="[t/2,t*2,sin(t)]";y=eval(cem)y=1.5708 6.2832 0.0000【例】计算“语•句Ev”a串lu,at创io建n变on量l。y.atceldewari,tth=pApis;pose.Slidesfor.NET3.5ClientProeval•(C"otphyetrtai=gth/t2,2y0=0s4i-n2(0t1he1etAas)p")o;sePtyLtd.theta=1.5708y=1【例】计算“替代”串。CEM={"cos","sin","tan"};for

k=1:3theta=pi*k/12;y(1,k)=eval([CEM{1},"(",num2str(theta),")"]);endyy

=0.9659

0.8660

0.7071A=ones(2,1);B=ones(1,3);c=eval("B*A","A*B"),errmessage=l

asterrc

=1

1

11

1

1errmessage

=Error

using

==>

*Inner

matrix

dimensions

must

agree.Evaluation

only.ated

with

Aspose.Slides

for

.NET

3.5

Client

Pro【例•C】o计py算ri“gh合t成20”0串4-。2011

Aspose

Pty

Ltd.feval。x=pi/4;Ve=eval("1+sin(x)")Ve

=1.7071Vf=feval("1+sin(x)",x)???

Error

using

==>

fevalInvalid

function

name

"1+sin(x)".二、feval[y1,y2,…]=feval(F,arg1,arg2,…)F可以是函数句柄,函数名字符串,内联函数feval与函数句柄配套使用【例】对字符串类型函数只能用eval,而不能用Evaluationonly.ated

with

Aspose.Slides

for

.NET

3.5

Client

ProCopyright

2004-2011

Aspose

Pty

Ltd.【例】函数句柄只能被feval运用,而不能被eval调用。。(1)函数句柄被feval调用

rand("seed",1);A=rand(2,2);Heig=@eig;d=feval(Heig,A)d

=Function

"eval"

not

defined

for

variablesof

class

"function_handle".Evaluation

only.ated0.w7i5t6h8

Aspose.Slides

for

.NET

3.5

Client

Pro-0.•1C4o8p8yright

2004-2011

Aspose

Pty

Ltd.(2)eval不能对函数句柄进行操作de=eval(Heig,A)???

Error

using

==>

eval(3)feval能对函数名字符串进行操作

dn=feval("eig",A)dn

=0.7568-0.1488dn=feval("sin•"E,vpail/u2)ation

only.ateddnw=ith

Aspose.Slides

for

.NET

3.5

Client

ProCopyright

2004-2011

Aspose

Pty

Ltd.1【例】feval和eval调用区别:feval的FN只接受函数名。本例两种方法以后者为好。。randn("seed",1);A=rand(2,2);[ue,de,ve]=eval("svd(A)");disp("Results

by

eval");disp([ue,de,ve]);disp(blanks(1))[uf,df,vf]=feval("svd",A);disp("Results

by

feval");disp([uf,df,vf])Results

by

eval-0.3936

0.9193

0 0.2633

-0.6135

0.7897-0.9193

-0.3936

1.2212

0-0.3936

0.9193

0

0.2633-0.7897

-0.6135-0.6135

0.7897Evaluation

only.at-e0d.91w9i3

-t0h.39A3s6

p1.o2s21e2

.0

Sl-0i.d78e97s-f0.o61r35.NET

3.5

Client

ProResul•tsCboy

pfeyvralight

2004-2011

Aspose

Pty

Ltd.三、内联函数式。inline("CE")inline("CE",arg1,arg2,…)inline("CE",n)注:(1)‘CE’字符串•E,vaClEu必at须io是n不on包l含y.赋值号‘=’的ate表d达with

Aspose.Slides

for

.NET

3.5

Client

Pro(2)内•C联op函yr数i是g是h沟t通20e0v4a-l2,0f1ev1vaAls两p个os不e同Pt指y令Lt的d.桥梁。凡eval可以运作的表达式,都可以通过inline转化为内联函数,而这种内联函数总可以被feval使用。(3)第三种调用格式最简练,但对输入宗量的字符限制严格。输入宗量的字符只能是x,P1,P2,…,Pn.GG=vectorize(G)GG

=【例】用内联函数对象实现。创建带一个参量的二元函数

G=inline("a*exp(x)*cos(y)","a","x","y");使适应数组运算规则Evaluation

only.atedIwnilitnheAfsupnocstieio.nS:lides

for

.NET

3.5

Client

ProGG•(Cao,pxy,ry)i)g=hat.*2e0x0p4(-x2)0.1*c1oAss(ypy)ose

Pty

Ltd.GG(2,[1,2],[pi/3,pi])ans

=2.7183

-14.7781【例】演示:内联函数的第一种创建格式;使内联函数适于“数组运算”。clear,F1=inline("sin(rho)/rho")F1

=Inline

function:F1(rho)

=

sin(rho)/rhof1=F1(2)f1

=xx=[0.5,1,1.5,2];ff1=FF1(xx)FF1

=Inline

function:FF1(rho)

=

sin(rho)./rhoff1

=0.9589

0.8415

0.6650

0.4546Evaluation

only.ated0w.i4t5h46Aspose.Slides

for

.NET

3.5

Client

ProFF1•=Cvoecpctyorriigzhet(F210)04-2011

Aspose

Pty

Ltd.【例】演示:产生向量输入、向量输出的内联函数;这种向量函数的调用方法。Y2=inline("[x(1)^2;3*x(1)*sin(x(2))]")argnames(Y2)Y2

=Inline

function:Y2(x)

=

[x(1•)^E2v;a3l*uxa(t1i)o*snsionn(lx(y2.))]ateadnsw=ith

Aspose.Slides

for

.NET

3.5

Client

Pro"x•"Copyright

2004-2011

Aspose

Pty

Ltd.x=[4,pi/6];y2=Y2(x)y2

=16.00006.0000【例】演示:最简练格式创建内联函数;内联函数可被feval指令调用。。Z2=inline("P1*x*sin(x^2+P2)",2)

Z2

=Inline

function:Z2(x,P1,P2)

=

P1*x*sin(x^2+P2)z2=Z2(2,2,3)Evaluation

only.atefdz2w=iftehvaAls(pZo2,s2e,.2S,l3i)des

for

.NET

3.5

Client

Proz2

=•Copyright

2004-2011

Aspose

Pty

Ltd.2.6279fz2

=2.62795.3

函数句柄(1)利用@符号(2)利用转换函数str2func引入函数句柄使“函数调用”像“变量调用”一样灵活方便•。Evaluation

only.ated一w、it函h

数As句po柄se的.创Sl建ides

for

.NET

3.5

Client

ProCopyright

2004-2011

Aspose

Pty

Ltd.【例】为MATLAB的“内建”函数创建函数句柄,并观察其内涵。。创建函数句柄

hsin=@sin;类型判别class(hsin)•Evaluation

only.atedswiizteh(hAssipno)se.Slides

for

.NET

3.5

Client

Proan•nsCo=pyright

2004-2011

Aspose

Pty

Ltd.function_handleans

=1

1二、函数句柄的基本用法

[ao1,ao2,…,aon]=FunName(ai1,ai2,…,ain)Hfun=@FunName;

[ao1,ao2,…,aon]=feval(Hfun,ai1,ai2,…,ain)Evaluation

only.ated

with

Aspose.Slides

for

.NET

3.5

Client

ProCopyright

2004-2011

Aspose

Pty

Ltd.【例】本例通过sin函数及其句柄演示若干基本用法。(1)函数句柄的创建

fhandle=str2func("sin");(2)函数句柄在“数值计算”中的情况

ys=sin(pi/4)yfold=feval("s•iEnv"a,lpuia/4t4)ion

only.atyefdnwewi=tfhevAvaslp(ofshea.nSdllie,dpeis/4f4)or

.NET

3.5

Client

Proys

=•Copyright

2004-2011

Aspose

Pty

Ltd.0.7071yfold

=0.7071yfnew

=0.7071(3)函数句柄在“符号计算”中的情况

Alpha=sym("pi/4");yss=sin(Alpha)yfold=feval("sin",Alpha)ynews=feval(fhandle,Alpha)yss

=1/2*2^(1/2)Evaluation

only.atyefdowldit=hAspose.Slidesfor.NET3.5ClientPro1/2*•2C^o(p1y/2r2)ight2004-2011AsposePtyLtd.ynews=1/2*2^(1/2)(4)函数句柄在泛函指令中的用法在[0,2π]间求sin函数的极小值点的位置。

xold=fminbnd("sin",0,2*pi)xnew=fminbnd(fhandle,0,2*pi)xold

=4.7124xnew

=Evaluation

only.ated4.w7i1t2h4

Aspose.Slides

for

.NET

3.5

Client

ProCopyright

2004-2011

Aspose

Pty

Ltd.【例】自建函数及其句柄的使用。通过本例可看到:只要在当前MATLAB工作空间中存在函数句柄,那末不管该函数当前是否在搜索范围内,均可通过函数句柄实现正确的运作。。(1)[zzy076_3.m]function Hr=zzy076_3(flag )% ZZY076_3 为演•E示va函l数ua、ti子on函o数nl句y柄.而设计的绘图at文ed件w。ithAspose.Slidesfor.NET3.5ClientPro% fl•aCgopyright可2以00取4-字20符1串1A"lslipnoes"e或Pt"yciLrtcdl.e"。t=(0:100)/100*2*pi;x=sin(t);y=cos(t);Hr=@cirline; %创建子函数的句柄feval(Hr,flag,x,y,t)%

subfunctionfunction

cirline(wd,x,y,t)接受字符串"line"或"circle"画线用的独立参变量由t产生的横坐标变量由t产生的纵

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论