📄 zhuanxiangjigou.m
字号:
amin=80;
amax=150;
bmin=250;
bmax=320;
emin=60;
emax=100;
K=1274;
T=2340;
M=624;
H=31;
Bxmin=42;
ABmax=28/180*pi; %已知条件
j=1; %记录有效数据个数
for(i=1:1:1000000) %随机取数次数
a=amin+(amax-amin)*rand(1,1);
b=bmin+(bmax-bmin)*rand(1,1);
e=emin+(emax-emin)*rand(1,1); %随机取a,b,e
A1=K-M;
B1=2*e;
C1=-(((K-M)/2)^2+a^2+e^2-b^2)/a; %求f0对应的参数
for(k=1:1:2) %f0有两解
if(A1^2+B1^2-C1^2>=0)
f0=2*atan((B1+(-1)^k*sqrt(A1^2+B1^2-C1^2))/(A1-C1));
if(f0>=0)
A2=2*a*((K-M)/2-H);
B2=2*a*e;
C2=b^2-e^2-a^2-((K-M)/2-H)^2; %求Amax对应的参数
A3=2*a*((K-M)/2+H);
B3=2*a*e;
C3=b^2-e^2-a^2-((K-M)/2+H)^2; %求Bmax对应的参数
for(m=1:1:2) %Amax有两解
for(n=1:1:2) %Bmax有两解
if((A2^2+B2^2-C2^2>=0)&&(A3^2+B3^2-C3^2>=0))
Amax=2*atan((B2+(-1)^m*sqrt(A2^2+B2^2-C2^2))/(A2-C2))-f0;
Bmax=f0-2*atan((B3+(-1)^n*sqrt(A3^2+B3^2-C3^2))/(A3-C3));
if ((Amax>0)&&(Bmax>0)&&(Bmax>Amax)) %右转的情况
if((Bmax>ABmax)) %由28度控制行程
Bmax=28/180*pi;
H1=-(K-M)/2+a*cos(f0-Bmax)+sqrt(b^2-(a*sin(f0-Bmax)-e)^2);
A5=2*a*((K-M)/2-H1);
B5=2*a*e;
C5=b^2-e^2-a^2-((K-M)/2-H1)^2;
for(r=1:1:2)
Amax1=2*atan((B5+(-1)^r*sqrt(A5^2+B5^2-C5^2))/(A5-C5))-f0;
if((Amax1>0)&&(Amax1<Bmax))
Amax=Amax1;
end
end
n=fix(Amax/pi*180);
rmin1=acos((a^2+b^2-e^2-((K-M)/2-H1)^2)/(2*a*b))/pi*180;
rmin2=acos((a^2+b^2-e^2-((K-M)/2+H1)^2)/(2*a*b))/pi*180;
smax=H1;
else %行程控制角度
n=fix(Amax/pi*180);
rmin1=acos((a^2+b^2-e^2-((K-M)/2-H)^2)/(2*a*b))/pi*180;
rmin2=acos((a^2+b^2-e^2-((K-M)/2+H)^2)/(2*a*b))/pi*180;
smax=H;
end
Bx=a*cos(Amax+f0);
if((Bx>=Bxmin)&&(rmin1>=35)&&(rmin2>=35)&&(smax<=31)) %干涉与传动条件
for(v=1:1:2) %f有两解
p1=0; %转角误差初始值
t=0;
for(w=1:1:n) %角度离散化,步长为1
s=(K-M)/2-a*cos(w/180*pi+f0)-sqrt(b^2-(a*sin(w/180*pi+f0)-e)^2);
A4=-2*a*((K-M)/2+s);
B4=-2*a*e;
C4=((K-M)/2+s)^2+a^2+e^2-b^2; %求f的参数
if(A4^2+B4^2-C4^2>=0)
f=2*atan((B4+(-1)^v*sqrt(A4^2+B4^2-C4^2))/(A4-C4));
if(f>=0)
g1=f0-f;
g2=acot(cot(w/180*pi)-K/T);
g=(g1-g2)/pi*180;
p1=p1+g^2; %累加误差
t=t+1;
end
end
end
if(t==n) %记录合理的有关数据
p(j)=p1;
a1(j)=a;
b1(j)=b;
e1(j)=e;
f01(j)=f0;
n1(j)=n;
maxa(j)=Amax;
maxb(j)=Bmax;
smax1(j)=smax;
v1(j)=v;
j=j+1;
end
end
end
end
end
end
end
end
end
end
end
kk=size(p);
pp=p(1);
min1=1;
for(t=2:1:kk(1,2)) %查找最小的误差
if(pp>p(t))
pp=p(t);
min1=t;
end
end
a=a1(min1);
b=b1(min1);
e=e1(min1); %最优的a,b,e
f0=f01(min1);
Amax=maxa(min1)/pi*180;
Bmax=maxb(min1)/pi*180;
Smax=smax1(min1); %最优值对应的参数
n=n1(min1)/180*pi;
v=v1(min1);
i=1;
for(w=0.001:0.001:n)
s=(K-M)/2-a*cos(w+f0)-sqrt(b^2-(a*sin(w+f0)-e)^2);
A=-2*a*((K-M)/2+s);
B=-2*a*e;
C=((K-M)/2+s)^2+a^2+e^2-b^2;
f1=2*atan((B+(-1)^v*sqrt(A*A+B*B-C*C))/(A-C));
f2=f0-f1;
f(i)=f2-acot(cot(w)-K/T);
i=i+1;
end
w=[0.001:0.001:n];
plot(w/pi*180,f/pi*180,'r*'); %画误差曲线
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -