Python和MATLAB及C++和Fortran胶体粒子数学材料学显微镜学微观流变学及光学计算

news2024/11/23 15:16:14

🎯要点

  1. 二维成像拥挤胶体粒子检测算法
  2. 粒子的局部结构和动力学分析
  3. 椭圆粒子成链动态过程定量分析算法
  4. 小颗粒的光散射和吸收
  5. 活跃物质模拟群体行为
  6. 提取粒子轨迹粘弹性,计算剪切模量
  7. 计算悬浮液球形粒子多体流体动力学
  8. 概率规划全息图跟踪和表征粒子位置、大小和折射率
    在这里插入图片描述

Python粒子滤波器算法

为了简化,我们给出已经推导出的线性状态空间模型的粒子滤波器算法。粒子滤波器是针对以下状态空间模型推导出来的:
x k = A x k − 1 + B u k − 1 + w k − 1 y k = C x k + v k ( 1 ) \begin{aligned} & x _k=A x _{k-1}+B u _{k-1}+ w _{k-1} \\ & y _k=C x _k+ v _k \end{aligned}\qquad(1) xk=Axk1+Buk1+wk1yk=Cxk+vk(1)
其中 x k ∈ R n x _k \in R ^n xkRn 是离散时间步长 k k k 的状态向量, u k − 1 ∈ R m 1 u _{k-1} \in R ^{m_1} uk1Rm1 是时间步长 k − 1 k-1 k1 的控制输入向量, w k − 1 ∈ R m 2 w _{k-1} \in R ^{m_2} wk1Rm2 是时间步长 k − 1 k-1 k1 处的过程扰动向量(过程噪声向量), y k ∈ R r y _k \in R ^r ykRr 是时间步长 k k k 处观测到的输出矢量, v k ∈ R r v _k \in R ^r vkRr 是离散时间步长 k k k 处的测量噪声向量, A A A B B B C C C是系统矩阵。

假设过程扰动向量 w k w _k wk 服从正态分布,具有零均值和规定的协方差矩阵,即
w k ∼ N ( 0 , Q ) ( 2 ) w _k \sim N (0, Q)\qquad(2) wkN(0,Q)(2)
其中 Q Q Q 是过程扰动向量的协方差矩阵。另外,假设测量噪声向量 v k v _k vk 服从正态分布,具有零均值和规定的协方差矩阵,即
v k ∼ N ( 0 , R ) ( 3 ) v _k \sim N (0, R)\qquad(3) vkN(0,R)(3)
其中 R R R 是测量噪声向量的协方差矩阵。状态转移密度是以下正态分布的密度
N ( A x k − 1 + B u k − 1 , Q ) ( 4 ) N \left(A x _{k-1}+B u _{k-1}, Q\right)\qquad(4) N(Axk1+Buk1,Q)(4)
此外,我们还证明了测量密度(测量概率密度函数),表示为 p ( y k ∣ x k ) p\left( y _k \mid x _k\right) p(ykxk),是一个正态分布,其平均值为 C x k C x _k Cxk,协方差矩阵等于测量噪声向量 v k v _k vk 的协方差矩阵。也就是说,测量密度是以下正态分布的密度
N ( C x k , R ) ( 5 ) N \left(C x _k, R\right)\qquad(5) N(Cxk,R)(5)
为了实现粒子滤波器,我们需要从状态转换概率 (4) 中抽取 x k x _k xk 的样本。有两种方法可用于生成这些样本。第一种方法(我们在 Python 实现中使用)是从 (2) 中给出的分布中抽取过程扰动向量的随机样本。

在每个离散时间点 k k k,粒子滤波器计算以下一组粒子
{ ( x k ( i ) , w k ( i ) ) ∣ i = 1 , 2 , 3 , … , N } ( 6 ) \left\{\left( x _k^{(i)}, w_k^{(i)}\right) \mid i=1,2,3, \ldots, N\right\}\qquad(6) {(xk(i),wk(i))i=1,2,3,,N}(6)
索引为 i i i 的粒子由元组 ( x k ( i ) , w k ( i ) ) \left( x _k^{(i)}, w_k^{(i)}\right) (xk(i),wk(i)) 组成,其中 x k ( i ) x _k^{(i)} xk(i) 是状态样本, w k ( i ) w_k^{(i)} wk(i) 是重要性权重。粒子集近似后验密度 p ( x k ∣ y 0 : k , u 0 : k − 1 ) p\left(x_k \mid y _{0: k}, u _{0: k-1}\right) p(xky0:k,u0:k1),如下所示
p ( x k ∣ y 0 : k , u 0 : k − 1 ) ≈ ∑ i = 1 N w k ( i ) δ ( x k − x k ( i ) ) ( 7 ) p\left( x _k \mid y _{0: k}, u _{0: k-1}\right) \approx \sum_{i=1}^N w_k^{(i)} \delta\left( x _k- x _k^{(i)}\right)\qquad(7) p(xky0:k,u0:k1)i=1Nwk(i)δ(xkxk(i))(7)
粒子滤波算法的说明:对于初始粒子集
{ ( x 0 ( i ) , w 0 ( i ) ) ∣ i = 1 , 2 , 3 , … , N } \left\{\left( x _0^{(i)}, w_0^{(i)}\right) \mid i=1,2,3, \ldots, N\right\} {(x0(i),w0(i))i=1,2,3,,N}

Python过滤实现(片段)

import time
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import multivariate_normal

def systematicResampling(weightArray):
    N=len(weightArray)
    cValues=[]
    cValues.append(weightArray[0])

    for i in range(N-1):
        cValues.append(cValues[i]+weightArray[i+1])
    startingPoint=np.random.uniform(low=0.0, high=1/(N))
    resampledIndex=[]
    for j in range(N):
        currentPoint=startingPoint+(1/N)*(j)
        s=0
        while (currentPoint>cValues[s]):
            s=s+1
            
        resampledIndex.append(s)

    return resampledIndex

meanProcess=np.array([0,0])
covarianceProcess=np.array([[0.002, 0],[0, 0.002]])

meanNoise=np.array([0])
covarianceNoise=np.array([[0.001]])

processDistribution=multivariate_normal(mean=meanProcess,cov=covarianceProcess)
noiseDistribution=multivariate_normal(mean=meanNoise,cov=covarianceNoise)

m=5
ks=200
kd=30

Ac=np.array([[0,1],[-ks/m, -kd/m]])
Cc=np.array([[1,0]])
Bc=np.array([[0],[1/m]])

h=0.01

A=np.linalg.inv(np.eye(2)-h*Ac)
B=h*np.matmul(A,Bc)
C=Cc

simTime=1000
x0=np.array([[0.1],[0.01]])

stateDim,tmp11=x0.shape
controlInput=100*np.ones((1,simTime))

stateTrajectory=np.zeros(shape=(stateDim,simTime+1))
output=np.zeros(shape=(1,simTime))

stateTrajectory[:,[0]]=x0

for i in range(simTime):
    stateTrajectory[:,[i+1]]=np.matmul(A,stateTrajectory[:,[i]])+np.matmul(B,controlInput[:,[i]])+processDistribution.rvs(size=1).reshape(stateDim,1)
    output[:,[i]]=np.matmul(C,stateTrajectory[:,[i]])+noiseDistribution.rvs(size=1).reshape(1,1)

x0Guess=x0+np.array([[0.7],[-0.6]])
pointsX, pointsY = np.mgrid[x0Guess[0,0]-0.8:x0Guess[0,0]+0.8:0.1, x0Guess[1,0]-0.5:x0Guess[1,0]+0.5:0.1]
xVec=pointsX.reshape((-1, 1), order="C")
yVec=pointsY.reshape((-1, 1), order="C")

states=np.hstack((xVec,yVec)).transpose()

dim1,numberParticle=states.shape

weights=(1/numberParticle)*np.ones((1,numberParticle))
numberIterations=1000

stateList=[]
stateList.append(states)
weightList=[]
weightList.append(weights)

for i in range(numberIterations):
    controlInputBatch=controlInput[0,i]*np.ones((1,numberParticle))
    newStates=np.matmul(A,states)+np.matmul(B,controlInputBatch)+processDistribution.rvs(size=numberParticle).transpose()
    newWeights=np.zeros(shape=(1,numberParticle))
    for j in range(numberParticle):
        meanDis=np.matmul(C,newStates[:,[j]])
        distributionO=multivariate_normal(mean=meanDis[0],cov=covarianceNoise)
        newWeights[:,j]=distributionO.pdf(output[:,i])*weights[:,[j]]
    weightsStandardized=newWeights/(newWeights.sum())
    tmp1=[val**2 for val in weightsStandardized]
    Neff=1/(np.array(tmp1).sum())
    if Neff<(numberParticle//3):
        resampledStateIndex=np.random.choice(np.arange(numberParticle), numberParticle, p=weightsStandardized[0,:])        
        newStates=newStates[:,resampledStateIndex]
        weightsStandardized=(1/numberParticle)*np.ones((1,numberParticle))

    states=newStates
    weights=weightsStandardized
    stateList.append(states)
    weightList.append(weights)

meanStateSequence=np.zeros(shape=(stateDim,numberIterations))
for i in range(numberIterations):
    meanState=np.zeros(shape=(stateDim,1))
    for j in range(numberParticle):
        meanState=meanState+weightList[i][:,j]*stateList[i][:,j].reshape(2,1)
        
    meanStateSequence[:,[i]]=meanState

👉更新:亚图跨际

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2205879.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

创建docker虚拟镜像,创建启动服务脚本

进入系统命令服务目录 编辑服务 [Unit] DescriptionDocker Application Container Engine Documentationhttps://docs.docker.com Afternetwork-online.target firewalld.service Wantsnetwork-online.target [Service] Typenotify ExecStart/usr/bin/dockerd ExecReload/bin/…

Gradle 插件获取所有依赖项,类似 androidDependencies?

诉求 在打包过程中我想知道某个模块的信息&#xff0c;比如&#xff1a; 模块androidx.work:work-runtime是否被依赖&#xff1f;模块androidx.work:work-runtime的版本号是多少&#xff1f; 我们利用 Android studio 已有的任务androidDependencies&#xff0c;双击执行很容…

PyQt5写好的py文件生成可执行的exe文件【Nuitka】

文章目录 1.Nuitka引入2.Nuitka与Pyinstaller对比Nuitka安装 3.Nuitka指令4.参数以及作用5.多文件格式封装完成后可删除文件6.运行问题问题1问题2 1.Nuitka引入 看过我上一篇PyQt5写好的py文件生成可执行的exe文件【Pyinstaller】的应该了解到用PyQt5写的界面程序可以通过Pyins…

安卓冻屏bug案例作业分享-千里马学员wms+input实战作业

背景&#xff1a; 近期有学员反馈在aosp14高版本上有了一个新窗口TaskBar&#xff0c;这个但是有需求就是对这个TaskBar进行隐藏&#xff0c;所以有一个需要对这个TaskBar进行进行隐藏需求 隐藏TaskBar需求做了之后发现有如下bug&#xff1a; 问题复现步骤&#xff1a; 因…

新款示波器RTE1104罗德与施瓦茨RS RTE1102原装二手

罗德与施瓦茨R&S RTE1104触摸屏RTE1102新款示波器 R&S-RTE1000 示波器系列&#xff1a; RTE1022标配&#xff1a;200MHz带宽&#xff0c;2通道&#xff0c;5GSa/s采样率&#xff0c;200M存储深度&#xff0c;16个数字通道&#xff08;选配&#xff09; RTE1032标配&a…

HCIP--以太网交换安全(二)端口安全

端口安全 一、端口安全概述 1.1、端口安全概述&#xff1a;端口安全是一种网络设备防护措施&#xff0c;通过将接口学习的MAC地址设为安全地址防止非法用户通信。 1.2、端口安全原理&#xff1a; 类型 定义 特点 安全动态MAC地址 使能端口而未是能Stichy MAC功能是转换的…

解决PyCharm 2023 Python Packages列表为空

原因是因为没有设置镜像源 展开 > 之后&#xff0c;这里 点击齿轮 添加一个阿里云的源 最后还需要点击刷新 可以选择下面的任意一个国内镜像源&#xff1a; 清华&#xff1a;https://pypi.tuna.tsinghua.edu.cn/simple 阿里云&#xff1a;http://mirrors.aliyun.com/…

asp.net core Partial 分部视图、视图组件(core mvc 才支持)、视图、Razor组件 、razor pages

分部视图 》》》传参 》》两个东西换个名称&#xff0c;PartialView()>渲染视图>不带Layout 部分视图与普通视图没太大区别&#xff0c;它可以将重复使用的HTML内容结合起来&#xff0c;可以单独使用。 一般命名是在名称前面加下划线&#xff0c;放在/Views/Shared 目…

【cocos creator】输入框滑动条联动小组建

滑动条滑动输入框内容会改变 输入框输入&#xff0c;滑动条位置改变 const { ccclass, property } cc._decorator;ccclass() export default class SliderEnter extends cc.Component {property({ type: cc.Float, displayName: "最大值", tooltip: "" }…

基于Web的停车场管理系统(论文+源码)_kaic

摘要 我国经济的发展愈发迅速&#xff0c;车辆也随之增加的难以想象&#xff0c;因此车位的治理也越来越繁杂&#xff0c;为了方便停车位相关信息的管理&#xff0c;设计开发一个合理的停车位管理系统尤为重要。因而&#xff0c;具有信息方便读取和操作简便的停车位管理系统的设…

Java基础-知识点

文章目录 数据类型包装类型缓存池 String概述不可变的含义不可变的好处String、StringBuffer、StringBuilderString.intern() 运算参数传递float与double隐式类型转换switch 继承访问权限抽象类与接口super重写与重载**1. 重写(Override)****2. 重载(Overload)** Object类的通用…

H3C GRE over IPsec VPN 实验

H3C GRE over IPsec VPN 实验 实验拓扑 ​​ 实验需求 某企业北京总部、上海分支、武汉分支分别通过 R1,R3,R4 接入互联网,配置默认路由连通公网按照图示配置 IP 地址,R1,R3,R4 分别配置 Loopback0 口匹配感兴趣流,Loopback1 口模拟业务网段北京总部拥有固定公网地址…

VMware Fusion 13.6.1 发布下载,修复 4 个已知问题

VMware Fusion 13.6.1 发布下载&#xff0c;修复 4 个已知问题 VMware Fusion 13.6.1 for Mac - 领先的免费桌面虚拟化软件 适用于基于 Intel 处理器和搭载 Apple 芯片的 Mac 的桌面虚拟化软件 请访问原文链接&#xff1a;https://sysin.org/blog/vmware-fusion-13/ 查看最新…

找不到xinput1_3.dll怎么解决,快来试试这个几个方法

在计算机系统运行过程中&#xff0c;当我们遭遇“找不到xinput1_3.dll”这一错误提示时&#xff0c;实际上正面临一个软件兼容性、系统组件缺失以及游戏或应用程序无法正常启动的关键问题。深入探究这一现象&#xff0c;我们会发现它可能引发一系列连带问题&#xff0c;例如某些…

【课程设计/毕业设计】Java家政预约管理系统源码+开发文档

项目介绍 一直想做一款家政管理系统&#xff0c;看了很多优秀的开源项目但是发现没有合适的。于是利用空闲休息时间开始自己写了一套管理系统。学习过程中遇到问题可以咨询留言。 在线体验 http://jiazheng.gitapp.cn/ 源码地址 https://github.com/geeeeeeeek/java_jiazh…

JVM和GC案例详解

接上文JVM环境配置说明&#xff1a;上文博客 一、JVM远程连接设置 1. JMX方式连接(这种方式没有GC监控)&#xff0c;设置如下 2. 连接成功后可以查看基础配置参数(和服务器配置一致) 2. jstatd方式连接(这种方式没有CPU监控) 添加jstatd方式连接 双击Tomcat&#xff0…

python可变数据类型和不可变数据类型

先看一段代码。 value1 10 value2 value1 print(value1) print(value2) value1 30 print(value1) print(value2)再看另一段代码。 list1 [1,2,3,4] list2 list1 print(list1) print(list2) list1.append(5) print(list1) print(list2)第一段代码中&#xff0c;value2的值…

深入解析:如何使用LangChain进行RAG处理半结构化数据

深入解析&#xff1a;如何使用LangChain进行RAG处理半结构化数据 引言 在处理半结构化数据如PDF文件时&#xff0c;如何有效提取信息是一个挑战。本文将介绍如何使用LangChain的RAG处理模板处理这样的数据。我们将探讨安装、使用和在项目中集成的完整过程。 主要内容 环境设…

FLBOOK一款强大的电子产品图册制作工具

随着科技的飞速发展&#xff0c;电子产品已经成为我们生活中不可或缺的一部分。为了让消费者更好地了解产品特性、功能及优势&#xff0c;电子产品图册的制作显得尤为重要。今天&#xff0c;我要向大家介绍一款强大的电子产品图册制作工具——FLBOOK。 一、FLBOOK简介 FLBOOK是…

芜湖儿童自闭症寄宿制学校:为孩子打开未来大门

在探索自闭症儿童教育的广阔领域中&#xff0c;寄宿制学校以其独特的教育模式和全面的关怀体系&#xff0c;为自闭症儿童及其家庭带来了新的希望与可能。虽然本文聚焦于芜湖儿童自闭症寄宿制学校的概念&#xff0c;但让我们以广州星贝育园自闭症儿童寄宿制学校为具体实例&#…