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

🎯要点

  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_normaldef 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=0while (currentPoint>cValues[s]):s=s+1resampledIndex.append(s)return resampledIndexmeanProcess=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=30Ac=np.array([[0,1],[-ks/m, -kd/m]])
Cc=np.array([[1,0]])
Bc=np.array([[0],[1/m]])h=0.01A=np.linalg.inv(np.eye(2)-h*Ac)
B=h*np.matmul(A,Bc)
C=CcsimTime=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]]=x0for 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.shapeweights=(1/numberParticle)*np.ones((1,numberParticle))
numberIterations=1000stateList=[]
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=newStatesweights=weightsStandardizedstateList.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.rhkb.cn/news/447569.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

StableDiffusion|833种艺术家风格项目,提示词直接上手! AI绘画文生图直接抄!

大家好&#xff0c;我是画画的小强 众所周知&#xff0c;Stable Diffusion是一个强大的文生图模型&#xff0c;能够根据用户的文本描述生成高质量的图像。在这个过程中&#xff0c;提示词&#xff08;Prompt&#xff09;的选择和构造具有至关重要的作用。提示词是向模型描述你…

强化学习之Q-learning算法

前言&#xff1a; 在正文开始之前&#xff0c;首先给大家介绍一个不错的人工智能学习教程&#xff1a;https://www.captainbed.cn/bbs。其中包含了机器学习、深度学习、强化学习等系列教程&#xff0c;感兴趣的读者可以自行查阅。 一、算法介绍 Q-Learning是一种基于值函数的强…

山西农业大学20241015

02-VUE 一. Vue中常用的指令1. Vue指令概述2 Vue中指令的分类3 Vue中指令3.1 内容渲染指令3.2 条件渲染指令3.2.1 v-show3.2.2 v-if3.2.3 v-else 和 v-else-if 3.3 事件绑定指令 v-on--重要3.3.1 内联语句3.3.2 methods中的函数名 一. Vue中常用的指令 1. Vue指令概述 概念: 指…

STL --- list(C++)

本期鸡汤&#xff1a; “星光不负赶路人&#xff0c;时光不负有心人&#xff1b;你只管努力&#xff0c;剩下的交给时间。” 目录 1.list的介绍即使用 1.1list介绍 1.2list使用 1.2.1list构造 1.2.2list的iterator的使用 1.2.3list capacity 1.2.4list element access 1…

LeCun数十年经验之谈:视觉是建立AGI的核心,视频理解难点在哪?语言模型技术为何难以复用于视觉?

文字来源 | 夕小瑶科技说 AI寒武纪 大语言模型&#xff08;LLM&#xff09;已经接近人类水平&#xff0c;但视觉理解在世界范围似乎尚未突破&#xff0c;那么为何不能直接将LLM技术用于视觉&#xff1f;让AI看视频的难点在哪&#xff1f;如果语言是AGI必要的能力&#xff0c;为…

【Java 22 | 6】 深入解析Java 22 :记录(Records)增强详解

Java 22 对记录&#xff08;Records&#xff09;进行了重要的增强&#xff0c;进一步提升了这一特性在数据建模和类型安全方面的灵活性。以下是对记录类的详细介绍&#xff0c;包括基础概念、增强特性、使用场景、实际项目中的应用示例&#xff0c;以及示例代码。 1. 基础介绍…

使用js和canvas实现简单的网页贪吃蛇小游戏

玩法介绍 点击开始游戏后&#xff0c;使用键盘上的↑↓←→控制移动&#xff0c;吃到食物增加长度&#xff0c;碰到墙壁或碰到自身就游戏结束 代码实现 代码比较简单&#xff0c;直接阅读注释即可&#xff0c;复制即用 <!DOCTYPE html> <html lang"en"…

快速理解http的get和post

在网络通信中&#xff0c;HTTP 协议扮演着非常重要的角色&#xff0c;而不同的 HTTP 方法决定了客户端与服务器之间的交互方式。 这里讲一下最常用的两种方法——GET 和 POST。 一、GET 方法 GET 方法用于从服务器获取资源。 这就像去图书馆借书——你向图书馆请求一本特定的…

【JVM】内存分析工具JConsole/Visual VM

1 缘起 日常补充JVM调优&#xff0c;调优实践前需要学习一些理论做支撑&#xff0c; JVM调优三步&#xff1a;理论>GC分析>JVM调优&#xff0c; 我们会有一些玩笑话说&#xff0c;做了这么久Java开发&#xff0c;做过JVM调优吗&#xff1f; 做过&#xff0c;面试时。当然…

java中连接Mysql以及PreparedStatement如何防止sql注入

目录 JDBC 使用JDBC连接到MySQL 使用 Statement 使用 PreparedStatement Statement 和 PreparedStatement 区别 在 java 中如何连接到 MySQL 数据库&#xff0c;执行 SQL 查询&#xff0c;并处理查询结果&#xff1f; JDBC java 程序连接到 mysql&#xff0c;首先需要下…

2024年看项目管理软件与工程项目管理的奇妙融合

一、禅道在项目管理中的全面应用 禅道在产品管理方面&#xff0c;能够清晰地对产品的需求进行全方位管理。从需求的提出到详细信息的记录&#xff0c;再到状态、负责人以及完成进度的跟踪&#xff0c;都能有条不紊地进行。产品经理可以通过禅道制定合理的产品规划&#xff0c;…

实用宝典:元器件外贸独立站电子元件数据库设置完全手册

对于投身于元器件外贸领域的企业来说&#xff0c;如何建立一个既能凸显自身特色又具备高度功能性与良好用户体验的独立站&#xff1f;而在这一过程中&#xff0c;#电子元件数据库#作为独立站的核心要素之一&#xff0c;它的构建质量和管理方式又将如何直接影响网站的整体竞争力…

BMS、EMS PCS 简介

1 储能系统的构成 完整的电化学储能系统主要由电池组、电池管理系统&#xff08;BMS&#xff09;、能量管理系统&#xff08;EMS&#xff09;、储能变流器&#xff08;PCS&#xff09;以及其他电气设备构成。 在储能系统中&#xff0c;电池组将状态信息反馈给电池管理系统BMS&…

zookeeper客户端

启动单机版的zookeeper 配置Maven环境 (1) IDEA自带maven (2) 更新Maven库镜像地址&#xff1a; ① 拷贝D:\Program Files\JetBrains\IntelliJ IDEA 2018.3.5\plugins\maven\lib\maven3\conf\settings.xml [IntelliJ的安装目录]到 C:/用户/username/.m2 (如果.m2文件不存在&…

前后分离项目记录

一.前端设置 1.打包问题 打包报错 Thread Loader时&#xff0c;增加以下代码&#xff1a; 2.上线时api设置 二.Nginx问题 1.缓存问题&#xff1a;添加如下代码以禁止缓存&#xff0c;否则在关闭nginx后仍然可以访问页面 2.跨域问题在后端加CrossOrigin注解即可 3.上线时co…

人工智能风险预警以及区块链解决方案探索

​​发表时间&#xff1a;2024年9月26日 一个专家小组在为世界经济论坛撰写的报告中警示道&#xff0c;人工智能&#xff08;以下均简称为AI&#xff09;技术增加了各类组织遭受攻击的风险&#xff0c;并带来了训练数据污染和提示词注入攻击等新威胁。由于训练和测试数据库的庞…

3 机器学习之假设空间

归纳(induction)与演绎(deduction)是科学推理的两大基本手段。前者是从特殊到一般的“泛化”(generalization)过程&#xff0c;即从具体的事实归结出一般性规律&#xff1b;后者则是从一般到特殊的“特化”(specialization)过程&#xff0c;即从基础原理推演出具体状况。例如&a…

笔试强训10.14

注意&#xff1a; 1.使用strcpy是把右参数赋值给左参数&#xff0c;而且左参数必须有终止符\0。 2.注意当输入的字符串的最长连续数字串在最后时&#xff0c;此时就不会进行else的判断&#xff0c;需要出了while循环后再进行判断。 #include <iostream> #include <…

Java面试宝典-WEB学习

Java web学习 目录 Java web学习 1、说说 Servlet 的基本架构 2、说一说 Servlet 的生命周期? 3、如何实现一个自定义的 servlet&#xff1f; 4、servlet中有哪些核心类&#xff1f;都有什么特点&#xff1f; 5、什么情况下调用 doGet()和 doPost()&#xff1f; 6、request.ge…

Attention Is All You Need论文翻译

论文名称 注意力即是全部 论文地址 https://user.phil.hhu.de/~cwurm/wp-content/uploads/2020/01/7181-attention-is-all-you-need.pdf 摘要 主流的序列转导模型基于复杂的递归或卷积神经网络&#xff0c;这些网络包含编码器和解码器。性能最好的模型通过注意力机制将编码器和…