为弹簧质量力量创建python代码

时间:2018-02-13 22:18:30

标签: python algorithm physics

我正在尝试创建一个能够计算F1 + F2 + Gravity力的总和的函数。根据我的计算,我想要创建的公式是 Here

到目前为止,我已经完成了基础知识 -

import numpy

#varibles from example problem
a1 = numpy.array([0,0])
a2 = numpy.array([1,1])
s1,s2 = 10,10 
L1,L2=1,2
m=1
def SpringForces(a1,a2,s1,s2,l,m):
    G = numpy.array([0,-9.81*m]) 
    #algorithm
    return F1+F2+G 

我真的不确定从哪里开始创建公式。我应该为k等于1和2创建一个小的for循环吗?

编辑: 我的新代码是

  def SpringForces(a1,a2,s1,s2,L1,L2,m):
    G = numpy.array([0,-9.81*m]) 
    F1 = s1 * ((L1)/numpy.abs(x-a1)-1) * (x-a1)
    F2 = s2 * ((L2)/numpy.abs(x-a2)-1) * (x-a2)
    return F1+F2+G 

2 个答案:

答案 0 :(得分:2)

你应该定义你的SpringForce函数来单独计算每个弹簧力,然后在最后加上力。

def springForce(x, s, a, l):
    return s*((l/abs(x-a))-1)*(x-a)

F = springForce(x, s1, a1, l1) + springForce(x, s2, a2, l2) + G

值得注意的是,您在初始代码示例中对函数所做的操作有点无意义。您可能想要创建一个函数有两个原因:

  1. 避免多次重复完全相同的代码
  2. 抽象出代码块,可能提高可读性
  3. 你写的函数没有做这两件事,所以没有它你会更好。

答案 1 :(得分:0)

此时,您应该使用循环,因为您没有任何可以轻松迭代的结构。如果您将下标元素(例如s1, s2)转换为数组或列表而不是附加变量名称,那么然后就可以利用循环。但是,对于仅仅两个元素,我建议你分别编写每个方程。当你对构造更加熟悉时进行概括。