频率响应分析在NX NASTRAN中的应用

需积分: 50 27 下载量 44 浏览量 更新于2024-08-08 收藏 7.21MB PDF 举报
"频率响应分析-digital video and hd_ algorithms and interfaces (2nd ed.)" 本文主要探讨了频率响应分析在结构动力学中的应用,特别是在计算稳态震荡激励下的结构动力响应方面。频率响应分析是一种计算方法,用于确定当结构受到特定频率的激励时,其动态特性如何表现。 在频率响应分析中,关键概念包括: 1. 概述:这种分析适用于如偏心旋转部件等系统,分析其在不同转动频率下的响应。负载在频域内明确,可以是外力或强迫运动(如位移、速度和加速度)。 2. 响应结果:计算出的响应包括节点位移、加速度、单元力和应力等,以复数形式表示(实部和虚部)或者通过振幅和相位定义。 3. 数值方法:有两种主要方法,即直接法和模态法。直接法直接解耦合的运动方程,而模态法则先通过模态振型对这些方程进行缩减和解耦,然后组合单个模态响应来得到特定频率的答案。 3.2.2 直接频率响应法: - 动力学方程在此方法中扮演核心角色,复刚度矩阵由PARAM,G 和 GE 卡片在MATi中生成,而不是阻尼矩阵。 - 解决动力学问题时,通过插入角频率ω形成复数形式的方程,再使用类似于静态问题的解法,但涉及复数运算。 3.2.3 模态频率响应法: - 当转换到模态坐标系时,可以解耦合单自由度系统。这种方法允许简化复杂系统的分析,通过叠加单个模态的响应来获取整体响应。 在更广泛的意义上,这个主题与NX NASTRAN分析指南有关,NASTRAN是一个历史悠久的有限元分析软件,起源于1960年代的NASA项目。这种工具在工程界被广泛应用,因为它能提供高效的动态分析,帮助缩短产品开发周期,减少物理测试,降低成本,提高产品质量,并支持优化设计。随着计算机技术的进步,CAE(计算机辅助工程)已经成为产品设计和研发过程中的核心组成部分,其优势包括但不限于虚拟原型测试、减少试验次数、节省成本、提升产品性能预测的准确性以及增强工程可靠性。

ImportError: dlopen(/Users/red/Library/Python/3.9/lib/python/site-packages/_cffi_backend.cpython-39-darwin.so, 0x0002): tried: '/Users/red/Library/Python/3.9/lib/python/site-packages/_cffi_backend.cpython-39-darwin.so' (mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64')), '/System/Volumes/Preboot/Cryptexes/OS/Users/red/Library/Python/3.9/lib/python/site-packages/_cffi_backend.cpython-39-darwin.so' (no such file), '/Users/red/Library/Python/3.9/lib/python/site-packages/_cffi_backend.cpython-39-darwin.so' (mach-o file, but is an incompatible architecture (have 'arm64', need 'x86_64'))thread '<unnamed>' panicked at 'Python API call failed', /Users/runner/.cargo/registry/src/index.crates.io-6f17d22bba15001f/pyo3-0.18.3/src/err/mod.rs:790:5note: run with `RUST_BACKTRACE=1` environment variable to display a backtraceTraceback (most recent call last): File "/usr/local/project/red/python/memory.py", line 3, in <module> import paramiko File "/Users/red/Library/Python/3.9/lib/python/site-packages/paramiko/__init__.py", line 22, in <module> from paramiko.transport import ( File "/Users/red/Library/Python/3.9/lib/python/site-packages/paramiko/transport.py", line 33, in <module> from cryptography.hazmat.primitives.ciphers import algorithms, Cipher, modes File "/Users/red/Library/Python/3.9/lib/python/site-packages/cryptography/hazmat/primitives/ciphers/__init__.py", line 11, in <module> from cryptography.hazmat.primitives.ciphers.base import ( File "/Users/red/Library/Python/3.9/lib/python/site-packages/cryptography/hazmat/primitives/ciphers/base.py", line 10, in <module> from cryptography.exceptions import ( File "/Users/red/Library/Python/3.9/lib/python/site-packages/cryptography/exceptions.py", line 9, in <module> from cryptography.hazmat.bindings._rust import exceptions as rust_exceptionspyo3_runtime.PanicException: Python API call failed

2023-07-08 上传

将下面这段源码转换为伪代码:def bfgs(fun, grad, x0, iterations, tol): """ Minimization of scalar function of one or more variables using the BFGS algorithm. Parameters ---------- fun : function Objective function. grad : function Gradient function of objective function. x0 : numpy.array, size=9 Initial value of the parameters to be estimated. iterations : int Maximum iterations of optimization algorithms. tol : float Tolerance of optimization algorithms. Returns ------- xk : numpy.array, size=9 Parameters wstimated by optimization algorithms. fval : float Objective function value at xk. grad_val : float Gradient value of objective function at xk. grad_log : numpy.array The record of gradient of objective function of each iteration. """ fval = None grad_val = None x_log = [] y_log = [] grad_log = [] x0 = asarray(x0).flatten() # iterations = len(x0) * 200 old_fval = fun(x0) gfk = grad(x0) k = 0 N = len(x0) I = np.eye(N, dtype=int) Hk = I old_old_fval = old_fval + np.linalg.norm(gfk) / 2 xk = x0 x_log = np.append(x_log, xk.T) y_log = np.append(y_log, fun(xk)) grad_log = np.append(grad_log, np.linalg.norm(xk - x_log[-1:])) gnorm = np.amax(np.abs(gfk)) while (gnorm > tol) and (k < iterations): pk = -np.dot(Hk, gfk) try: alpha, fc, gc, old_fval, old_old_fval, gfkp1 = _line_search_wolfe12(fun, grad, xk, pk, gfk, old_fval, old_old_fval, amin=1e-100, amax=1e100) except _LineSearchError: break x1 = xk + alpha * pk sk = x1 - xk xk = x1 if gfkp1 is None: gfkp1 = grad(x1) yk = gfkp1 - gfk gfk = gfkp1 k += 1 gnorm = np.amax(np.abs(gfk)) grad_log = np.append(grad_log, np.linalg.norm(xk - x_log[-1:])) x_log = np.append(x_log, xk.T) y_log = np.append(y_log, fun(xk)) if (gnorm <= tol): break if not np.isfinite(old_fval): break try: rhok = 1.0 / (np.dot(yk, sk)) except ZeroDivisionError: rhok = 1000.0 if isinf(rhok): rhok = 1000.0 A1 = I - sk[:, np.newaxis] * yk[np.newaxis, :] * rhok A2 = I - yk[:, np.newaxis] * sk[np.newaxis, :] * rhok Hk = np.dot(A1, np.dot(Hk, A2)) + (rhok * sk[:, np.newaxis] * sk[np.newaxis, :]) fval = old_fval grad_val = grad_log[-1] return xk, fval, grad_val, x_log, y_log, grad_log

2023-06-06 上传