求用MATLAB画三维曲面图,z不是直接就是x,y的函数,而是有其他程序,该怎么画?
functionf=myfun(X)globalKLalphaf=0;sum=0;%X=[a,theta],X(1)=a——梯形臂长,X(2)=theta——梯形底角fo...
function f = myfun(X)
global K L alpha
f = 0;
sum =0;
%X = [a,theta],X(1) = a——梯形臂长,X(2) = theta——梯形底角
for i = 1:26 %此处可根据划分情况变化
beta_1(i) = acot(cot(alpha(i))+K/L); %根据阿克尔曼原理,理论值
beta_e(i) = beta_1(i)*180/pi;
A(i) = -X(1)/K*cos(2*X(2)-alpha(i))+cos(X(2));
B(i)= -X(1)/K*sin(2*X(2)-alpha(i))+sin(X(2));
C(i) = -X(1)/K*cos(2*X(2))+2*cos(X(2))-cos(X(2)-alpha(i));
beta_2(i) = atan(A(i)/B(i)) - asin(C(i)/sqrt(A(i)^2+B(i)^2));
beta_a(i) = beta_2(i)*180/pi; %梯形机构,实际值
error(i) = abs(beta_a(i)-beta_e(i));
if alpha(i) <= 10*pi/180
f(i) = 0.6*error(i);
else
if alpha(i)<= 20*pi/180
f(i) = 0.3* error(i);
else
f(i) = 0.1*error(i);
end
end
sum = sum + f(i);
end
f = sum;
end
注:
K =260;L=400;alpha = linspace(0,25,26);
X(1) = 29*pi/180:0.5*pi/180:39*pi/180;
X(2) = 62*pi/180:0.5*pi/180:75*pi/180;
我想以[X(1),X(2),f]画三维曲面图,f 的确是X(1),X(2) 的函数,但是对每一对[X(1),X(2)],还要使alpha 从0-25赋值,求每个f(i)的值,再求和,才是最终这对[X(1),X(2)]的f值,该怎么画?万谢…… 展开
global K L alpha
f = 0;
sum =0;
%X = [a,theta],X(1) = a——梯形臂长,X(2) = theta——梯形底角
for i = 1:26 %此处可根据划分情况变化
beta_1(i) = acot(cot(alpha(i))+K/L); %根据阿克尔曼原理,理论值
beta_e(i) = beta_1(i)*180/pi;
A(i) = -X(1)/K*cos(2*X(2)-alpha(i))+cos(X(2));
B(i)= -X(1)/K*sin(2*X(2)-alpha(i))+sin(X(2));
C(i) = -X(1)/K*cos(2*X(2))+2*cos(X(2))-cos(X(2)-alpha(i));
beta_2(i) = atan(A(i)/B(i)) - asin(C(i)/sqrt(A(i)^2+B(i)^2));
beta_a(i) = beta_2(i)*180/pi; %梯形机构,实际值
error(i) = abs(beta_a(i)-beta_e(i));
if alpha(i) <= 10*pi/180
f(i) = 0.6*error(i);
else
if alpha(i)<= 20*pi/180
f(i) = 0.3* error(i);
else
f(i) = 0.1*error(i);
end
end
sum = sum + f(i);
end
f = sum;
end
注:
K =260;L=400;alpha = linspace(0,25,26);
X(1) = 29*pi/180:0.5*pi/180:39*pi/180;
X(2) = 62*pi/180:0.5*pi/180:75*pi/180;
我想以[X(1),X(2),f]画三维曲面图,f 的确是X(1),X(2) 的函数,但是对每一对[X(1),X(2)],还要使alpha 从0-25赋值,求每个f(i)的值,再求和,才是最终这对[X(1),X(2)]的f值,该怎么画?万谢…… 展开
2个回答
展开全部
X(1) = 29*pi/180:0.5*pi/180:39*pi/180;
X(2) = 62*pi/180:0.5*pi/180:75*pi/180;
[Y1,Y2] = meshgrid(X(1),X(2)); % 生成画曲面需要的格点
Z = f(Y1,Y2); % 计算格点对应的函数值,如果还有关于alpha取平均这件事,你是可以写在函数f内部进行
surf(Y1,Y2,Z) % 画图
shading interp % surf画图一般是有格线,如果觉得看着不舒服,这句是用来去掉格线,你可以根据需要选择使用
X(2) = 62*pi/180:0.5*pi/180:75*pi/180;
[Y1,Y2] = meshgrid(X(1),X(2)); % 生成画曲面需要的格点
Z = f(Y1,Y2); % 计算格点对应的函数值,如果还有关于alpha取平均这件事,你是可以写在函数f内部进行
surf(Y1,Y2,Z) % 画图
shading interp % surf画图一般是有格线,如果觉得看着不舒服,这句是用来去掉格线,你可以根据需要选择使用
追问
大神,我就是在把关于alpha函数这件事,写进了函数内部,出了问题,才来这里问的啊,你要是不嫌麻烦,可否帮我写下,运行下看看,谢谢。关于alpha函数似乎可以直接粘贴我的程序,只需小改下就可以。
追答
我比较懒,懒得看。。。。你要是写进去会出问题的话,那就这样,写一个函数 g(X,alpha),用来对固定的 alpha 计算,然后用 myfun 循环调用它取平均值。。。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询