在使用伪逆时搜索“正确”的解决方案

时间:2018-10-18 08:47:51

标签: python numpy linear-algebra

我有一个常微分方程<?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)的初始条件的同时找到频率空间行为。我可以通过两种方式做到这一点:

    在时域中传播方程,然后进行(单面)傅立叶变换;或
  1. 对运动方程进行Laplace变换,以获得线性方程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])
显然,结果之间存在相当大的差异。

0 个答案:

没有答案