我有一个常微分方程<?php
/**
* Front to the WordPress application. This file doesn't do anything, but loads
* wp-blog-header.php which does and tells WordPress to load the theme.
*
* @package WordPress
*/
/**
* Tells WordPress to load the WordPress theme and output it.
*
* @var bool
*/
define('WP_USE_THEMES', true);
/** Loads the WordPress Environment and Template */
require( dirname( __FILE__ ) . '/wp-blog-header.php' );
的系统,我想在考虑x'(t) = Lx(t)
的初始条件的同时找到频率空间行为。我可以通过两种方式做到这一点:
x(t=0)
并直接求解(请注意,我已将Laplace变量限制为纯虚数)。这很容易做到:
(1j * w * ident - L) X(w) = x(t=0)
这适用于def resolvant(w,L):
R = np.linalg.inv(1j * ident * w - L)
return R
非奇数的所有点。现在,我的矩阵1j * ident * w-L
具有一个零特征值,其余特征值复数。因此,拆分剂仅在点L
处是唯一的。
这时我可以用伪逆来代替逆函数:
w=0
在许多情况下这是可行的,但是在许多重要情况下,伪逆方法与通过时域方法发现的方法有所不同。有没有办法约束伪逆以在def resolvant(w,L):
if w !=0:
R = np.linalg.inv(1j * ident * w - L)
else:
R = np.linalg.pinv(- L)
return R
处给出正确的行为?
编辑: 最小的工作示例
w=0
此代码产生
import numpy as np
#construct matrix on for the RHS of equation
L = np.array([[0,-1.j,0,1.j,0,0,0,0,0],[-1.j,-0.5,0,0,1.j,0,0,0,0],[0,0,0,0,0,1.j,0,0,0],[1.j,0,0,-0.5,-1.j,0,0,0,0],[0,1.j,0,-1.j,-1.,0,0,0,0],[ 0,0,1.j,0,0,-0.5,0,0,0],[0,0,0,0,0,0,0,-1.j,0],[ 0,0,0,0,0,0,-1.j,-0.5,0],[0,0,0,0,1,0,0,0,0]])
#initial vector is given as:
x0=np.zeros(L.shape[0])
x0[0] = 1
#calculate the pseudo inverse and resultant vector:
R = np.linalg.pinv(-L)
res = np.dot(R, x0)
print(res)
相反,我们可以通过传播ODE并将其积分到端点(此处未显示紧凑性代码)来在时域中计算相同的对象,从而得出:
array([ 5.00000000e-01 +1.04874666e-17j,
1.74736751e-16 -3.33333333e-01j,
1.23748154e-16 +6.69892995e-17j,
6.13265296e-17 +3.33333333e-01j,
3.33333333e-01 +2.70701098e-17j,
1.24640823e-17 +9.26971489e-17j,
0.00000000e+00 +0.00000000e+00j,
0.00000000e+00 +0.00000000e+00j, 0.00000000e+00 +0.00000000e+00j])
显然,结果之间存在相当大的差异。