我在试着解决这个问题

enter image description here

其中$un_n$和$v_n$是收敛到解u和v的序列,并给出了lambda、sigma、f、g和K_lambda.

我想过使用带有while循环的Scipy模块integrate,但显然我不知道如何实现收敛条件.我也不知道如何将un(T)实现为被积函数.这是我try 过的.

import numpy as np
import scipy.integrate as integrate
import scipy.special as special
import matplotlib
import matplotlib.pyplot as plt
import math

N = 30


u0 = np.ones(N)*0.2
v0 = np.ones(N)*0.15

bta = 2.1
eps = 0.1
sgm = 1.5

def K(t, s, lbda, T):
    L1= np.exp(lbda*(T-s))*np.exp(lbda*t)/(1-np.exp(lbda*T))
    if t>=s:
      L2 = np.exp(lbda*(t-s))
    else :
      L2=0.0
    return L1+L2


def f(s,u,v):
  return np.sin(s)**2-bta*(u/(1+v))
def g(s,u,v):
  return -np.cos(s)**2+sgm*(u/(1+v))+eps/(1+v)

def sigma(s):
    return 1+np.sin(s)**2

def integrand_u(s, t, lbda, T,u,v):
    return K(t, s, lbda, T) * (sigma(s) + lbda*u + f(s,u,v))

def integrand_v(s, t, lbda, T,u,v):
    return K(t, s, lbda, T) * (sigma(s) + lbda*v + g(s,u,v))

def integral_u(t, lbda, T,u,v):
    result = integrate.quad(integrand_u, 0, T, args=(t, lbda, T, u, v))[0]
    return result

def integral_v(t, lbda, T,u,v):
    result = integrate.quad(integrand_v, 0, T, args=(t, lbda, T, u, v))[0]
    return result

# Define the parameters
lbda = 10
T = np.pi
t = np.linspace(0,T,N)

n=0
while n<N:
  u = [integral_u(a, lbda, T, u0[n], v0[n]) for a in t]
  v = [integral_v(a, lbda, T, u0[n], v0[n]) for a in t]
  u0 = u
  v0 = v
  n = n+1

plt.plot(t,u)
plt.plot(t,v)
plt.show()

推荐答案

到目前为止,这给出的结果仍然不收敛,但至少它看起来是正确的,也许这个问题是不适定的.如果有人知道有什么改进,请随意添加

import numpy as np
import scipy.integrate as integrate
import scipy.special as special
import matplotlib
import matplotlib.pyplot as plt
import math

N = 50


u0 = np.ones(N)*0.10
v0 = np.ones(N)*0.12

bta = 2.1
eps = 0.1
sgm = 1.5

def K(t, s, lbda, T):
    L1= np.exp(lbda*(T-s))*np.exp(lbda*t)/(1-np.exp(lbda*T))
    if t>=s:
      L2 = np.exp(lbda*(t-s))
    else :
      L2=0.0
    return L1+L2


def f(s,u,v):
  return np.sin(s)**2-bta*(u/(1+v))
def g(s,u,v):
  return -np.cos(s)**2+sgm*(u/(1+v))+eps/(1+v)

def sigma(s):
    return 1+np.sin(s)

def integrand_u(s, t, lbda, T,u,v):
    return K(t, s, lbda, T) * (sigma(s) + lbda*u + f(s,u,v))

def integrand_v(s, t, lbda, T,u,v):
    return K(t, s, lbda, T) * (sigma(s) + lbda*v + g(s,u,v))

def integral_u(t, lbda, T,u,v):
    result = integrate.quad(integrand_u, 0, T, args=(t, lbda, T, u, v))[0]
    return result

def integral_v(t, lbda, T,u,v):
    result = integrate.quad(integrand_v, 0, T, args=(t, lbda, T, u, v))[0]
    return result

# Define the parameters
lbda = 10
T = np.pi
t = np.linspace(0,T,N)
err=1
epss=1e-6
n=0
while err>epss:
  u = [integral_u(a, lbda, T, np.interp(a,t,u0), np.interp(a,t,v0)) for a in t]
  v = [integral_v(a, lbda, T, np.interp(a,t,u0), np.interp(a,t,v0)) for a in t]  
  err=np.linalg.norm(np.array(u)-np.array(u0),2)+np.linalg.norm(np.array(v)-np.array(v0),2)
  err=np.sqrt(err) 
  u0 = u
  v0 = v
  n = n+1
  print('n = ',n)
  print('err = ',err)

  

plt.plot(t,u)
plt.plot(t,v)
plt.show()

print(u[0])  

Python相关问答推荐

Pandas 填充条件是另一列

pandas DataFrame GroupBy.diff函数的意外输出

try 在树叶 map 上应用覆盖磁贴

对于一个给定的数字,找出一个整数的最小和最大可能的和

不理解Value错误:在Python中使用迭代对象设置时必须具有相等的len键和值

按列分区,按另一列排序

管道冻结和管道卸载

driver. find_element无法通过class_name找到元素'""

pandas在第1列的id,第2列的标题,第3列的值,第3列的值?

改进大型数据集的框架性能

如何禁用FastAPI应用程序的Swagger UI autodoc中的application/json?

Django admin Csrf令牌未设置

旋转多边形而不改变内部空间关系

OpenCV轮廓.很难找到给定图像的所需轮廓

在Python中从嵌套的for循环中获取插值

并行编程:同步进程

没有内置pip模块的Python3.11--S在做什么?

如何使用pytest在traceback中找到特定的异常

每次查询的流通股数量

我如何处理超类和子类的情况