left函数未定义_请求指导。未定义函数或变量'left_multiplication'

使用的是64位2018a版本的matlab,64位win10系统。想做一个圆柱类工件定位误差补偿的仿真,程序是论文上找的,因为解决方法类似想参考一下。

出现错误:未定义函数或变量'left_multiplication'

位置:46行,S=left_multiplication(A1,T1)

已尝试过的方法:因为是两个矩阵相乘,所以改成过  S=A1*T1  和  S=A1.*T1  ,但是运行还是出错;

也把  A1=cat(1,X1,Y1,Z1,E)  改为  A1=[X1;Y1;Z1;E]  后运行,也是出错。

请求各位指导。

程序代码复制代码

N=64;%N为采样点数

j=1:N;

R2j=10+1.2*cos(2*pi.*j/N)-0.8*sin(2*pi.*j/N)+0.1*sin(2*2*pi.*j/N)+0.2*cos(3*2*pi.*j/N)-0.6*cos(6*2*pi.*j/N)+0.3*sin(13*2*pi.*j/N)+0.7*cos(2*2*pi.*j/N);

R3j=10+2*cos(2*pi.*j/N)-1*sin(2*pi.*j/N)+0.1*sin(2*2*pi.*j/N)-0.6*cos(6*2*pi.*j/N)+1.5*cos(2*2*pi.*j/N);

%拟合第2、3截面最小二乘圆心

a2=subs(2/N.*sum((R2j).*cos(2*pi.*j/N)))

b2=subs(2/N.*sum((R2j).*sin(2*pi.*j/N)))

a3=subs(2/N.*sum((R3j).*cos(2*pi.*j/N)))

b3=subs(2/N.*sum((R3j).*sin(2*pi.*j/N)))

%绘图

figure(1);

polar(2*pi.*j/N,R3j,'-k')

hold on

polar(2*pi.*j/N,R2j,'-b')

hold on

%求解第1截面偏心坐标

c3=20;

c2=10;

a1=a2-(a3-a2)*c2/(c3-c2)

b1=b2-(b3-b2)*c2/(c3-c2)

c1=0

%第1截面偏心距

e1=(a1.^2+b1^2).^0.5

%设定第1截面轮廓曲线

R1j=10+a1*cos(2*pi.*j/N)+b1*sin(2*pi.*j/N)+0.1*sin(2*2*pi.*j/N)+0.2*cos(3*2*pi.*j/N)-0.5*cos(6*2*pi.*j/N)+0.1*sin(13*2*pi.*j/N)+0.5*cos(2*2*pi.*j/N);

polar(2*pi.*j/N,R1j,'-r')

hold on

legend('第3截面','第2截面','第1截面');

text(a3,b3,'o','color','k')

text(a2,b2,'o','color','b')

text(a1,b1,'o','color','r')

%计算原始截面圆度误差

bre_max=max(R1j);

bre_min=min(R1j);

before_re=bre_max-bre_min

eval(before_re)

%构建平移矩阵

T1=[1,0,0,-a1;0,1,0,-b1;0,0,1,c1;0,0,0,1];

z1=0;

X1=R1j.*cos(2*pi.*j/N)

Y1=R1j.*sin(2*pi.*j/N)

Z1=zeros(1,64);

E=ones(1,64);

A1=cat(1,X1,Y1,Z1,E)

%原始截面平移变换

S=left_multiplication(A1,T1)

k=S(1,1:64);

w=S(2,1:64);

polar(2*pi.*j/N,R1j,'-k')

hold on

text(a1,b1,'o','color','k')

plot(k,w,'xb')

hold on

text(0,0,'o','color','r')

%计算轴线方向向量及夹角

cos(theta3)=((a3-a2)*0+(b3-b2)*0+(c3-c2)*1)/((a3-a2)^2+(b3-b2)^2+(c3-c2)^2)^(1/2)

eval(cos(theta3))

theta3=acos(cos(theta3))

eval(theta3)

cos(theta1)=0.08218316316803257332767951545195

cos(theta2)=((a3-a2)*1+(b3-b2)*0+(c3-c2)*0)/((a3-a2)^2+(b3-b2)^2+(c3-c2)^2)^(1/2)

eval(cos(theta2))

cos(theta)=cos(theta2)/cos(theta1)

sin(theta)=sin(acos(cos(theta)))

%构建绕Z轴旋转矩阵

T2=[cos(theta),sin(theta),0,0;-sin(theta),cos(theta),0,0;0,0,1,0;0,0,0,1]

%绕Z轴旋转

S1=T2*S

%构建绕Y轴旋转矩阵并旋转

T3=[eval(cos(theta3)),0,-sin(theta3),0;0,1,0,0;sin(theta3),0,eval(cos(theta3)),0;0,0,0,1]

S2=T3*S1

h=S2(1,1:64);

i=S2(2,1:64);

%构建绕Z轴旋转矩阵并旋转

S3=T4*S2

p=S3(1,1:64);

q=S3(2,1:64);

%输出图形对比

plot(p,q,'*r')

hold on

legend ('第1截面','偏心补偿截面','偏心倾斜补偿截面');

figure(3);

polar(2*pi.*j/N,R1j,'--k')

hold on

plot(k,w,'*r')

hold on

legend ('第1截面','偏心补偿截面');

text(a1,b1,'o','color','k')

text(0,0,'o','color','r')

%计算偏心倾斜补偿后圆度误差

are_max = max((q.^2+p.^2).^(1/2));

are_min = min((q.^2+p.^2).^(1/2));

after_re = are_max-are_min

eval(after_re)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值