matlab怎么在命令窗口输入一个函数,如f(x)=x+1,然后直接在matlab如何自定义函数的函数中就能读出x+1

matlab中,怎么样用function自定义函数调用另一个函数名为输入?_百度知道
matlab中,怎么样用function自定义函数调用另一个函数名为输入?
求老师们帮忙一下,然后我定义另一个函数function [z]=test11(funname)像是直接通过z=bestU(1)就可以得到值了,以使得我可以选择更多的函数进行计算,现在我想用funname来替代bestU;end意思就是我先这样定义一个函数,看到网上说用eval可以,但试了半天也不行function [y]=bestU(x)y=cos(5*x)-sin(3*x)+10,但是试了很多方法都不行
我试了N遍。PS。。。找了半天找不到错在什么地方:也就是说下面我们这样调用h=test(bestU)就可以得到我们想要的值了,一直提醒我变量x没定义
提问者采纳
x)z=funname(x)test定义两个参数。function [z]=test11(调用方式如下test11(@bestU,一个是函数,一个是函数的变量
提问者评价
我真傻,这种方法我也用了,但是忘记输入的是个字符串,应该加句柄了,大哥真是一针见血!!!!!!谢谢!
来自团队:
其他类似问题
为您推荐:
其他3条回答
调用h=test(bestU)时你并没有定义x的值。至少应该用h=test(bestU(1))吧
关键是test11这个函数的输入我把他定义为函数名,这个函数名funname我在调用函数时就直接输入bestU,而为什么不写成bestU(1),是因为我这里只是打比方,那个bestU函数的x值,要在我这个test11函数中才能算出来。求大神您想一想,我知道一个方法是用字符串连接eval,但是我试了很久都无果。
用Matlab的人,别再百度里问问题,到相关的技术论坛上去问吧
建立M文件,然后在主窗口中直接调用!
matlab的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁在matlab中怎样将一个目标函数输入,并且怎样将matlab中的函数写出来。看程序中的函数怎么都写不出来-中国学网-中国IT综合门户网站
> 在matlab中怎样将一个目标函数输入,并且怎样将matlab中的函数写出来。看程序中的函数怎么都写不出来
在matlab中怎样将一个目标函数输入,并且怎样将matlab中的函数写出来。看程序中的函数怎么都写不出来
转载 编辑:李强
为了帮助网友解决“在matlab中怎样将一个目标函数输入,”相关的问题,中国学网通过互联网对“在matlab中怎样将一个目标函数输入,”相关的解决方案进行了整理,用户详细问题包括:RT,我想知道:在matlab中怎样将一个目标函数输入,并且怎样将matlab中的函数写出来。看程序中的函数怎么都写不出来,具体解决方案如下:解决方案1:1、先将目标函数以文件形式写出来,其后缀名。m。如
function f=myfun(x)
f=42.382-0.0263315*x(1)*x(2);
2、然后在命令窗口下或执行文件中调用,如
[x,fval]=fminunc(@myfun,x0)通过对数据库的索引,我们还为您准备了:答:1、先将目标函数以文件形式写出来,其后缀名。m。如 myfun.m function f=myfun(x) f=42.382-0.0263315*x(1)*x(2); 2、然后在命令窗口下或执行文件中调用,如 [x,fval]=fminunc(@myfun,x0)===========================================问:RTRT,比如我要定义f=x(1)+x(2)+x(3),然后要在后面使用f。 但是,运行的...答:楼主的意思应该是函数的变量是一个向量,是吧? 那么楼上的方法就没什么意义了,因为很可能你连这个向量的长度都不知道。而且所谓的“不要用x(1),x(2),x(3)这样的格式”这是放屁。 function y=f(x) n=length(x); %你的例子中n=3 y=0; for i=1:n:1 ...===========================================问:function Faf = frft(f, a)% The fast Fractional Fourier Transform% i...答:这个问题涉及到函数调用的问题,有两种方式,可以以字符串格式传入再用eval调用同名函数,也可以@fun方式作为函数指针传入,站长的解释非常清楚,希望楼主可以理解这里面的深层含义。===========================================问:如题,函数是变化的,怎样通过键盘输入一个函数?比如y=x+2;怎么让m文...答:用input输入 比如 f=input('Please in put a function:(i.e. x+2)\n','s'); f=inline(f); ezplot(f)===========================================问:求各位大虾帮忙解答……不胜感激!收到满意代码以后100-200分献上! 背景...答:设a=x u,v b=x0 u,v c=(a-b)./b; c(c(isnan))=0; c(c(isinf))=0; d=sum(sum(c.^2));===========================================问:请问怎么实现啊,不是很懂,谢谢啦答:我这里有一个自己用过的代码,你可以修改一下试试看 code=inputdlg('Type number to decide operation,1=nearest scale,2=bilinear scale'); 这一句会弹出对话框,引号内是对话框的文本内容,可以自行修改,作为说明,用户输入会储存在变量code...===========================================问:我要做一个优化。比如目标:min(y)= x(1) + 2x(1)x(2) + x(1)^2+5x(2)...答:程序还是不给你,自己学会了,要写很简单的。按照步骤,照猫画虎就可以了。由于我不能贴图,例子中的数学模型没有写,供你参考。 优化工具箱提供fmincon函数用于对有约束优化问题进行求解,其语法格式如下: x = fmincon(fun,x0,A,b) x = fminco...===========================================1、先将目标函数以文件形式写出来,其后缀名。m。如 myfun.m function f=myfun(x) f=42.382-0.0263315*x(1)*x(2); 2、然后在命令窗口下或执行文件中调用,如 [x,fval]=fminu...=========================================== x(1) = -4. x11x(2) = -5. x12x(3) = -4. x13x(4)= -4. x14x(5) = -4. x21x(6)= -4. x22x(7) = -4....=========================================== fun = @(t)-(183545*t-); lb = 2004; ub = 2030; t0 = 2015; x = fmincon(fun,t0,[],[],[],[],lb,ub,@c) 起始值t0随便写一个。 另外在c.m中定义非线性约束函数: functio...===========================================意思是自定义M文件,你打开matlab后点击上面的file--new--blank M file,然后打开一个空白的M文件,编辑完退出的时候它会自动提醒你保存,这时候在命名,就建立了***.m文件===========================================[x,y,z])%求梯度 %gradient = %[ 2*x + y, x, 1]x=-1;y=2;z=3;tiduzhi=eval(gradient) %求在(-1,2,3)的梯度值%%tiduzhi =%% 0 -1 1 对于补充的问题,那就没什么函数,你直接用diff求微分...=========================================== 以e为底的是 以10为底的是log10 ; 以2为底的是log2;若以任意数 m 为底数, 也也可以这么写,log m(任意数)!!===========================================可以选择函数模型。它会生成一个函数。 这样就由几个点生成了一个函数表达式。 ---------------------------------------- 如果要实现输入后设置另一个单元格,可以在B1中输入"=A...===========================================可以选择函数模型。它会生成一个函数。 这样就由几个点生成了一个函数表达式。 ---------------------------------------- 如果要实现输入后设置另一个单元格,可以在B1中输入"=...===========================================B1单元格当作Y,那么在B1单元格输入:=0.+2.56*a1-0.5623,确定后,B1单元格显示-0.5623(因为此时A1为0),现在点击工具--单变量求解,在目标单元格输入B1(或点击B...===========================================像这种问题Matlab库函数直接可以求解。 编写三个m文件,一个主程序,两个function 主... 当然你可以把main.m也改为一个function,输入参数为目标函数名'fname',这时你需要自己...===========================================
本文欢迎转载,转载请注明:转载自中国学网: []
用户还关注
可能有帮助matlab控制流与自定义函数
所有的编程语言都提供了相应功能,来使用户能够根据决策结构控制命令执行流程。在普通情况下,MATLAB同其它编程语言一样,都是从上至下,按照顺序一行行执行每一条语句,但用户可以通过以下几种方式来控制程序的流程,它们是:for
循环,while循环,if-else-end结构。
For循环For循环允许用户以固定的和预定的次数重复执行某一语句块,其基本形式是:
1 4 9 16 25 36 49 64 81 100
在此循环中,第一次k=1,第二次k=2,每次执行到end语句时跳回循环开始处,同时循环变量增加1,直到k=10,语句体中求每次循环变量的平方。在k=10以后,for循环结束,继续执行end下面的语句。
For循环可以按需要嵌套(多重循环):
&&for n=1:5
for m=5:-1:1
A(n,m)=n^2+m^2;
disp(A(n,:))
2 5 10 17 26
5 8 13 20 29
10 13 18 25 34
17 20 25 32 41
26 29 34 41 50
1.不要在循环中修改循环变量的值,即在循环中使用变量时,注意不要与循环变量重名。
2.循环嵌套时,各循环及子循环的变量名不能相同。
3.用户可以在循环的起使值中间加一参数来控制每次循环时,循环变量的增加数(可以为负)如上例中的for m=5:-1:1 。
􀁺 While
与For循环以固定次数求一组命令的值相反, While循环以不定的次数求一组语句的值。While循环的一般形式是:
while 判断表达式
只要满足判断表达式里的要求,就执行while和end语句之间的语句。举例:
ABC=ABC/2;
num=num+1;
1.1102e-16
在这个例子里,ABC以1开始。只要(1+ABC)&1为真(非零),就一直求While循环内的命令值。由于ABC不断地被2除,ABC逐渐变小以至于ABC+1不大于1(记住,发生这种情况是因为计算机使用一定位数的数值来表示数。MATLAB用16位,因此,当ABC小于10-16,MATLAB就认为他是0)。在这时,(1+ABC)&1是假(零),于是While循环结束。最后,ABC与2相乘,因为最后除2使ABC太小。
􀁺
If-else-end分支If-else-end结构为程序提供了一种分支流,当符合某些条件时,执行某些语句。
if 判断表达式
if判断表达式
if 判断表达式1
else if 判断表达式2
else if 判断表达式3
举一个简单的分支结构的例子:
用for循环结合if语句寻找100以内的素数&& n=lO0;
for n=2:100
for m=2:fix(n/2)
if n/m==fix(n/m)
Switch-case分支&&&
switch语句和if语句类似,相当于多项选择。switch语句根据变量或表达式的取值不同分别执行不同的命令。其基本的调用格式为:
switch 表达式(标量或字符串) %表达式为一标量或字符串
语句体一 %当表达式的值=值一时,执行语句体一,然后跳出该结构
语句体二 %当表达式的值=值二时,执行语句体二,然后跳出该结构
语句体 %表达式的值不等于前面所有检测值时,则执行此组语句
用户用学生的成绩管理作为演示switch结构及结构体数组的应用,划分区域:满分(100)、优秀(90—99)、良好(80—89)、及格(60—79)、不及格(&60):
&& for i=l:10
a(i)=89+i;
b(i)=79+i;
c(i)=69+i;
d(i)=59+i;
&& c=[d,c];
Names={’zhang’,’wang’,’li’,’zhao’,’liu’); %元胞数组
&& Score=(85,72,93,54,100);
&& Rank=cell(1,5);
创建一个含有5个元素的结构体数组S,它有三个域:Name、Score、Rank:
S=struct(’Name’,Name,’Score’,Score,’Rank’,Rank);
根据学生的分数,求出相应的等级:
&& for i=1:5
switch S(i).Score
S(i).Rank=’满分’;
S(i).Rank=’优秀’;
S(i).Rank=’良好’;
S(i).Rank=’及格’;
S(i).Rank=’不及格’;
将学生的姓名,得分,登记等信息打印出来:
&& disp([’学生姓名 ’,’得分 ’,’等级’]);
&& for i=1:5
disp([S(i).Name,blanks(6),num2str(S(i).Score),blanks(6),S(i).Rank]);
学生姓名 得分 等级
zhang 85 良好
wang 72 及格
li 93 优秀
zhao 54 不及格
liu 100 满分
􀁺
控制程序流的其他常用命令:命令及使用方式
v=input('message')
v=input('message','s')
该命令执行时,“控制权”交给键盘;待输入结束后,按下Enter键,“控制权”交还给MATLAB。Message是提示用的字符串。第一种格式用于键入数值、字符串、元胞数组等数据:第二种格式,不管键入什么,都以字符串形式赋给变量v
遇到keyboard时,将“控制权”交给键盘,用户可以从键盘输入各种MATLAB命令。仅当用户输入return命令后,“控制权”才交还给程序。它与input的区别是:它允许输入任意多个MATLAB命令,而input只能输入赋给变量的“值”
break命令可以导致包含该命令的while、for循环中值;也可以在
if-end、switch-case、try-catch中导致中断
跳过位于其后的循环中的其他命令,执行循环的下一个迭代
第一种格式使程序暂停执行,等待用户按任意键继续;第二种格式使程序暂停n秒后再继续执行
结束return命令所在函数的执行,而把控制转至主调函数或者命令窗口。否则,只有等整个被调用函数执行完毕时才会转出
error('message')
显示出错信息message,终止程序
warning('message')
显示告警信息message,程序继续运行
关系与逻辑运算
􀁺& 关系运算
所谓关系运算或关系运算符,就是用来比较数值间大小关系的符号,它被当作一种选择性的判断标准。在MATLAB中,一个关系表达式的值若为真(表达式成立),则表达式的值为1;若为假,则其值为0。
关系操作符
小于或等于
大于或等于
MATLAB的关系操作符不仅可以比较两个标量或两个同样大小的数组,而且还可以用来比较一个数组和一个标量。在后一种情况,标量和数组中的每一个元素相比较,结果与数组大小一样。
&&A=2;B=3;
􀁺
逻辑运算逻辑操作符是和来表示两变量及表达式之间的组合或否定等逻辑关系的运算符。
逻辑操作符
逻辑操作符
异或(函数)
其中异或运算符为一内部函数,xor(x,y)表示若x、y两表达式都为真或都为假时返回0,一真一假时返回1。
关系与逻辑运算符经常配合if语句一起使用以达到控制程序流的作用,如:
语句⋯⋯
即当满足T&Tg 并且
T&5&Tg时,执行下面的语句,否刚不执行。
在MATLAB中,关系运算符的优先级别要高于逻辑运算符,但低于数值运算符,即先进行数值运算,再进行关系表达式的求值,最后进行逻辑表达式的求值,这在上例中可以看出。
在逻辑运算符中,又是以 非 & 与 &
或、异或,为先后运算顺序。
M文件的编写
M文件简介&&&
M文件分为脚本M文件和函数M文件。脚本M文件简单地说就是一串按用户意图排列而成的(包括控制流向命令在内的)MATLAB命令集合。脚本文件运行后,所产生的所有变量都驻留在MATLAB基本工作空间(Workspace)内,只要用户不使用clear命令加以清除,且MATLAB命令窗口(Command
Window)不关闭,这些变量将一直保存在基本工作空间中。基本工作空间随MATLAB的启动而产生,只有关闭MATLAB时,该基本工作空间才被删除。
与脚本文件不同,函数文件(Function
file)就犹如一个“黑箱”。使用MATLAB函数,例如inv、abs、angle和sqrt时,MATLAB获取传递给它的变量,利用所给的输入,计算所要求的结果。然后,把这些结果返回,用户可以指定变量来接受其返回值。由函数执行的命令,以及由这些命令所创建的中间变量,都是隐含的。所有可见的东西是输入和输出,也就是说函数是一个“黑箱”。这些属性使得函数成为强有力的工具,成为用以计算的命令。这些命令包括在求解一些大的问题时经常出现的有用的数学函数或命令序列。由于这个强大的功能,MATLAB提供了一个创建用户函数的结构,并以M文件的文本形式存储在计算机上。
一个函数M文件与脚本文件类似之处在于它们都是一个有.m扩展名的文本文件。如同脚本M文件一样,函数M文件不进入命令窗口,而是由文本编辑器所创建的外部文本文件。一个函数的M文件与脚本文件在通信方面是不同的。函数与MATLAB工作空间之间的通信,只通过传递给它的变量和通过它所创建的输出变量。在函数内中间变量不出现在MATLAB工作空间,或与MATLAB工作空间不交互。
用户看一个MATLAB中的内部函数:logspace
function y = logspace(d1, d2, n)
%LOGSPACE Logarithmically spaced vector.
% LOGSPACE(X1, X2) generates a row vector of 50
logarithmically
% equally spaced points between decades 10^X1 and 10^X2. If
% is pi, then the points are between 10^X1 and pi.
% LOGSPACE(X1, X2, N) generates N points.
% For N & 2, LOGSPACE returns 10^X2.
% See also LINSPACE, :.
% Copyright
The MathWorks, Inc.
% $Revision: 5.11 $ $Date:
06:05:07 $
if nargin == 2
if d2 == pi
d2 = log10(pi);
y = (10).^ [d1+(0:n-2)*(d2-d1)/(floor(n)-1), d2];
一个函数的M文件的第一行把M文件定义为一个函数,并指定它的名字。它与文件名相同。在这一行也定义了函数的输入和输出变量。接下来的注释行是所展示的文本,它与帮助命令:&&helpfilename相对应。第一行帮助行称为H1行,是由lookfor命令所搜索的行。最后,M文件的其余部分包含了MATLAB创建输出变量的命令。
用户在编写结构计算程序时,往往用主程序来组织变量、谐调各子程序(函数)工作、输出结果等,而将一些细致的工作交给子程序(函数)去做,这种编程的思路使得程序看起来思路清晰,分工明确,逻辑性强,并具有模块化的特点从而使得程序的调试、阅读与修改更加方便有效。
M文件的规则和属性
M文件函数必须遵循以下特定的规则,包括:
1. 函数名和文件名必须相同。例如,函数fliplr存储在名为fliplr.m文件中。
在函数M文件中,到第一个非注释行为止的注释行是帮助文本。当需要帮助时,输出该文本。例如,&&help
linspace返回上述前8行注释。
3. 函数可以有零个或更多个输入参量。函数可以有零个或更多个输出参量。
函数可以按少于函数M文件中所规定的输入和输出变量进行调用,但不能用多于函数M文件中所规定的输入和输出变量数目。如果输入和输出变量数目多于函数M文件中function语句一开始所规定的数目,则调用时自动返回一个错误提示。
当函数有一个以上输出变量时,输出变量包含在括号内。例如,[V,D]=eig(A)。不要把这个句法与等号右边的[V,D]相混淆。右边的[V,D]是由数组V和D所组成。
当调用一个函数时,所用的输入和输出的参量的数目,在函数内是规定好的。函数工作空间变量nargin包含输入参量个数;函数工作空间变量nargout包含输出参量个数。事实上,这些变量常用来设置默认输入变量,并决定用户所希望的输出变量(参看上例)。
函数内变量与MATLAB工作空间之间唯一的联系是函数的输入和输出变量。所以,即便函数内有与工作空间中变量同名的变量,两者之间也不会有影响,除非用户将其定义为全局变量,这在后面还要讲到。
全局变量和局部变量
局部(1ocal)变量是存在于函数空间内部的中间变量,产生于该函数的运行过程中,其影响范围也仅限于该函数本身在通常情况下,用户生成的变量均为局部变量。
全局(global)变量是在不同的工作空间以及基本工作空间中可以被共享的变量。每个希望共享全局变量的函数或MATLAB基本工作空间,必须逐个用global对具体变量加以专门定义。
如:global NNODE
将变量NNODE声名为全局变量,没采用global定义的函数或基本工作空间,将无权享用全局变量。
如果某个函数的运作使全局变量的内容发生了变化,也将改变其他函数空间及基本空间对该变量访问的数值。除非与全局变量联系的所有工作空间都被删除,否则全局变量仍然存在。
对全局变量的定义必须在该变量被使用之前进行。建议把全局变量的定义放在函数体的首行进行。全局变量为程序中数值的修改提供了方便,但若使用不当,会对程序带来可读性差、难以调试的困难,并且容易影响程序的整体模块化。
子函数MATLAB
允许一个M函数文件包含多个函数。其中,在函数文件的第一行定义的函数为主函数,该文件中的其他函数称为子函数。保存文件时所用的名字必须与主函数名相同,子函数的顺序是任意的并且只能被主函数或同一文件内的其它子函数所调用。外部程序只能对主函数进行调用。
根据以上所讲地基本使用方法,用户举一个例子来熟悉一下基本程序的编写,读者可以将此程序在MATLAB中建立一M文件,运行一下,这是一个根据新规范用来计算地震水平影响系数的小程序。
% 水平地震影响系数计算程序(GB)
amax=input('输入影响系数最大值:');
Tg=input('输入场地特征周期:');
keci=input('输入阻尼比:');
T=input('输入结构自振周期:');
r=0.9+(0.05-keci)/(0.5+5*keci);
y1=0.02+(0.05-keci)/8;
y2=1+(0.05-keci)/(0.06+1.7*keci);
at=0.45*amax+(y2*amax-0.45*amax)/0.1*T;
elseif T&0.1 &
elseif T&Tg &
at=(Tg/T)^r*y2*
at=(y2*0.2^r-y1*(T-5*Tg))*
&文件操作与基本输入输出:和其他高级语言一样,MATLAB把文件看成字符的序列,根据数据的组织形式,可分为ASCⅡ文件和二进制文件。ASCⅡ文件又称文本(text)文件,可以直接用记事本打开查看。二进制文件是把内存中的数据按其在内存中的存储形式原样输出到磁盘上存放,占用空间比ASCⅡ要小但不能直接查看。
MATLAB中常用的关于文件方面的函数:
打开和关闭文本文件
读二进制文件
打开和关闭二进制文件
写二进制文件
从文件中读格式数据
写文件数据
从文件中读行,不返回行结束符
从文件中读行,返回行结束符
把格式数据写入字符串
字符串转换
格式读入字符串
检验是否为文件结尾
设置文件定位器
获取文件定位器
返回到文件的开头
临时文件操作
获取临时文件目录
获取临时文件名
和其他高级语言一样,对文件读写之前应该“打开”该文件,在使用结束之后应“关闭”该文件。
函数fopen用于打开文件,其调用格式为:
fid=fopen('文件名','使用文件方式')
其中,fid为调用文件时返回的文件指针(指针变量名由用户起),文件打开后,可用指针值来代替该文件。“使用文件方式”项表示所打开文件的种类及使用文件的权限。使用文件方式下表
文件使用方式
为输入打开一个文本文件
为输出打开(创建)一个文本文件
向文本文件尾追加数据(创建)
为读/写打开一个文本文件(不创建)
为读/写建立一个新的文本文件
为读/写打开一个文本文件(可创建)
写但不自动覆盖
追加数据但不自动覆盖
当不指定文件的类型时,MATLAB默认为二进制文件,当打开文本文件时,在文件使用方式后加上't',例如'rt'、'wt+'等。当打开文件成功后,将会得到一个值为正整数的指针。有了此指针,在以后对该文件进行操作时,用该指针代替指定的文件。文件打开失败时,返回指针值—l。例如要打开文件five.dat,并从中读取数据,命令为:
fid=fopen('five.dat’,'r’)
当文件打开成功后,返回的文件指针为非负整数,文件指针可以作为很多I/O函数的输入参数。
下面介绍一些常用的输入输出控制函数
􀁺 函数fscanf
fscanf从文件中读取一行,并赋值给一个或多个变量。格式字符串都以百分符“%”开始。字符串“%s”表示读出一个字符;“%d”表示以十进制读出;“%g”表示以双精度浮点数读出。下面是fscanf的使用使用例子。
fid=fopen('io.dat','r');
MyData=fscanf(fid,'%g');
status=fclose(fid);
函数fscanf可以指定读出数据的个数。下面两句分别从fid中读出100个整数形成列向量和10&10的矩阵。
A=fscanf(fid,'%5d',100);
A=fscanf(fid,'%sd',[10 10]);
函数sscanf和函数fscanf类似,不同之处在于函数sscanf从字符串中读出数据,而fscanf从文件中读出数据,下面两条命令将从字符串向量中读出5和55,形成一个列向量。
squre=num2str([5,5^2]);
rootvalues=sscanf(squre,'&f');
其中num2str为MATLAB的内部函数用来将数字转换为字符串。同样,str2num可以将数字型的字符串转换为数字。
􀁺 函数fprintf
函数fprintf把数据转换成字符并写入文件或者屏幕上,可以采用格式控制字符串来控制字符串写出的格式。常用的格式控制有:%e表示写成指数形式;%f表示写成一般的浮点数格式;%g表示自动选择指数或浮点数的简短格式,在格式控制中还可以指定显示数据的宽度。下面看几个例子。
&&x=0:0.1:1;
&&y=[x;exp(x)];
&&FP=fopen('exptable.txt','w');
&&fprintf(FP,'Exponential
Function\n\n';
&&fprintf(FP,'%6.2f%12.8f\n',y);
&&status=fclose(fid)
注意:在对文件的输出结束之后,一定要将文件关闭,这是因为用户对文件的输出命令并不是直接作用于文件,而是先写入了缓冲区,只有当文件合法地进行关闭时,才将缓冲区的内容真正写到了文件上,用户一般在程序的结尾将先前打开的文件关闭。
其它的文件操作,用户可以查看MATLAB的帮助。
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。matlab中的自定义函数与调用30
上亿文档资料,等你来发现
matlab中的自定义函数与调用30
Matlab自定义函数;1、函数文件+调用命令文件:需单独定义一个自定义;2、函数文件+子函数:定义一个具有多个自定义函数;3、Inline:无需M文件,直接定义;;4、Syms+subs:无需M文件,直接定义;;5、字符串+subs:无需M文件,直接定义.;6、匿名函数7、直接通过@符号定义.;1、函数文件+调用函数文件:定义多个M文件:;%调用函数文件:
Matlab 自定义函数1、函数文件+调用命令文件:需单独定义一个自定义函数的M文件;2、函数文件+子函数:定义一个具有多个自定义函数的M文件;3、Inline:无需M文件,直接定义;4、Syms+subs: 无需M文件,直接定义;5、字符串+subs:无需M文件,直接定义.6、匿名函数
7、直接通过@符号定义.1、函数文件+调用函数文件:定义多个M文件:% 调用函数文件:myfile.mclearclcfor t=1:10y=mylfg(t);% 调用函数时要注意实参与形参的匹配!fprintf(‘%4d^(1/3)=%6.4f\n’,t,y);end%自定义函数文件: mylfg.mfunction y=mylfg(x) %注意:函数名(mylfg)必须与文件名(mylfg.m)一致Y=x^(1/3);注:这种方法要求自定义函数必须单独写一个M文件,不能与调用的命令文件写在同一个M文件中。2、函数文件+子函数:定义一个具有多个子函数的M文件%函数文件:funtry2.mfunction []=funtry2()%可以无自变量()或无因变量[]for t=1:10y=lfg2(t);fprintf('%4d^(1/3) = %6.4f\n',t,y);endfunction y=lfg2(x)
%%子函数y=x^(1/3);%注:自定义函数文件funtry2.m中可以定义多个子函数function。子函数lfg2只能被主函数和主函数中的其他子函数调用。3、Inline:无需M文件,直接定义;%inline命令用来定义一个内联函数:f=inline(‘函数表达式’, ‘变量1’,’变量2’,……)。 调用方式:y=f(数值列表) %注意:代入的数值列表顺序应与inline()定义的变量名顺序一致。 例如:f=inline(‘x^2+y’,’x’,’y’);z=f(2,3)Ans=7注:这种函数定义方式是将它作为一个内部函数调用。特点是,它是基于Matlab的数值运算内核的,所以它的运算速度较快,程序效率更高。缺点是,该方法只能对数值进行代入,不支持符号代入,且对定义后的函数不能进行求导等符号运算。内联函数定义方式是将 f 作为一个内部函数调用。其特点是:调用方式最接近于我们平时对函数的定义,使程序更具可读性。同时由于它是基于 Matlab 的数值计算内核的,所以它的运算速度较快,程序更有效率。这种定义方式的缺点:定义一个内联函数用去的内存空间比相同条件下其他的方法要大得多。该方法只能对数值进行代入,不支持符号代入,并且对于定义后的函数不能进行求导等符号运算。 例:通过命令clear 清除工作空间的所有变量后,执行如下指令ClearClcf=’x^2’;Sg=x^2;h=inline(‘x^2’,’x’);whos4、Syms+subs: 无需M文件,直接定义;用syms定义一个符号表达式,用subs调用:Syms f x %定义符号f=1/(1+x^2); %定义符号表达式也是符号 subs(f, ‘x’, 代替x的数值或符号)注:对于在syms中已经定义过的符号变量,在subs中进行替代时,单引号可以省略。但是,如果在syms后又被重新定义为其他类型,则必须加单引号,否则不可替换。这种函数定义方法的特点是,可以用符号进行替换Syms f xf=1/(1+x^2);subs(f, ‘x’,’y^2’)ans=1/(1+(y^2)^2)注:该方法的缺点是,由于使用符号运算内核,运算速度会大大降低。5、字符串+subs:无需M文件,直接定义.直接定义一个字符串,用subs命令调用。例如:f=’1/(1+x^2)’ %定义字符串z=subs(f,’x’,2)g=subs(f,’x’,’y^2’)注:此处 x 的单引号不可省略。本函数方式可以代入字符,但字符不能参与运算,否则将自行转化成该字符的 ASCII 码运算,这与我们想要的结果可能会大相径庭。优点是,占用内存最少,定义格式方面自由。缺点是,无法对字符进行符号转化。subs 命令的一种比较方便的调用方法当所要替代的符号在调用前都已经有了数值定义,则可以直接调用:subs(f).例如:f=’x^2*y’;x=2;y=3;subs(f)ans=126. 匿名函数使用matlab函数句柄操作符@,可以定义指向matlab内置函数和用户自定义函数的函数句柄,函数句柄也可以像函数一样的使用。例如:&&x=-pi:0.1:&& fh={@cos,@sin};fh =@cos
@sin&&plot(fh{2}(x))7、直接通过@符号定义.示例如下:&& f=@(x,y)(x.^2-sin(y))f =@(x,y)(x.^2-sin(y))&& f(2,3)ans =3.8589 函数计算的几种方式? 函数名(自变量值表)? eval(‘字符串‘);%字符串可以是命令,表达式,语句,M文件名? feval(‘@函数名‘,自变量值表); %这种形式比用:函数名(自变量值表)的方式好? 泛函的调用:泛函名(@函数名,参数列),泛函是以函数为自变量的函数,如求根函数fsolve,求最小值函数fminunc等都是泛函.
这里@函数名是一种数据类型,称为函数句柄? N=datenum( []) %北京奥运会开幕日的序号,按公元1年1月1日0时序号为367开始计算,由于没有公元0年,故计算公元前x年,要按1-x年输入? N=datenum([,20,0,0])%北京奥运会开幕日20 时0分0秒的日序号(有小数) ? N=feval(@datenum,[])? D3=dec2base(100,3)%100的3进制表示? [g,x,y]=gcd(3,5)%输出中g是3和5的最大公因子,整数x,y满足方程3x+5y=g求根函数fzero要求被求根的函数myfun是单变量的,但myfun是带有参数a的,不符合条件,可采用如下函数嵌套的方法来解决:function y = findzero(a, x0)options = optimset('Display', 'off');y = fzero(@myfun, x0, options);function y = myfun(x)y = x^3 + x +endend? 在嵌套函数中要用end表示函数定义的结束? 不用嵌套函数的另一种解决的方法是用匿名函数? 设有一个M函数文件function y = humps(x)y = 1./((x - 0.3).^2 + 0.01) + 1./((x - 0.9).^2 + 0.04) - 6;要计算这函数在x=2的值,可执行命令:fh = @fh(2.0)(也可写在脚本文件中)单变量求根函数fzero要求函数是单变量的,如一个函数myfun的输入变量为(x,a), a是参数,为了能对myfun求根,方法如下a = 2; % 先给定参数值Fh= @(x) myfun(x,a); %创建单变量的匿名函数的函数句柄Fhx = fzero(Fh,0.1),%求根 包含各类专业文献、文学作品欣赏、高等教育、应用写作文书、行业资料、外语学习资料、幼儿教育、小学教育、matlab中的自定义函数与调用30等内容。
 matlab函数定义和调用问题_数学_自然科学_专业资料。matlab函数定义和调用问题 ...x^(1/3); %注:自定义函数文件 funtry2.m 中可以定义多个子函数 function...  函数名(mylfg)必须与文件名(mylfg.m)一致 Y=x^(1/3); 注:这种方法要求自定义函数必须单独写一个 M 文件,不能与调用的命令文件 写在同一个 M 文件中。...  也在逼迫着自己不断的去应用新的公式并开发新的算法,这就牵涉 到了如何在 MATLAB 中自定义函数的问题,随之而来自然就是所有编程语言所面 临的问题, 函数调用、...  %子函数 1 x1=sort(x); r=x1(n); function r=mysubfun2(x) %子函数 2 x1=sort(x); r=x1(1); Matlab 自定义函数的五种方法 1、函数文件+调用...  (也就 是所谓的实参);然后将这两个数组转换为 matlab 可以识别的矩阵;然后调用 m 文件中自定义的函数,对矩阵进行操作;最后将结果再转回 VC 支持的数据格式: ...  MATLAB定义函数注意事项以及分号使用_计算机软件及应用_IT/计算机_专业资料。这是关于MATLAB中函数定义注意事项以及分号使用情况,自己总结的。一...  3. 引擎 API 详解 在调用 Matlab 引擎之前,首先应在相关文件中加入一行:#include &enging.h&,该文件包含了引擎 API 函数的说明和所需数据结构的定义。可以在 ...  Matlab中ode函数调用_数学_自然科学_专业资料。函数功能编辑本段回目录 函数功能编辑本段回目录 编辑本段 ode 是专门用于解微分方程的功能函数,他有 ode23,ode45...  注: MATLAB 中还可以用 linspace 函数产生行向量; 其调用格式为: linspace(a,b,n) 其中 a 和 b 是生成向量的第一个和最后一个元素,n 是元素总数。当 n ...

我要回帖

更多关于 matlab如何自定义函数 的文章

 

随机推荐