Python和C++(CUDA)及Arduino雅可比矩阵导图

news2024/11/15 20:01:25

🎯要点

  1. 对比三种方式计算
  2. 读取二维和三维三角形四边形和六面体网格
  3. 运动学奇异点处理
  4. 医学图像成像组学分析
  5. 特征敏感度增强
  6. 机械臂路径规划和手臂空间操作变换
  7. 苹果手机物理稳定性中间轴定理
    在这里插入图片描述

Python雅可比矩阵

多变量向量值函数的雅可比矩阵推广了多变量标量值函数的梯度,而这又推广了单变量标量值函数的导数。换句话说,多变量标量值函数的雅可比矩阵是其梯度(的转置),而单变量标量值函数的梯度是其导数。

在函数可微的每个点,其雅可比矩阵也可以被认为是描述函数在该点附近局部施加的“拉伸”、“旋转”或“变换”量。例如,如果使用 ( x ′ , y ′ ) = f ( x , y ) \left(x^{\prime}, y^{\prime}\right)= f (x, y) (x,y)=f(x,y) 平滑变换图像,则雅可比矩阵 J f ( x , y ) J _{ f }( x, y) Jf(x,y),描述了 ( x , y ) (x, y) (x,y)邻域中的图像如何变换。如果函数在某点可微,其微分在坐标系中由雅可比矩阵给出。然而,函数不需要可微才能定义其雅可比矩阵,因为只需要存在其一阶偏导数。

考虑以下向量函数,该函数将 n n n 维向量 x ∈ R n x \in R ^n xRn 作为输入,并将该向量映射到 m m m 维向量:
f ( x ) = [ f 1 ( x 1 , x 2 , x 3 , … , x n ) f 2 ( x 1 , x 2 , x 3 , … , x n ) ⋮ f m ( x 1 , x 2 , x 3 , … , x n ) ] f ( x )=\left[\begin{array}{c} f_1\left(x_1, x_2, x_3, \ldots, x_n\right) \\ f_2\left(x_1, x_2, x_3, \ldots, x_n\right) \\ \vdots \\ f_m\left(x_1, x_2, x_3, \ldots, x_n\right) \end{array}\right] f(x)= f1(x1,x2,x3,,xn)f2(x1,x2,x3,,xn)fm(x1,x2,x3,,xn)

其中向量 x x x 定义为
x = [ x 1 x 2 ⋮ x n ] x =\left[\begin{array}{c} x_1 \\ x_2 \\ \vdots \\ x_n \end{array}\right] x= x1x2xn
非线性向量函数 f f f 产生 m m m 维向量
[ f 1 ( x 1 , x 2 , x 3 , … , x n ) f 2 ( x 1 , x 2 , x 3 , … , x n ) ⋮ f m ( x 1 , x 2 , x 3 , … , x n ) ] \left[\begin{array}{c} f_1\left(x_1, x_2, x_3, \ldots, x_n\right) \\ f_2\left(x_1, x_2, x_3, \ldots, x_n\right) \\ \vdots \\ f_m\left(x_1, x_2, x_3, \ldots, x_n\right) \end{array}\right] f1(x1,x2,x3,,xn)f2(x1,x2,x3,,xn)fm(x1,x2,x3,,xn)
其条目是 m m m 函数 f i , i = 1 , 2 , … , n f_i, i=1,2, \ldots, n fi,i=1,2,,n,将向量 x x x 的条目映射为标量数。

函数 f ( ⋅ ) f (\cdot) f() 的雅可比矩阵是 m m m × n n n 维偏导数矩阵,定义为
∂ f ∂ x = [ ∂ f 1 ∂ x 1 ∂ f 1 ∂ x 2 ⋯ ∂ f 1 ∂ x n ∂ f 2 ∂ x 1 ∂ f 2 ∂ x 2 ⋯ ∂ f 2 ∂ x n ⋮ ⋮ ⋮ ∂ f m ∂ x 1 ∂ f m ∂ x 2 … ∂ f m ∂ x n ] \frac{\partial f }{\partial x }=\left[\begin{array}{cccc} \frac{\partial f_1}{\partial x_1} & \frac{\partial f_1}{\partial x_2} & \cdots & \frac{\partial f_1}{\partial x_n} \\ \frac{\partial f_2}{\partial x_1} & \frac{\partial f_2}{\partial x_2} & \cdots & \frac{\partial f_2}{\partial x_n} \\ \vdots & \vdots & & \vdots \\ \frac{\partial f_m}{\partial x_1} & \frac{\partial f_m}{\partial x_2} & \ldots & \frac{\partial f_m}{\partial x_n} \end{array}\right] xf= x1f1x1f2x1fmx2f1x2f2x2fmxnf1xnf2xnfm
该矩阵的第一行由 f 1 ( ⋅ ) f_1(\cdot) f1() 分别相对于 x 1 、 x 2 、 … 、 x n x_1、x_2、\ldots、x_n x1x2xn 的偏导数组成。类似地,该矩阵的第二行由 f 2 ( ⋅ ) f_2(\cdot) f2() 分别相对于 x 1 、 x 2 、 … 、 x n x_1、x_2、\ldots、x_n x1x2xn 的偏导数组成。以同样的方式,我们构造雅可比矩阵的其他行。

在这里,我们展示了用于符号计算雅可比矩阵和创建 Python 函数的 Python 脚本,该函数将返回给定输入向量 x x x 的雅可比矩阵的数值。为了验证 Python 实现,让我们考虑以下测试用例函数
f = [ x 1 x 2 sin ⁡ ( x 1 ) cos ⁡ ( x 3 ) x 3 e x 4 ] f =\left[\begin{array}{c} x_1 x_2 \\ \sin \left(x_1\right) \\ \cos \left(x_3\right) \\ x_3 e^{x_4} \end{array}\right] f= x1x2sin(x1)cos(x3)x3ex4
其中 x x x
x = [ x 1 x 2 x 3 x 4 ] x =\left[\begin{array}{l} x_1 \\ x_2 \\ x_3 \\ x_4 \end{array}\right] x= x1x2x3x4

f 1 ( x 1 , x 2 , x 3 , x 4 ) = x 1 x 2 f 2 ( x 1 , x 2 , x 3 , x 4 ) = sin ⁡ ( x 1 ) f 3 ( x 1 , x 2 , x 3 , x 4 ) = cos ⁡ ( x 3 ) f 4 ( x 1 , x 2 , x 3 , x 4 ) = x 3 e x 4 \begin{aligned} & f_1\left(x_1, x_2, x_3, x_4\right)=x_1 x_2 \\ & f_2\left(x_1, x_2, x_3, x_4\right)=\sin \left(x_1\right) \\ & f_3\left(x_1, x_2, x_3, x_4\right)=\cos \left(x_3\right) \\ & f_4\left(x_1, x_2, x_3, x_4\right)=x_3 e^{x_4} \end{aligned} f1(x1,x2,x3,x4)=x1x2f2(x1,x2,x3,x4)=sin(x1)f3(x1,x2,x3,x4)=cos(x3)f4(x1,x2,x3,x4)=x3ex4
该函数的雅可比行列式是
∂ f ∂ x = [ ∂ f 1 ∂ x 1 ∂ f 1 ∂ x 2 ∂ f 1 ∂ x 3 ∂ f 1 ∂ x 4 ∂ f 2 ∂ x 1 ∂ f 2 ∂ x 2 ∂ f 2 ∂ x 3 ∂ f 2 ∂ x 4 ∂ f 3 ∂ x 1 ∂ f 3 ∂ x 2 ∂ f 3 ∂ x 3 ∂ f 3 ∂ x 4 ∂ f 4 ∂ x 1 ∂ f 4 ∂ x 2 ∂ f 4 ∂ x 3 ∂ f 4 ∂ x 4 ] \frac{\partial f }{\partial x }=\left[\begin{array}{llll} \frac{\partial f_1}{\partial x_1} & \frac{\partial f_1}{\partial x_2} & \frac{\partial f_1}{\partial x_3} & \frac{\partial f_1}{\partial x_4} \\ \frac{\partial f_2}{\partial x_1} & \frac{\partial f_2}{\partial x_2} & \frac{\partial f_2}{\partial x_3} & \frac{\partial f_2}{\partial x_4} \\ \frac{\partial f_3}{\partial x_1} & \frac{\partial f_3}{\partial x_2} & \frac{\partial f_3}{\partial x_3} & \frac{\partial f_3}{\partial x_4} \\ \frac{\partial f_4}{\partial x_1} & \frac{\partial f_4}{\partial x_2} & \frac{\partial f_4}{\partial x_3} & \frac{\partial f_4}{\partial x_4} \end{array}\right] xf= x1f1x1f2x1f3x1f4x2f1x2f2x2f3x2f4x3f1x3f2x3f3x3f4x4f1x4f2x4f3x4f4
通过计算这些偏导数,我们得到
∂ f ∂ x = [ x 2 x 1 0 0 cos ⁡ ( x 1 ) 0 0 0 0 0 − sin ⁡ ( x 3 ) 0 0 0 e x 4 x 3 e x 4 ] \frac{\partial f }{\partial x }=\left[\begin{array}{cccc} x_2 & x_1 & 0 & 0 \\ \cos \left(x_1\right) & 0 & 0 & 0 \\ 0 & 0 & -\sin \left(x_3\right) & 0 \\ 0 & 0 & e^{x_4} & x_3 e^{x_4} \end{array}\right] xf= x2cos(x1)00x100000sin(x3)ex4000x3ex4

import numpy as np
from sympy import *

init_printing()

x=MatrixSymbol('x',4,1)
f=Matrix([[x[0]*x[1]],
          [sin(x[0])],
          [cos(x[2])],
          [x[2]*E**(x[3])]])

JacobianSymbolic=f.jacobian(x)
JacobianFunction=lambdify(x,JacobianSymbolic)
testCaseVector=np.array([[1],[1],[1],[1]])
JacobianNumerical=JacobianFunction(testCaseVector)

定义符号向量“x”如下

x=MatrixSymbol('x',4,1)

非线性向量函数“f”定义为

=Matrix([[x[0]*x[1]],
          [sin(x[0])],
          [cos(x[2])],
          [x[2]*E**(x[3])]])
JacobianSymbolic=f.jacobian(x)
JacobianFunction=lambdify(x,JacobianSymbolic)

测试向量处评估雅可比行列式。

testCaseVector=np.array([[1],[1],[1],[1]])
JacobianNumerical=JacobianFunction(testCaseVector)

存储在“JacobianNumerical”中的结果是一个 NumPy 数值数组(矩阵),可用于进一步计算。

示例:TensorFlow雅可比矩阵

%tensorflow_version 1.x
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import SGD
import numpy as np
import statsmodels.api as sm
from sklearn.metrics import mean_squared_error
import matplotlib.pyplot as plt
from tqdm import tqdm
import tensorflow as tf

np.random.seed (245)
nobs =10000

x1= np.random.normal(size=nobs ,scale=1)
x2= np.random.normal(size=nobs ,scale=1)
x3= np.random.normal(size=nobs ,scale=1)
x4= np.random.normal(size=nobs ,scale=1)
x5= np.random.normal(size=nobs ,scale=1)

X= np.c_[np.ones((nobs ,1)),x1,x2,x3,x4,x5]

y= np.cos(x1) + np.sin(x2) + 2*x3 + x4 + 0.01*x5 + np.random.normal(size=nobs , scale=0.01)

LR=0.05

Neuron_Out=1
Neuron_Hidden1=64
Neuron_Hidden2=32

Activate_output='linear'
Activate_hidden='relu' 

Optimizer= SGD(lr=LR)
loss='mean_squared_error'

from sklearn.model_selection import train_test_split
x_train , x_test , y_train , y_test = train_test_split(X, y, test_size =0.15, random_state =77)

from tensorflow import set_random_seed
set_random_seed (245)

sess = tf.InteractiveSession()
sess.run(tf.initialize_all_variables())

model_ANN= Sequential()


model_ANN.add(Dense(Neuron_Hidden1, activation=Activate_hidden, input_shape=(6,), use_bias=True))
model_ANN.add(Dense(Neuron_Hidden2, activation=Activate_hidden, use_bias=True))

model_ANN.add(Dense(Neuron_Out, activation=Activate_output,use_bias=True))
model_ANN.summary()

model_ANN.compile(loss=loss, optimizer=Optimizer, metrics=['accuracy'])

history_ANN=model_ANN.fit(
x_train, 
y_train, 
epochs=125)

def jacobian_tensorflow(x):
    jacobian_matrix = []
    for m in range(Neuron_Out):
        grad_func = tf.gradients(model_ANN.output[:, m],model_ANN.input)
        gradients = sess.run(grad_func, feed_dict={model_ANN.input: x})  
        jacobian_matrix.append(gradients[0][0,:])

    return np.array(jacobian_matrix)

jacobian_tensorflow(x_train)

👉更新:亚图跨际

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

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

相关文章

Renesa Version Board开发RT-Thread 之Client(WIFI)和上位机的数据传输

目录 概述 1 系统框架 1.1 模块介绍 1.1 Version-Board 开发板 1.1.1 Vision-Board简介 1.1.2 Vision-Board的资源 1.2 框架介绍 2 上位机App 2.1 UI设计 2.2 代码实现 3 功能测试 3.1 网络连接 3.2 功能测试 概述 本文主要Renesa Version Board开发RT-Thread 之…

MIX滤镜大师 v4.9.6.5 — 内置超过130款滤镜

MIX滤镜大师内置了超过 130 款高品质滤镜,涵盖多种照片风格,包括胶片时代的专业彩色反转片滤镜、自动识别人脸并磨皮增白的自拍滤镜、讲究线条和影调的单色滤镜以及追求夸张色彩的 LOMO 滤镜。此版本已解锁全部功能,去除广告,提供…

量化交易backtrader实践(四)_评价统计篇(4)_多个回测的评价列表

本节目标 在第1节里,我们认识了backtrader内置评价指标,了解了每个指标的大概内容;在第2节里把内置评价指标中比较常用的指标进行了获取和输出;第3节里我们探索其他backtrader中没有的评价指标,并对pyfolio, empyrica…

图形化编程系统学习10

项目需求: 点击绿旗,可以使用键盘控制小兔子在地图上移动,收集食物,但只能在黄色道路上移动。 食物碰到小兔子会变大后隐藏,并发出声音。 收集完所有食物,回到温暖的小窝 。 思路解析 1、添加背景和角色…

【书生大模型实战营】进阶岛 第1关 探索 InternLM 模型能力边界

文章目录 【书生大模型实战营】进阶岛 第1关 探索 InternLM 模型能力边界学习任务Bad Case 1:Bad Case 2:Bad Case 3:Bad Case 4:Bad Case 5:Good Case 1:Good Case 2:Good Case 3:G…

requests:一个强大的HTTP请求Python库

我是东哥,一个热衷于用Python简化日常工作的技术爱好者。今天,我要和大家分享一个网络请求的Python利器——requests库。你是否曾经在编写代码时,需要从网络上获取数据,却对复杂的HTTP协议感到头疼?requests库将帮你轻…

LMDeploy 量化部署进阶实践

1 配置LMDeploy环境 1.1 InternStudio开发机创建与环境搭建 打开InternStudio平台,进入如下界面并按箭头指示顺序点击创建开发机。 点选开发机,自拟一个开发机名称,选择Cuda12.2-conda镜像。 我们要运行参数量为7B的InternLM2.5,…

AI 内容创作:思考与实践

文章目录 LLM 与 RAGLLMRAGRAG 定制策略AI 写作助手演示 内容层次结构与内容深度优化有效的主题与段落结构内容深度的多样性与独特性提高文本逻辑性与连贯性模拟实践 内容评测与优化迭代机制内容评测自动迭代优化机制评估指标模拟实践 个性化写作与 AI 协同写作用户画像与需求分…

【C++ 第十八章】C++11 新增语法(3)

前情回顾: 【C11 新增语法(1):1~6 点】 C11出现与历史、花括号统一初始化、initializer_list初始化列表、 auto、decltype、nullptr、STL的一些新变化 【C11 新增语法(2):7~8 点】 右值引用和…

香橙派入手第一天

一、开箱 拿到快递回来以后,兴冲冲的把快递拆开,里面一共有一下几样东西,一个板卡,一个充电器,一个小风扇,还有一些安装用的零件和一把小螺丝刀。 值得一提的是这个充电器是最高支持65w的typec-typec的充电…

回溯法-0/1背包问题

什么是回溯法? 回溯法是一种搜索算法,它通过深度优先搜索的方式来解决决策问题。它从根节点开始,逐步扩展节点,直到找到所有可能的解。 回溯法的基本思想 开始节点:从根节点出发,这个节点是解空间的起点…

LLM 教程——如何为特定任务定制微调 BERT

通过本文,您将学会如何为特定的自然语言处理任务(如分类、问答等)微调BERT。 1、引言 BERT 是一个强大的预训练语言模型,可以用于多种下游任务,只需进行极小的修改。通过微调 BERT,您可以利用它的大规模知…

系统设计:一致性哈希的概念

目录 一、介绍 二、问题提出 三、朴素实施 四、一致性哈希 4.1 关闭服务器 4.2 添加新服务器 五、分布不均 5.1 虚拟节点 5.2 应用 六、结论 资源 一、介绍 我们生活在一个每天都会生成大量数据的世界里。在大公司中,几乎不可能将所有数据存储在单个服务器…

【区间dp、前缀和】 P1220 关路灯 题解

关路灯 题目描述 某一村庄在一条路线上安装了 n n n 盏路灯,每盏灯的功率有大有小(即同一段时间内消耗的电量有多有少)。老张就住在这条路中间某一路灯旁,他有一项工作就是每天早上天亮时一盏一盏地关掉这些路灯。 为了给村里…

APACHE NIFI—wait、notify组件报拒绝连接访问的报错

报错文字: Wait[idele44704-6fb6-1b60-ffff-ffffdcofbba2]Failed to process session due to Failed to get signal for c84c4aec-1287-4216-b1a2-f5c6fod4a3b7 due to java.net.ConnectException:Connection refused: org.apache.nifi.processor.exception.Proces…

jmeter响应断言、json断言、断言持续时间操作

一、响应断言 Apply to:断言应用的范围,这里默认,通常发出一个请求只触发一个服务器测试字段 响应文本,response响应体内的信息响应代码: 响应码,一般是200响应信息:响应码后面的返回的信息&am…

zdppy+vue3+onlyoffice文档管理系统实战 20240831上课笔记 继续完善登录功能

遗留的问题 1、整合验证码的接口2、渲染验证码3、实现验证码校验的功能4、验证码校验通过之后,再校验登录功能 验证码框架怎么使用 安装: pip install zdppy_captcha使用示例: import zdppy_api as api import zdppy_captcha import zdp…

Docker compose 安装 ELK

1. 简介 方案概述 我们使用 Filebeat 作为日志收集器,接入到 Redis 队列,然后消费队列中的日志数据流转到 Logstash 中进行解析处理,最后输出到 Elasticsearch 中,再由 Kibana 展示到页面上。我们采用 Elasticsearch 3 节点集群…

hello树先生——AVL树

AVL树 一.什么是AVL树二.AVL树的结构1.AVL树的节点结构2.插入函数3.旋转调整 三.平衡测试 一.什么是AVL树 二叉搜索树虽可以缩短查找的效率,但如果数据有序或接近有序二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下。…

【计组 | Cache原理】讲透Cache的所有概念与题型方法

Cache 写在前面:高速缓存Cache一直408中的重点以及绝对的难点,前几天我在复习计组第三章的知识,Cache这一节把我困住了,我发现很多概念我都不记得了,一些综合性强的计算题根本无从下手,我深知Cache对于每个…