在simulink中利用Matlab function模块求变量偏导数

假设已知一个多输入函数MATLAB function为:

function y=fun(u,v,w),

y=u*v*w;

end;

现要求输出y关于u的偏导数值

首先在另外一个m文件中利用diff函数求出偏导数的表达式

syms u v w;

y=fun(u,v,w);

dy_du=diff(y,u);

运行该文件即可得到y关于u的偏导数表达式:dy_du=v*w;

将表达式复制到MATLAB function中

function [y,dy_du]=fun(u,v,w);

y=u*v*w;

dy_du=v*w;

end

 如下面这个轮胎模型的MATLAB function,要利用该模型得到Fx和Fy对滑移率s的偏导数

function [Fyrr,Fxrr]= fcn(Fzrr,alfa4,Srr,urr,mu)
% This block supports an embeddable subset of the MATLAB language.
% See the help menu for details. 
epsilon=0.015;
Ca=30000;
Cs=50000;
Lamda=mu*Fzrr*(1-epsilon*urr*sqrt(Srr^2+(tan(alfa4))^2))*(1-Srr)/(2*sqrt(Cs^2*Srr^2+Ca^2*(tan(alfa4))^2));
if Lamda<1
    f=Lamda*(2-Lamda);
else
    f=1;
end
Fyrr=Ca*tan(alfa4)*f/(1-Srr);
Fxrr=Cs*Srr*f/(1-Srr);

在另外的m文件中运行得到偏导数的表达式

syms Fzrr alfa4 Srr urr mu
epsilon=0.015;
Ca=30000;
Cs=50000;
Lamda=mu*Fzrr*(1-epsilon*urr*sqrt(Srr^2+(tan(alfa4))^2))*(1-Srr)/(2*sqrt(Cs^2*Srr^2+Ca^2*(tan(alfa4))^2));

    f=Lamda*(2-Lamda);
    Fyrr=Ca*tan(alfa4)*f/(1-Srr);
    Fxrr=Cs*Srr*f/(1-Srr);
    dFx_ds=diff(Fxrr,Srr);
    dFy_ds=diff(Fyrr,Srr);

得到表达式为:

dFx_ds =
 
(5*Fzrr*mu*((Fzrr*mu*(Srr - 1)*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1))/(20000*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)) - 2)*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1))/(2*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)) + (5*Fzrr*Srr*mu*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1)*((Fzrr*mu*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1))/(20000*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)) - (Fzrr*Srr*mu*(Srr - 1)*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1))/(800*(25*Srr^2 + 9*tan(alfa4)^2)^(3/2)) + (3*Fzrr*Srr*mu*urr*(Srr - 1))/(4000000*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)*(Srr^2 + tan(alfa4)^2)^(1/2))))/(2*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)) - (125*Fzrr*Srr^2*mu*((Fzrr*mu*(Srr - 1)*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1))/(20000*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)) - 2)*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1))/(2*(25*Srr^2 + 9*tan(alfa4)^2)^(3/2)) + (3*Fzrr*Srr^2*mu*urr*((Fzrr*mu*(Srr - 1)*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1))/(20000*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)) - 2))/(80*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)*(Srr^2 + tan(alfa4)^2)^(1/2))
 
>> dFy_ds
 
dFy_ds =
 
(3*Fzrr*mu*tan(alfa4)*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1)*((Fzrr*mu*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1))/(20000*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)) - (Fzrr*Srr*mu*(Srr - 1)*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1))/(800*(25*Srr^2 + 9*tan(alfa4)^2)^(3/2)) + (3*Fzrr*Srr*mu*urr*(Srr - 1))/(4000000*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)*(Srr^2 + tan(alfa4)^2)^(1/2))))/(2*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)) - (75*Fzrr*Srr*mu*tan(alfa4)*((Fzrr*mu*(Srr - 1)*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1))/(20000*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)) - 2)*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1))/(2*(25*Srr^2 + 9*tan(alfa4)^2)^(3/2)) + (9*Fzrr*Srr*mu*urr*tan(alfa4)*((Fzrr*mu*(Srr - 1)*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1))/(20000*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)) - 2))/(400*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)*(Srr^2 + tan(alfa4)^2)^(1/2))
 

将其带入到matlab function中即可

function [Fyrr,Fxrr,dFx_ds_4,dFy_ds_4]= fcn(Fzrr,alfa4,Srr,urr,mu)
% This block supports an embeddable subset of the MATLAB language.
% See the help menu for details. 
epsilon=0.015;
Ca=30000;
Cs=50000;
Lamda=mu*Fzrr*(1-epsilon*urr*sqrt(Srr^2+(tan(alfa4))^2))*(1-Srr)/(2*sqrt(Cs^2*Srr^2+Ca^2*(tan(alfa4))^2));
if Lamda<1
    f=Lamda*(2-Lamda);
    Fyrr=Ca*tan(alfa4)*f/(1-Srr);
    Fxrr=Cs*Srr*f/(1-Srr);
    dFx_ds_4=(5*Fzrr*mu*((Fzrr*mu*(Srr - 1)*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1))/(20000*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)) - 2)*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1))/(2*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)) + (5*Fzrr*Srr*mu*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1)*((Fzrr*mu*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1))/(20000*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)) - (Fzrr*Srr*mu*(Srr - 1)*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1))/(800*(25*Srr^2 + 9*tan(alfa4)^2)^(3/2)) + (3*Fzrr*Srr*mu*urr*(Srr - 1))/(4000000*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)*(Srr^2 + tan(alfa4)^2)^(1/2))))/(2*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)) - (125*Fzrr*Srr^2*mu*((Fzrr*mu*(Srr - 1)*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1))/(20000*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)) - 2)*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1))/(2*(25*Srr^2 + 9*tan(alfa4)^2)^(3/2)) + (3*Fzrr*Srr^2*mu*urr*((Fzrr*mu*(Srr - 1)*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1))/(20000*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)) - 2))/(80*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)*(Srr^2 + tan(alfa4)^2)^(1/2));
    dFy_ds_4=(3*Fzrr*mu*tan(alfa4)*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1)*((Fzrr*mu*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1))/(20000*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)) - (Fzrr*Srr*mu*(Srr - 1)*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1))/(800*(25*Srr^2 + 9*tan(alfa4)^2)^(3/2)) + (3*Fzrr*Srr*mu*urr*(Srr - 1))/(4000000*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)*(Srr^2 + tan(alfa4)^2)^(1/2))))/(2*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)) - (75*Fzrr*Srr*mu*tan(alfa4)*((Fzrr*mu*(Srr - 1)*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1))/(20000*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)) - 2)*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1))/(2*(25*Srr^2 + 9*tan(alfa4)^2)^(3/2)) + (9*Fzrr*Srr*mu*urr*tan(alfa4)*((Fzrr*mu*(Srr - 1)*((3*urr*(Srr^2 + tan(alfa4)^2)^(1/2))/200 - 1))/(20000*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)) - 2))/(400*(25*Srr^2 + 9*tan(alfa4)^2)^(1/2)*(Srr^2 + tan(alfa4)^2)^(1/2));
else
    f=1;
Fyrr=Ca*tan(alfa4)*f/(1-Srr);
Fxrr=Cs*Srr*f/(1-Srr);
dFx_ds_4=(50000*Srr)/(Srr - 1)^2 - 50000/(Srr - 1);
     dFy_ds_4=(30000*tan(alfa4))/(Srr - 1)^2;     
end

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值