【剑指offer】Q41:和为s的连续正数序列

def sumS(s):
	if s <= 0:
		return

	re = []
	first = 1; last = 2; 
	cursum = first + last
	
	while first <= s >> 1:
		if cursum < s:
			last += 1
			cursum += last
		else:
			if cursum == s:
				re.append((first, last))
			cursum -= first
			first += 1
	return re

假设变刚度阻尼双足机器人动力学方程可以表示为: M(q)q'' + C(q, q')q' + K(q)q = f 其中,q是机器人的广义坐标向量,M(q)是质量矩阵,C(q, q')是科里奥利力矩阵,K(q)是刚度矩阵,f是外部力矩向量。 假设我们要求解某个参数p对所有变量的偏导数,那么我们需要先通过ode45求解机器人的运动学方程,得到q和q'随时间的变化情况。然后,我们可以利用MATLAB的符号计算工具箱,对动力学方程进行符号化处理,并求出所有变量的偏导数。具体步骤如下: 1. 定义符号变量 syms q1 q2 q3 q4 q5 q6 q7 q8 q9 q10 q11 q12 q13 q14 q15 q16 q17 q18 q19 q20 q21 q22 q23 q24 q25 q26 q27 q28 q29 q30 q31 q32 q33 q34 q35 q36 q37 q38 q39 q40 q41 q42 q43 q44 q45 q46 q47 q48 q49 q50 p 其中,q1~q50表示机器人的广义坐标,p是我们要求导的参数。 2. 符号化动力学方程 假设我们已经定义好机器人的质量矩阵M,科里奥利力矩阵C,刚度矩阵K和外部力矩向量f,那么我们可以通过如下代码符号化动力学方程: q = [q1; q2; q3; q4; q5; q6; q7; q8; q9; q10; q11; q12; q13; q14; q15; q16; q17; q18; q19; q20; q21; q22; q23; q24; q25; q26; q27; q28; q29; q30; q31; q32; q33; q34; q35; q36; q37; q38; q39; q40; q41; q42; q43; q44; q45; q46; q47; q48; q49; q50]; q_dot = diff(q); q_ddot = diff(q_dot); M = % 定义质量矩阵 C = % 定义科里奥利力矩阵 K = % 定义刚度矩阵 f = % 定义外部力矩向量 D = M*q_ddot + C*q_dot + K*q - f; 3. 求导 接下来,我们可以利用MATLAB的符号计算工具箱对动力学方程进行求导: dD_dp = diff(D, p); 4. 数值化 最后,我们可以将变量q和q'的数值代入到偏导数表达式中,得到p对所有变量的偏导数值: q_val = % 机器人广义坐标向量随时间的变化 q_dot_val = % 机器人广义速度向量随时间的变化 dD_dp_val = double(subs(dD_dp, [q; q_dot], [q_val; q_dot_val])); 其中,subs函数可以将符号变量中的所有数值替换为实际的数值,double函数可以将符号变量转换为双精度数值。最终,dD_dp_val将是一个与q和q'相同维度的向量或矩阵,表示p对所有变量的偏导数值。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值