【隐式动态求解】使用非线性纽马克方法的隐式动态求解研究(Matlab代码实现)

目录

💥1 概述

📚2 运行结果

🎉3 参考文献

🌈4 Matlab代码实现


💥1 概述

非线性纽马克方法(Nonlinear Newton-Raphson method)是一种用于求解非线性方程组的数值方法,其中包含了隐式动态求解的研究。该方法在许多科学和工程领域中都得到了广泛应用,特别是在动态系统模拟和求解过程中。

隐式动态求解是指在求解微分方程的过程中,将时间步长(时间离散)和求解方程(空间离散)同时进行。相比于显式动态求解方法,它更能应对复杂的非线性系统和高度非线性的方程。

在使用非线性纽马克方法进行隐式动态求解时,可以按照以下步骤进行:

1. 离散时间步长:将时间轴分成离散的时间步长,即给定初始时间和结束时间,并确定时间步长的大小。

2. 空间离散:将动态系统的方程进行空间离散,通常使用有限差分、有限元或其他数值近似方法。

3. 定义非线性方程组:将离散化后的动态系统的方程组表示为一个非线性方程组,其中未知数是各个离散点上的状态变量或变量值。

4. 应用非线性纽马克方法:使用非线性纽马克方法对非线性方程组进行迭代求解。这包括计算雅可比矩阵,更新解向量,直到收敛准则满足为止。

5. 时间迭代:在每个时间步长上,重复步骤2到步骤4,以求解每个时间点上的状态变量。

隐式动态求解具有较好的数值稳定性和收敛性,特别适用于求解高度非线性问题、刚性系统和对时间步长要求较高的情况。然而,它也可能会增加计算的复杂性和求解的计算量。

总的来说,使用非线性纽马克方法进行隐式动态求解可以得到更准确和稳定的结果,适用于涉及复杂非线性动态系统的仿真和求解问题。在实际应用中,需要根据具体问题的特点和要求来选择合适的数值方法和求解策略。

📚2 运行结果

主函数代码:

clear; clc; close all;

%Input

M=5*diag(ones(3,1));               %Mass matrix
C=0.01*M;                           %Damping matrix
f=randn(3,10000);                  %force
fs=100;                            %Sampling frequency
delta=10e-4;                       %Convergance criterion for residual force

%Material types definition
Material{1}.k1=1000;               %Spring stiffness
Material{1}.x1=0.01;               %Spring deformation beyond which the stiffness decreases
Material{1}.k2=10;                 %Reduced stiffness

%Elements connectivity and material used
Elements{1}.DOFs=[1 2];    Elements{1}.Material=1;     
Elements{2}.DOFs=[2 3];    Elements{2}.Material=1;    
Elements{3}.DOFs=[3 4];    Elements{3}.Material=1;    
%Support and Free DOFs
Support=[1];               Free=[2 3 4];

Result=Newmark_Nonlinear(Elements,Material,Support,Free,M,C,f,fs,delta);

t=[0:1/fs:9999/fs];
figure;
subplot(3,1,1);
plot(t,Result.Displacement(1,:)); xlabel('Time'); ylabel('DSP2');
subplot(3,1,2);
plot(t,Result.Displacement(2,:)); xlabel('Time'); ylabel('DSP3');
subplot(3,1,3);
plot(t,Result.Displacement(3,:)); xlabel('Time'); ylabel('DSP4');

🎉3 参考文献

部分理论来源于网络,如有侵权请联系删除。

[1]陈殿云.用纽马克积分法研究环形板的非线性振动[J].洛阳工学院学报,1996(03):71-76.DOI:10.15926/j.cnki.issn1672-6871.1996.03.017.

[2]夏宜凉,张森文.非线性系统随机响应计算的纽马克差分——等效线性化综合数值方法[J].江汉大学学报,1993(06):46-50.

🌈4 Matlab代码实现

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是运用显式、隐式差分方法求解欧式期权的Matlab代码: 显式差分方法: ``` % 定义参数 S0 = 100; % 初始股票价格 K = 100; % 行权价格 r = 0.05; % 无风险利率 sigma = 0.2; % 波动率 T = 1; % 到期时间 N = 100; % 时间步数 M = 100; % 股价步数 % 计算参数 dt = T / N; ds = S0 / M; v = r - 0.5 * sigma ^ 2; % 初始化网格 stock_grid = zeros(M+1, N+1); option_grid = zeros(M+1, N+1); % 设置边界条件 stock_grid(:, 1) = linspace(0, S0, M+1); option_grid(:, N+1) = max(stock_grid(:, N+1) - K, 0); % 迭代计算 for j = N:-1:1 for i = 2:M a = 0.5 * sigma ^ 2 * stock_grid(i) ^ 2 / ds ^ 2; b = v * stock_grid(i) / ds; c = r; option_grid(i, j) = dt * (a * (option_grid(i+1, j+1) - 2*option_grid(i, j+1) + option_grid(i-1, j+1)) + b * (option_grid(i+1, j+1) - option_grid(i-1, j+1)) + c * option_grid(i, j+1)) + option_grid(i, j+1); end end % 输出结果 disp('股票价格网格:'); disp(stock_grid); disp('期权价格网格:'); disp(option_grid); ``` 隐式差分方法: ``` % 定义参数 S0 = 100; % 初始股票价格 K = 100; % 行权价格 r = 0.05; % 无风险利率 sigma = 0.2; % 波动率 T = 1; % 到期时间 N = 100; % 时间步数 M = 100; % 股价步数 % 计算参数 dt = T / N; ds = S0 / M; v = r - 0.5 * sigma ^ 2; % 初始化网格 stock_grid = zeros(M+1, N+1); option_grid = zeros(M+1, N+1); % 设置边界条件 stock_grid(:, 1) = linspace(0, S0, M+1); option_grid(:, N+1) = max(stock_grid(:, N+1) - K, 0); % 迭代计算 for j = N:-1:1 A = zeros(M-1, M-1); B = zeros(M-1, 1); for i = 2:M-1 a = -0.5 * sigma ^ 2 * stock_grid(i) ^ 2 / ds ^ 2; b = v * stock_grid(i) / ds; c = r; A(i-1, i-1) = 1 + dt * (-2*a - c); if i > 2 A(i-1, i-2) = dt * (a - b / 2); end if i < M-1 A(i-1, i) = dt * (a + b / 2); end B(i-1) = option_grid(i, j+1); end option_grid(2:M-1, j) = A \ B; end % 输出结果 disp('股票价格网格:'); disp(stock_grid); disp('期权价格网格:'); disp(option_grid); ``` 在这两个示例中,都使用了股票价格、行权价格、无风险利率、波动率、到期时间、时间步数和股价步数等参数,根据这些参数计算出了时间步长dt、股票价格步长ds和中间变量v。然后,初始化了股票价格网格和期权价格网格,并设置了边界条件。在迭代计算中,按照显式差分方法隐式差分方法的公式,逐步计算期权价格网格。最后,输出了股票价格网格和期权价格网格。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值