8-四杆机构的运动学参数求解习题-matlab

1.问题描述

image.png

image.png

2. 推导过程

_data_user_0_com.qihui.elfinbook_files_ElfinbookP(1).jpg
_data_user_0_com.qihui.elfinbook_files_ElfinbookP.jpg

image.png

3. matlab代码

最新版代码

直接采用求微分的方式得到角度,角速度等数值解,速度慢,但是代码少,容易看懂(矩阵看起来真难受)。

以前做的一个博客文章用的是矩阵运算求解出线性方程组的方案,速度快,就是代码多一些。


%**********求解四杆机构的运动学参数***************
%1. 固定参数
l1=100 ;%单位:mm
l2=300;
l3=250;
l4=200;
w1=10.17;% rad/s

%定义角度单位换算
hd=pi/180;
jd=180/pi;

% 定义符号变量和有关的函数
syms lbd psi1

lbd(psi1)=sqrt(l4*l4+l1*l1-2*l4*l1*cos(pi-psi1));

syms theta1 theta2

theta1(psi1)= acos((l3*l3+lbd(psi1)*lbd(psi1)-l2*l2)/(2*l3*lbd(psi1)));

theta2(psi1)=asin((l1*sin(pi-psi1))/lbd(psi1)); 
%以上得到的结果均为弧度制

% psi3(psi1)=theta1+theta2;

% w3(psi1)=diff(psi3,psi1)*w1;
w3(psi1)=(diff(theta1,psi1)+diff(theta2,psi1))*w1;

i=1;
psi_1=zeros(1,73);
psi3=zeros(1,73);
w_3=zeros(1,73);

%循环求值
for n=0:5:360	
	%sin ,cos 函数是弧度制单位
	psi_1(i)= n;
	psi1=n*hd;
    
	psi3(i)=theta1(psi1)+theta2(psi1);
	
	w_3(i)=w3(psi1); %unit:rad/s
	
	psi3(i)=psi3(i)*jd; %psi3转为角度制
	
	i=i+1;
end

subplot(2,2,1);
plot(psi_1(:,1:73),psi3(:,1:73),'-b');
title('杆3的角度随\psi_1的变化曲线')
xlim([0 360])
xlabel('\psi_1 /\circ')
ylabel('\psi_3 / \circ')
grid on;

subplot(2,2,2);
plot(psi_1(:,1:73),w_3(:,1:73),'-r')
title('杆3的角速度曲线');
xlabel('角度')
xlim([0 360])
ylabel('角速度/rad\cdots^{-1}')
grid on;

subplot(2,2,[3 4])
[ax,h1,h2]=plotyy(psi_1,psi3,psi_1,w_3);
% 设置label
d1=get(ax(1),'ylabel');%取出左侧轴的ylabel句柄
set(d1,'string','角度值');%设置ylabel的值

d2=get(ax(2),'ylabel');%取出右侧轴的ylabel句柄
set(d2,'string','速度值');%设置ylabel的值

% 设置图例
legend([h1,h2],'角度','角速度');
%设置坐标轴刻度,范围
set(ax,'Xlim',[0 360],'xtick',[0:10:360])

history version

%**********求解四杆机构的运动学参数***************
%1. 固定参数
l1=100 ;%单位:mm
l2=300;
l3=250;
l4=200;
w1=10.17;% rad/s

%定义角度单位换算
hd=pi/180;
jd=180/pi;

% 定义符号变量和有关的函数
syms lbd psi1

lbd(psi1)=sqrt(l4*l4+l1*l1-2*l4*l1*cos(pi-psi1));

syms theta1 theta2

theta1(psi1)= acos((l3*l3+lbd(psi1)*lbd(psi1)-l2*l2)/(2*l3*lbd(psi1)));

theta2(psi1)=asin((l1*sin(pi-psi1))/lbd(psi1)); 
%以上得到的结果均为弧度制

i=1;
psi_1=zeros(1,74);
psi3=zeros(1,74);
psi2=zeros(1,74);

%循环求值
for n=0:5:360	
	%sin ,cos 函数是弧度制单位
	psi_1(i)= n;
	psi1=n*hd;
    
	psi3(i)=theta1(psi1)+theta2(psi1);
	
	psi2(i)=asin((l3*sin(psi3(i))-l1*sin(psi1))/l2);
    psi2(i)=psi2(i)*jd; %弧度制转角度制
	psi3(i)=psi3(i)*jd;
	i=i+1;
end

plot(psi_1(:,1:73),psi3(:,1:73),'-b');
title('\psi_3')
xlim([0 360])
xlabel('\psi_1 /\circle')
ylabel('\psi_1&\psi-2  /\circ')
ylim([-360 360])
grid on;
hold on;
plot(psi_1(:,1:73),psi2(:,1:73),'-.r');

结果-速度图&角位移图

image.png

<think>好的,用户想学习Transformer模型,我需要根据提供的引用内容来构建一个结构清晰的回答。首先,要确保回答符合系统级指令,比如正确使用数学格式和引用标识。用户提到了几个引用,我需要从中提取相关信息。 首先,用户可能对Transformer的基本结构不太了解,需要从基础讲起。引用[2]和[3]提到了Transformer结构,特别是自注意力机制和多头注意力,这部分应该放在前面。然后,引用[4]解释了查询、键、值向量的生成,这部分可以作为自注意力的具体实现细节。 接下来,用户可能需要学习路径的建议。我应该分步骤,比如先理解基础概念,再学习数学原理,然后实战应用。引用[1]提到BERT、GPT等模型,可以作为进阶学习的例子,说明Transformer的应用广泛。 数学部分要注意使用$$...$$格式,比如自注意力公式。同时要确保代码示例正确,可能引用[3]的实战部分,但用户提供的引用中没有具体代码,可能需要避免假设,或者建议参考相关教程。 用户的问题还可能涉及如何应用Transformer到不同领域,比如NLP和CV,引用[1]提到ViT和Swin Transformer,可以在这里举例说明。 最后,生成的相关问题需要与学习Transformer相关,比如数学基础、多头注意力的作用、与RNN的对比、应用场景和优化方法。这些问题应基于回答内容,帮助用户深入理解。 需要检查引用是否正确添加,比如引用[3]提到Transformer结构行性优势,引用[4]解释QKV向量。确保每个引用标识自然放置在相关段落末尾。 可能用户是初学者,所以步骤要详细,从基础到进阶,理论加实践。同时,要推荐学习资源,如论文和实战教程,引用提供的资料可以作为推荐的一部分。 总结回答结构:基础概念、核心结构、数学原理、学习路径、实战建议、应用领域,最后相关问题。这样逐步引导用户,确保逻辑清晰,引用正确,符合用户需求。</think>### 分步学习Transformer模型的指南 #### 1. **基础概念理解** - **自注意力机制**是Transformer的核心创新,通过计算输入序列中每个词与其他词的关系权重,实现全局依赖性建模。例如,句子中的"it"可能通过注意力机制关联到前文的关键名词[^4]。 - **行计算优势**:相比RNN的序列处理,Transformer行计算所有位置的注意力权重,大幅提升训练效率[^3]。 #### 2. **核心结构解析(附数学原理)** 完整Transformer结构包含编码器(Encoder)和解码器(Decoder),以下为编码器的数学表达: $$ \text{MultiHead}(Q,K,V) = \text{Concat}(\text{head}_1,...,\text{head}_h)W^O \\ \text{其中} \ \text{head}_i = \text{Attention}(QW_i^Q, KW_i^K, VW_i^V) $$ 式中$W_i^Q, W_i^K, W_i^V$为参数矩阵,$h$代表注意力头数量[^2][^4]。 #### 3. **学习路径建议** 1. **前置知识** - 掌握矩阵运算($softmax$, 矩阵乘法) - 理解词嵌入(Word Embedding)技术 - 熟悉残差连接与层归一化 2. **关键论文研读** - 精读《Attention Is All You Need》原文(含完整架构图) - 延伸阅读BERT、GPT论文,理解变体差异[^1] 3. **代码实践阶段** ```python # 自注意力简化实现(PyTorch示例) import torch.nn as nn class SelfAttention(nn.Module): def __init__(self, embed_size, heads): super().__init__() self.embed_size = embed_size self.heads = heads self.head_dim = embed_size // heads self.values = nn.Linear(self.head_dim, self.head_dim, bias=False) self.keys = nn.Linear(self.head_dim, self.head_dim, bias=False) self.queries = nn.Linear(self.head_dim, self.head_dim, bias=False) self.fc_out = nn.Linear(heads * self.head_dim, embed_size) ``` #### 4. **应用领域扩展** - **跨模态应用**:CLIP模型将Transformer应用于图文匹配[^1] - **计算机视觉**:ViT(Vision Transformer)将图像分块处理为序列[^1] - **工业级优化**:研究模型压缩技术如知识蒸馏、量化
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值