java 调用自定义函数_Matlab中函数的自定义和调用问题(如何调用自定义函数)...

下面是matlab中几种常用的函数定义和调用方法:

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’);

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的数值运算内核的,所以它的运算速度较快,程序效率更高。缺点是,该方法只能对数值进行代入,不支持符号代入,且对定义后的函数不能进行求导等符号运算。

例:

Clear

Clc

f=’x^2’;

Syms x g;

g=x^2;

h=inline(‘x^2’,’x’);

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’)

注:优点是,占用内存最少,定义格式方面自由。缺点是,无法对字符进行符号转化。

当所要替代的符号在调用前都已经有了数值定义,则可以直接调用:subs(f).

例如:f=’x^2*y’;

x=2;y=3;

subs(f)

ans=12

========================================================================================

另外:

函数调用是使主程序简明清晰的重要工具,在很大程度上简化了程序的复杂程度,也方便于不同程序使用相同模块的调用。

下面主要介绍:

函数文件+调用命令文件:

需单独定义一个自定义函数的M文件这种方法很简单,定义好输入输出就可以自由调用函数。

(1)定义函数

新建一个m文件在m文件里面第一行输入function [输出值]=(任何字母)(输入变量),输入变量和输出值个数不限,根据自己需要定义,接着定义你要实现的功能,最后保存这个m文件,注意:这个m文件的名字就是后面程序调用的名称,同时主程序和函数文件必须保存在同一个文件夹中,而且可以在函数中再嵌套其它函数。

(2)调用函数

[输出值]=函数保存的文件名(输入变量)

注意,如果输出值只有一个,可以不用中括号,如果两个以上就不必须使用,否则只输出第一个值,而且采用小括号会报错。

实例:

编写一个解方程的程序:

例如求方程的根,

定义函数:

function [x,y]=equal(a,b,c)

d=b^2-4*a*c;

x=(-b+sqrt(d))/(2*a);

y=(-b-sqrt(d))/(2*a);

文件保存为equal

主程序调用:[r1 r2]=myfunction(2,3,-7)

结果:r1 =1.2656 r2 = -2.7656

还是上面的例子,实现函数中调用函数:

定义函数1:

function [testfun]=supple(j)

testfun =j+5;

保存文件为supple(此处不一定要和函数名相同)

定义函数2:

function [x,y]=equal(a,b,c)

c=supple(c); %调用了一个函数

d=b^2-4*a*c;

x=(-b+sqrt(d))/(2*a);

y=(-b-sqrt(d))/(2*a);

文件保存为equal主程序调用:

[r1 r2]=myfunction(2,3,-12) %(将c有-7改为-12)

结果:r1 =1.2656

r2 = -2.7656 %计算结果相同,说明函数中调用函数成功。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值