首页/文章/ 详情

基于函数式编程思想的有限元编程(一)

1月前浏览477

reduce函数是Python内置的高阶函数之一,它在函数式编程中具有重要作用。reduce函数接受两个参数:一个二元操作函数和一个可迭代对象。它对可迭代对象中的元素依次进行二元操作,并返回最终的结果。

from functools import reduce

# 二元操作函数:求两个数的和
def add(x, y):
    return x + y

# 要进行操作的可迭代对象
numbers = [12345]

# 使用reduce函数求可迭代对象中所有元素的和
result = reduce(add, numbers)
print("Sum of numbers:", result) 
# 输出:Sum of numbers: 15

add(x, y)第一次调用的参数是numbers[0]和numbers[1],返回值是add1。add(x, y)第二次调用的参数是上一次的返回值add1和numbers[2],返回值是add2。以此类推。

如果numbers列表中的对象是一维或二维数组,add函数则可以将数组中对应的元素相加。

from functools import reduce
import numpy as np

# 二元操作函数:求两个数的和
def add(x, y):
return x + y

a1 = np.array([ [0,0],[0,1] ])
a2 = np.array([ [1,0],[0,1] ])
a3 = np.array([ [0,0],[1,1] ])
numbers = [a1, a2, a3]

result = reduce(add, numbers)

b1 = np.array( [0,1] )
b2 = np.array( [1,0] )
b3 = np.array( [1,1] )
numbers = [b1, b2, b3]
result = reduce(add, numbers)

这个操作正好用来组装刚度矩阵和整体节点力向量。

map函数也是一个高阶函数,典型的调用方式为

l = [1,2,3,4,5]
a = map( lambda x: x*3, l)

其参数中包含一个函数,一个可迭代对象。若map函数的第二个参数是单元对象的列表,第一个参数(函数)返回一个和整体刚度矩阵大小相同的矩阵,该矩阵的意义是其中一个单元的刚度对整体刚度矩阵的贡献。然后再用reduce函数将这些矩阵各元素分别相加,得到最终的整体刚度矩阵。求整体节点力向量也是同样的思路。

# 单元类
class Element:
    pass

e1 = Element()
e2 = Element()
e3 = Element()
e4 = Element()

Elist = [e1,e2,e3,e4]

a = map(assemble_stiffness, Elist )

K = reduce(lambda x,y: x+y, a)

map函数返回的是可迭代对象,具有惰性求值的特征,它会在需要时才计算下一个结果。还有就是其中的元素只能使用一次。

import  sys
l1 = [1,2,3,4,5]
a = map( lambda x: x*3, l1)
# lambda函数将列表中的每一个元素乘以3 
print( sys.getsizeof(a) )
# 输出的结果是48

l2 = [1,2,3,4,5,7,8,9]
b = map( lambda x: x*3, l2)
print( sys.getsizeof(b) )
# 可迭代列表加长,输出的结果还是48


来源:数值分析与有限元编程
pythonUM
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2024-10-26
最近编辑:1月前
太白金星
本科 慢慢来
获赞 5粉丝 15文章 327课程 0
点赞
收藏
作者推荐

力学概念| 能量法求结构的固有频率

结构发生自由振动时,各质点离开原静力平衡位置作往复运动,待质点位移达到最大时,结构势能达到最大值,这时结构的动能 为零(速度等于零)。当结构各质点通过静力平衡位置时,则结构的动能具有最大值(速度最大),而结构的势能为零。忽略阻尼影响,由能量守恒原理,最大动能值应等于最大势能值,由此可计算结构固有频率 。固有频率 是与结构本身的质量 大小和截面惯性矩及跨度有关的固有特征。▲图1如图1所示,简支梁在平面内的动位移为 简支梁的动能为 处于平衡位置时(即 )最大动能为: 梁的势能随着杆的振动变形而改变,忽略剪切影响,其弯曲应变能 由 得弯曲应变能最大值 由 ,可得固有频率 对于多跨连续梁体系,应使任意相邻两跨挠度曲线方向相反,再按这种状态设定荷载,进而得出一阶振形 近似表达式,用此曲线决定结构的第一频率是可行的。而对于单跨梁,除了自重作用下的挠度曲线外,另外的荷载工况作用下的挠度曲线也可近似看作一阶振形 。例如悬臂梁在自由端集中荷载作用下的挠度曲线.来源:数值分析与有限元编程

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习 福利任务 兑换礼品
下载APP
联系我们
帮助与反馈