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 (' 行程速比系数 k = %3.4f \n',k)
fprintf (' 极位夹角 theta = %3.4f ° \n',theta*180/pi)
fprintf (' 摇杆长度 yg = %3.4f mm \n',yg)
fprintf (' 摇杆摆角 psi = %3.4f ° \n',psi*180/pi)
fprintf (' 最小传动角 gamin = %3.4f ° \n',gamin*180/pi)
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这个函数是什么情况?输入是什么,输出又是什么,如果要单独运行,应该怎么用?

第1个回答  2014-08-14
@qbyg在MATLAB被称为句柄函数(说法有点~~),主要是为了提高运行效率,因为在MATLAB里对于定义的函数有很多搜索路径,例如会先检查是不是自带的库函数,本程序已写的函数等顺序我有点分不清了,而如果用句柄函数运行就先检查该句柄函数的存储位置。具体怎么用,百度下MATLAB函数句柄,这个讲的还行
http://blog.renren.com/share/232179838/12863842977,,,,,,,,,,,,,,,,,,,,,我知道的不多,你说的单独运行还是要有这段程序的才行
第2个回答  2014-08-14
end就是数组结尾的意思,从a的第一个元素以3为间隔直到a的结尾。0.8147 、0.9134 和0.2785追问

?没看懂……

第3个回答  推荐于2017-09-09
@是用于定义函数句柄的操作符。函数句柄既是一种变量,可以用于传参和赋值;也是可以当做函数名一样使用。
举例:
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里的函数定义,这是另外一个问题了,请另行提问。

本回答被提问者采纳
相似回答