作业帮 > 综合 > 作业

Matlab 函数M文件 转化 匿名函数以及函数句柄

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/05/29 15:29:07
Matlab 函数M文件 转化 匿名函数以及函数句柄
例 ode45解常微分方程组

一般解法:[t,x]=ode45(fun,[t0 td],x0);
function dx=fun(t,x)
dx(1)=2x(1)+x(2);
dx(2)=-3x(1)-2x(2);
end
若写到一个M文件里,怎么表达?
fun=@(t,x) [2*x(1)+x(2);-3*x(1)-2*x(2)];
再问: 如果不用ode45 用自己编的函数
[T1,F1]=runge_kutta1(@fun,x0,t0);
1.为什么要加句柄符号@呢?2.这种情况怎样改写到一个文件里面
再答: 无论是用系统的ode45或者你自己写的函数
如果你想将一个函数作为参数传递给另一个函数使用
例如,你要把函数fun,传递给ode45,告诉ode45我需要你按照fun这个函数去计算
你就需要把函数的句柄传递给ode45
所以你问题中的写法是有问题的
如果你定义了一个fun.m文件,内容是你的微分方程
你应该用
[t,x]=ode45(@fun,[t0 td],x0);
意思是将fun函数的句柄传递给ode45,
然后ode45就会去调用fun函数

你还可以用
[t,x]=ode45('fun',[t0 td],x0);
将函数名传递给ode45,
其实在ode45内部,会根据你给的名字'fun'去找这个函数去调用

如果你不想另外定义一个函数文件fun.m
那么可以用匿名函数也就是你可以写

fun=@(t,x) [2*x(1)+x(2);-3*x(1)-2*x(2)];

[t,x]=ode45(fun,[t0 td],x0);

因为你的微分方程就是简单的两句,所以用匿名函数更方便,不用另外保存一个fun.m文件
但是这时候[t,x]=ode45(fun,[t0 td],x0);里面就不用@fun了
这是因为这里fun就是一个函数句柄
所谓的匿名函数就是没有函数名字的函数,这里的fun就是这个函数的句柄
为了避免变量名字的混淆,或者我们换个写法

hanshu=@(t,x) [2*x(1)+x(2);-3*x(1)-2*x(2)];

[t,x]=ode45(hanshu,[t0 td],x0);
这两句和之间两句完全是一样的,我们只是换了个变量名