MATLAB 函数句柄Function handle的用法(Af = @(x) A*x;)

16 篇文章 0 订阅

       函数句柄(Function handle)是MATLAB的一种数据类型。引入函数句柄是为了使feval及借助于它的泛函指令工作更可靠;使“函数调用”像“变量调用”一样方便灵活;提高函数调用速度,特别在反复调用情况下更显效率;提高软件重用性,扩大子函数和私用函数的可调用范围;迅速获得同名重载函数的位置、类型信息。

       MATLAB中函数句柄的使用使得函数也可以成为输入变量,并且能很方便的调用,提高函数的可用性和独立性。

       例如:

       新建M文件f1.m

function y=f1(X)

x1=X(1);x2=X(2);
y=x1^2+x1*x2;

       新建M文件ftest.m

function Y=ftest(f,X)

syms x1 x2;
F=f([x1,x2]);
v=[x1,x2];
grad=jacobian(F,v);
Y=subs(grad,v,X);

       在MATLAB命令窗口输入Y=ftest(@f1,[2,1]),得到结果:

Y =

     5     2

    此处@f1即为函数f1的句柄,可以用class(@f1)判断变量的类型,得到ans = function_handle即函数句柄。函数ftest是求一个二维函数在指定点的梯度值。我们可以替换目标函数为f2或其他函数同样可以求得梯度。这样函数ftest就可以适用于任何二维函数而不必做改动了。

  • 5
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
matlab程序:%cf对应的af不唯一,取af大于零的时候 ar=0:0.5:10; syms x assume(x>0) %根据魔术公式求导得到ar-cr的关系,求的cr,cf a0=1.5999;a1=-0.0048;a2=0.9328;a3=4.0847;a4=44.8338; a6=-0.0076;a7=-0.1807;a8=-0.0026;a9=0.0367; a11=0.0004;a12=-0.0115;a17=0.0009; F_zr=m*9.8*lf/(lf+lr)/1000; C=a0*(5-a)/4; D2=(a1*(F_zr^2)+a2*F_zr)*a; B2=(a3*sin(2*atan(F_zr/a4))/(C*D2))*(2-a); Sh2=a8*F_zr+a9; E2=(a6*F_zr+a7); cr=(1000*C*D2*cos(C*atan(E2*(atan(B2*ar) - B2*ar) + B2*ar)).*(B2 - E2*(B2 - B2./(B2^2*ar.^2 + 1))))./((E2*(atan(B2*ar) - B2*ar) + B2*ar).^2 + 1); cf=(m*V^2*lr*cr)./(cr*(lf+lr)*(lf+lr)-m*V^2*lf); % 已知参数 F_zf=m*9.8*(lr)/(lr+lf)/1000; D1=(a1*(F_zf^2)+a2*F_zf)*a; B1=(a3*sin(2*atan(F_zf/a4))/(C*D1))*(2-a); E1=a6*F_zf+a7; % 定义af-cf函数 f=@(x)(1000*C*D1*cos(C*atan(E1*(atan(B1*x) - B1*x) + B1*x)).*(B1 - E1*(B1 - B1./(B1^2*x.^2 + 1))))./((E1*(atan(B1*x) - B1*x) + B1*x).^2 + 1) - cf; % 反求af x0=[0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0]+1; af=fsolve(f,x0); %转化为弧度制 af1=af*pi/180;ar1=ar*pi/180; %求得侧偏角和横摆角速度 r=(V*(cetia-af1+ar1))/(lf+lr); betia=(lf*(cetia-af1)-lf*ar1)/(lf+lr); figure(5); plot(betia,r); axis([-40,40,-40,40]); title('betia-r'); xlabel('betia');ylabel('r'); hold on;报错警告: Trust-region-dogleg algorithm of FSOLVE cannot handle non-square systems; using Levenberg-Marquardt algorithm instead. > 位置:fsolve (第 342 行) 位置: untitled2 (第 36 行) No solution found. fsolve stopped because the last step was ineffective. However, the vector of function values is not near zero, as measured by the value of the function tolerance. <stopping criteria details> >> 请修改
06-02
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值