篇一:《matlab中的自定义函数与调用》
Matlab 自定义函数
1、函数文件 调用命令文件:需单独定义一个自定义函数的M文件;
2、函数文件 子函数:定义一个具有多个自定义函数的M文件;
3、Inline:无需M文件,直接定义;
4、Syms subs: 无需M文件,直接定义;
5、字符串 subs:无需M文件,直接定义.
6、匿名函数 7、直接通过@符号定义.
1、函数文件 调用函数文件:定义多个M文件:
% 调用函数文件:myfile.m
clear
clc
for t=1:10
y=mylfg(t);% 调用函数时要注意实参与形参的匹配!
fprintf(‘M^(1/3)=%6.4f\n’,t,y);
end
%自定义函数文件: mylfg.m
function y=mylfg(x) %注意:函数名(mylfg)必须与文件名(mylfg.m)一致
Y=x^(1/3);
注:这种方法要求自定义函数必须单独写一个M文件,不能与调用的命令文件写在同一个M文件中。
2、函数文件 子函数:定义一个具有多个子函数的M文件
%函数文件:funtry2.m
function []=funtry2()%可以无自变量()或无因变量[]
for t=1:10
y=lfg2(t);
fprintf('M^(1/3) = %6.4f\n',t,y);
end
function 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 清除工作空间的所有变量后,执行如下指令
Clear
Clc
f=’x^2’;
Syms x g;
g=x^2;
h=inline(‘x^2’,’x’);
whos
4、Syms subs: 无需M文件,直接定义;
用syms定义一个符号表达式,用subs调用:
Syms f x %定义符号
f=1/(1 x^2); %定义符号表达式也是符号
subs(f, ‘x’, 代替x的数值或符号)
注:对于在syms中已经定义过的符号变量,在subs中进行替代时,单引号可以省略。但是,如果在syms后又被重新定义为其他类型,则必须加单引号,否则不可替换。
这种函数定义方法的特点是,可以用符号进行替换
Syms f x
f=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=12
6. 匿名函数
使用matlab函数句柄操作符@,可以定义指向matlab内置函数和用户自定义函数的函数句柄,函数句柄也可以像函数一样的使用。例如:
>>x=-pi:0.1:pi;
>> 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( [2008,8,8]) %北京奥运会开幕日的序号,按公元1年1月1日0时序号为367开始计算,由于没有公元0年,故计算公元前x年,要按1-x年输入
N=datenum([2008,8,8,20,0,0])%北京奥运会开幕日20 时0分0秒的日序号(有小数) N=feval(@datenum,[2008,8,8])
D3=dec2base(100,3)0的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 a;
end
end
在嵌套函数中要用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 = @humps;
fh(2.0)
(也可写在脚本文件中)
单变量求根函数fzero要求函数是单变量的,如一个函数myfun的输入变量为(x,a), a是参数,为了能对myfun求根,方法如下
a = 2; % 先给定参数值
Fh= @(x) myfun(x,a); %创建单变量的匿名函数的函数句柄Fh
x = fzero(Fh,0.1),%求根
篇二:《Matlab的内部常数》
Matlab的内部常数
pi 圆周率
exp(1) 自然对数的底数e i 或j 虚数单位 Inf或 inf 无穷大
Matlab的常用内部数学函数
Matlab中的数学运算符
Matlab的关系运算符
如何在matlab中调用maple (不用安装maple软件就可调用)
方法1:
maple(’maplestatement’)
其中maplestatement 是完整的maple语句,由一条或几条命令组成,必须符合maple 的语法 方法2:
maple(’function’,arg1, arg2,…)
其中function为maple中的函数名称,arg1, arg2,…是函数function所用的参数。 注:如果方法1行不通,可尝试方法2(个人经验)。 基本代数部分
如何用matlab求阶乘
factorial(n) 求n的阶乘
如何用matlab配方
没有发现matlab有这一命令,不过我们可以调用maple的命令,调用方法如下: 首先加载maple中的student函数库,加载方法为:maple(’with(student)’) 然后运行maple中的配方命令,格式为:
maple(’pletesquare(f)’) 把f配方,其中f为代数表达式或代数方程 maple(’pletesquare(f,x)’) 把f按指定的变量x配方,其中f同上
maple(’pletesquare(f,{x,y,...})’) 把f按指定的变量x,y,...配方 maple(’pletesquare(f,[x,y,...])’) 把f按指定的变量x,y,...配方,
如何用matlab进行多项式运算
(1) 合并同类项
syms 表达式中包含的变量 collect(表达式,指定的变量) (2)因式分解
syms 表达式中包含的变量 factor(表达式) (3)展开
syms 表达式中包含的变量 expand(表达式)
我们也可在matlab中调用maple的命令进行多项式的运算,调用格式如下: maple(’maple中多项式的运算命令’)
如何用matlab进行分式运算
发现matlab只有一条处理分式问题的命令,其使用格式如下:
[n,d]=numden(f) 把符号表达式f化简为有理形式,其中分子和分母的系数为整数且分子分母不含公约项,返回结果n为分子,d为分母。注意:f必须为符号表达式 不过我们可以调用maple的命令,调用方法如下: maple(’denom(f)’) maple(’numer(f)’) maple(’normal(f)’ ) maple(’expand(f)’) maple(’factor(f)’)
提取分式f的分母 提取分式f的分子
把分式f的分子与分母约分成最简形式 把分式f的分子展开,分母不变且被看成单项。 把分式f的分母和分子因式分解,并进行约分。 如何用Matlab进行因式分解
syms 表达式中包含的变量 factor(表达式)
如何用Matlab展开
syms 表达式中包含的变量 expand(表达式)
如何用Matlab进行化简
syms 表达式中包含的变量 simplify(表达式)
如何用Matlab合并同类项
syms 表达式中包含的变量 collect(表达式,指定的变量)
如何用Matlab进行数学式的转换
调用Maple中数学式的转换命令,调用格式如下: maple(‘Maple的数学式转换命令’)
即:maple(‘convert(表达式,form)’) 将表达式转换成form的表示方式
maple(‘convert(表达式,form, x)’) 指定变量为x,将依赖于变量x的函数转换成form的表示方式(此指令仅对form为exp与sincos的转换式有用)
如何用Matlab进行变量替换
syms 表达式和代换式中包含的所有变量 subs(表达式,要替换的变量或式子,代换式)
如何用matlab进行复数运算
a b*i 或 a b*j real(z) imag(z) abs(z) angle(z) conj(z) exp(z)
表示复数a bi 或 a bj 求复数z的实部 求复数z的虚部 求复数z的模 求复数z的辐角, 求复数z的共轭复数 复数的指数函数,表示e^z 如何在matlab中表示集合
[a, b, c,…] 表示由a, b, c,…组成的集合 (注意:元素之间也可用空格隔开) unique(A) 表示集合A的最小等效集合(每个元素只出现一次) 也可调用maple的命令,格式如下:
maple('{a, b, c,…}') 表示由a, b, c,…组成的集合 下列命令可以生成特殊的集合:
maple(‘{seq(f(i),i=n..m)}’) 生成集合{f(n), f(n 1), f(n 2), … , f(m)}
如何用Matlab求集合的交集、并集、差集和补集
我们也可以调用Maple的相应功能,调用方法如下: maple('用Maple求集合的交集、并集、差集和补集的命令 ') 具体地说,共有下列几个调用命令:
篇三:《Matlab如何调用其他m文件中的函数》
我们若可以根据需要建立自己的函数文件,他们能够像库函数一样方便地调用,从而极大地扩展MATLAB地能力.
如果对于一类特殊地问题,建立起来许多函数M文件,就能最终形成独立地工具箱.{matlab中调用一个常量}.
1.函数M文件地基本用法
function 因变量=函数名 (自变量)
其它各行为从自变量计算因变量地语句,并最终将结果赋予因变量.
这个M文件地文件名最好是 函数名.m
function a = randint (m, n)
% RANDINT Randomly generated integral matrix
a = floor (10*rand(m,n))
当需要一个这样地2*3随机矩阵时,只需
>>x=randint(2,3)
x= 9 6 8
2 4 7
2.函数M文件有多个因变量
要用[]将他们括起来,请看下例:
function [mean, stdev] = stat(x)
% STAT Mean and standard deviation
[m n] = size(x);
if m =1
m=n
end
mean= sum(x)/m;
stdev=sqrt(sum(x^2)/m-mean^2)
其用途,如求一个数组X地平均值和均方差,只需:
>>x= [ 2 4 -7 0 5 -1];
[xm.xd]=stat(x)
xm=0. 5
xd=3.9476
篇四:《matlab中调用C代码》
如果我有一个用C语言写的函数,实现了一个功能,如一个简单的函数:
double add(double x, double y)
{
return x y;
}
现在我想要在Matlab中使用它,比如输入:
>> a = add(1.1, 2.2)
3.3000
要得出以上的结果,那应该怎样做呢?
解决方法之一是要通过使用MEX文件,MEX文件使得调用C函数和调用Matlab的内置函数一样方便。MEX文件是由原C代码加上MEX文件专用的接口函数后编译而成的。可以这样理解,MEX文件实现了一种接口,它把在Matlab中调用函数时输入的自变量通过特定的接口调入了C函数,得出的结果再通过该接口调回Matlab。该特定接口的操作,包含在mexFunction这个函数中,由使用者具体设定。
所以现在我们要写一个包含add和mexFunction的C文件,Matlab调用函数,把函数中的自变量(如上例中的1.1和2.2)传给 mexFunction的一个参数,mexFunction把该值传给add,把得出的结果传回给mexFunction的另一个参数,Matlab通过该参数来给出在Matlab语句中调用函数时的输出值(如上例中的a)。{matlab中调用一个常量}.
值得注意的是,mex文件是与平台有关的,以我的理解,mex文件就是另类的动态链接库。在matlab6.5中使用mex -v 选项,你可以看到最后mex阶段有类似如下的信息:
--> "del _lib94902.obj"