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

2024-08-30 16:12

本文主要是介绍Python和C++(CUDA)及Arduino雅可比矩阵导图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

🎯要点

  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 tfnp.random.seed (245)
nobs =10000x1= 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.05Neuron_Out=1
Neuron_Hidden1=64
Neuron_Hidden2=32Activate_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)

👉更新:亚图跨际

这篇关于Python和C++(CUDA)及Arduino雅可比矩阵导图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1121302

相关文章

python: 多模块(.py)中全局变量的导入

文章目录 global关键字可变类型和不可变类型数据的内存地址单模块(单个py文件)的全局变量示例总结 多模块(多个py文件)的全局变量from x import x导入全局变量示例 import x导入全局变量示例 总结 global关键字 global 的作用范围是模块(.py)级别: 当你在一个模块(文件)中使用 global 声明变量时,这个变量只在该模块的全局命名空

【C++ Primer Plus习题】13.4

大家好,这里是国中之林! ❥前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。有兴趣的可以点点进去看看← 问题: 解答: main.cpp #include <iostream>#include "port.h"int main() {Port p1;Port p2("Abc", "Bcc", 30);std::cout <<

C++包装器

包装器 在 C++ 中,“包装器”通常指的是一种设计模式或编程技巧,用于封装其他代码或对象,使其更易于使用、管理或扩展。包装器的概念在编程中非常普遍,可以用于函数、类、库等多个方面。下面是几个常见的 “包装器” 类型: 1. 函数包装器 函数包装器用于封装一个或多个函数,使其接口更统一或更便于调用。例如,std::function 是一个通用的函数包装器,它可以存储任意可调用对象(函数、函数

C++11第三弹:lambda表达式 | 新的类功能 | 模板的可变参数

🌈个人主页: 南桥几晴秋 🌈C++专栏: 南桥谈C++ 🌈C语言专栏: C语言学习系列 🌈Linux学习专栏: 南桥谈Linux 🌈数据结构学习专栏: 数据结构杂谈 🌈数据库学习专栏: 南桥谈MySQL 🌈Qt学习专栏: 南桥谈Qt 🌈菜鸡代码练习: 练习随想记录 🌈git学习: 南桥谈Git 🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈🌈�

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Python编程】Linux创建虚拟环境并配置与notebook相连接

1.创建 使用 venv 创建虚拟环境。例如,在当前目录下创建一个名为 myenv 的虚拟环境: python3 -m venv myenv 2.激活 激活虚拟环境使其成为当前终端会话的活动环境。运行: source myenv/bin/activate 3.与notebook连接 在虚拟环境中,使用 pip 安装 Jupyter 和 ipykernel: pip instal

06 C++Lambda表达式

lambda表达式的定义 没有显式模版形参的lambda表达式 [捕获] 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 有显式模版形参的lambda表达式 [捕获] <模版形参> 模版约束 前属性 (形参列表) 说明符 异常 后属性 尾随类型 约束 {函数体} 含义 捕获:包含零个或者多个捕获符的逗号分隔列表 模板形参:用于泛型lambda提供个模板形参的名

【机器学习】高斯过程的基本概念和应用领域以及在python中的实例

引言 高斯过程(Gaussian Process,简称GP)是一种概率模型,用于描述一组随机变量的联合概率分布,其中任何一个有限维度的子集都具有高斯分布 文章目录 引言一、高斯过程1.1 基本定义1.1.1 随机过程1.1.2 高斯分布 1.2 高斯过程的特性1.2.1 联合高斯性1.2.2 均值函数1.2.3 协方差函数(或核函数) 1.3 核函数1.4 高斯过程回归(Gauss

【学习笔记】 陈强-机器学习-Python-Ch15 人工神经网络(1)sklearn

系列文章目录 监督学习:参数方法 【学习笔记】 陈强-机器学习-Python-Ch4 线性回归 【学习笔记】 陈强-机器学习-Python-Ch5 逻辑回归 【课后题练习】 陈强-机器学习-Python-Ch5 逻辑回归(SAheart.csv) 【学习笔记】 陈强-机器学习-Python-Ch6 多项逻辑回归 【学习笔记 及 课后题练习】 陈强-机器学习-Python-Ch7 判别分析 【学

6.1.数据结构-c/c++堆详解下篇(堆排序,TopK问题)

上篇:6.1.数据结构-c/c++模拟实现堆上篇(向下,上调整算法,建堆,增删数据)-CSDN博客 本章重点 1.使用堆来完成堆排序 2.使用堆解决TopK问题 目录 一.堆排序 1.1 思路 1.2 代码 1.3 简单测试 二.TopK问题 2.1 思路(求最小): 2.2 C语言代码(手写堆) 2.3 C++代码(使用优先级队列 priority_queue)