作业帮 > 综合 > 作业

Matlab中@的用法

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/04/29 18:06:32
Matlab中@的用法
这是一段Matlab程序,请问其中 x=fsolve(@qbyg,x0); 是什么意思?Matlab中函数调用不是y=f(x)(y是输出,f是函数名,x是输入参数)这种形式么?请大神帮忙看看.
% 给定机构极限位置和最小传动角的铰链四杆机构运动设计(调用qbyg.m)
x0=[50 120 200 0.5];
k=1.25; % 行程速比系数
theta=pi*(k-1)/(k+1); % 极位夹角
yg=250; % 摇杆长度
psi=pi/6; % 摇杆摆角
gamin=2*pi/9; % 最小传动角
x=fsolve(@qbyg,x0);
disp ' '
fprintf (' 曲柄长度 a = %3.4f mm \n',x(1))
fprintf (' 连杆长度 b = %3.4f mm \n',x(2))
fprintf (' 机架长度 d = %3.4f mm \n',x(3))
fprintf (' 摇杆位置角 psi0 = %3.4f ° \n',x(4)*180/pi)
% 铰链四杆机构非线性参数方程组
function f=qbyg(x)
k=1.25; % 行程速比系数
theta=pi*(k-1)/(k+1); % 极位夹角
yg=250; % 摇杆长度
psi=pi/6; % 摇杆摆角
gamin=2*pi/9; % 最小传动角
% x(1)是曲柄长度;x(2)是连杆长度;x(3)是机架长度;x(4)是摇杆初始位置角
f1=(x(2)+x(1))^2+(x(2)-x(1))^2-2*(x(2)+x(1))*(x(2)-x(1))*cos(theta)-(2*yg*sin(psi/2))^2;
f2=yg^2+x(3)^2-2*yg*x(3)*cos(x(4))-(x(2)-x(1))^2;
f3=yg^2+x(3)^2-2*yg*x(3)*cos(x(4)+psi)-(x(2)+x(1))^2;
f4=yg^2+x(2)^2-2*yg*x(2)*cos(gamin)-(x(3)-x(1))^2;
f=[f1;f2;f3;f4];
还有这后面定义的qbyg这个函数是什么情况?输入是什么,输出又是什么,如果要单独运行,应该怎么用?
@是用于定义函数句柄的操作符.函数句柄既是一种变量,可以用于传参和赋值;也是可以当做函数名一样使用.
举例:
sin是matlab中的一个函数,但sin只是函数名,还不是函数句柄,不可以用于传参.
f = @sin;
这行代码定义了一个函数句柄,变量名是f.这样就可以当做参数传递了(这就是上面代码中的意义所在),而且还可以跟sin函数按相同的语法规则使用:
g = f; % g也是函数句柄,其“值”和f一样,都代表sin函数
y = g(pi); %可以得到y=0
再问: 请问在上面一段代码中,还有这后面定义的qbyg这个函数是什么情况?输入是什么,输出又是什么,如果要单独运行,应该怎么用?
再答: 我前面解释过了,@sin作为函数和sin的用法完全一样,输入输出一样,“单独”运行的方法也一样。
类似的,@qbyg和qbyg函数是一样的。
function f=qbyg(x)
...

从这一行开始到代码结束定义了函数qbyg。输入x,输出f,x到f的映射关系见函数体。
如果题主是不懂matlab里的函数定义,这是另外一个问题了,请另行提问。