Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Z3 一阶微分方程作为一阶公式的编码 有人能帮我指出以下方程使用一阶公式的最佳编码方式,以便将其作为SMT解算器的输入吗??_Z3_Smt - Fatal编程技术网

Z3 一阶微分方程作为一阶公式的编码 有人能帮我指出以下方程使用一阶公式的最佳编码方式,以便将其作为SMT解算器的输入吗??

Z3 一阶微分方程作为一阶公式的编码 有人能帮我指出以下方程使用一阶公式的最佳编码方式,以便将其作为SMT解算器的输入吗??,z3,smt,Z3,Smt,你可以很容易地在Z3中对微分方程进行编码,因为它只是n^2+n个实常数(n^2来自a_ij,n来自b_i)和n个实变量(x_i)上的n个线性(仿射)函数的集合。您可以直接在Z3中对其进行编码 dotx_1 = a_11 * x_1 + a_12 * x_2 + a_13 * x_3 + ... + a_1n * x_n + b_1 dotx_2 = a_21 * x_1 + a_22 * x_2 + a_13 * x_3 + ... + a_2n * x_n + b_2 ... dotx_n =

你可以很容易地在Z3中对微分方程进行编码,因为它只是n^2+n个实常数(n^2来自a_ij,n来自b_i)和n个实变量(x_i)上的n个线性(仿射)函数的集合。您可以直接在Z3中对其进行编码

dotx_1 = a_11 * x_1 + a_12 * x_2 + a_13 * x_3 + ... + a_1n * x_n + b_1
dotx_2 = a_21 * x_1 + a_22 * x_2 + a_13 * x_3 + ... + a_2n * x_n + b_2
...
dotx_n = a_n1 * x_1 + a_n2 * x_2 + a_n3 * x_3 + ... + a_nn * x_n + b_n
以下是Z3Py中2x2版本的链接:

然而,编码常微分方程的解将是困难的,因为线性常微分方程的解涉及指数(超越函数)。对于解可以表示为多项式(在a_ij常数、x_i变量和/或时间变量t上)的常微分方程类,可以将(精确)解编码为Z3中的多项式(参见,例如,[1])

然而,对于涉及超越论的一般解决方案,您有许多可能的选择,这取决于您试图实现的目标。一种选择是将超验函数建模为未解释的函数。在各种SMT-LIB基准测试中有一些工作可以做到这一点,但我对这些不太熟悉,所以希望其他人能够指出它们的链接。如果你想证明一些关于这些常微分方程解的引理,这将是非常有用的。一些工具,如MetiTarski,保持了超越函数的上下限近似值(例如,使用截断泰勒级数,这是多项式,因此在Z3中可以表示),但我不知道这在Z3中的地位,但看起来可能有一些支持,Leonardo可以对其进行更多评论[6]

如果您正在进行可达性计算,那么您可能会过度接近可达集,这可以通过ODE解决方案的更简单(更抽象)表示来完成。例如,您可以应用杂交技术[2]的一种变体,并将线性动力学与矩形动力学过度近似,例如,划分状态空间的一个有趣子集,然后在每个分区中,在每个维度dotx_i=a_i1 x_1+a_i2 x_2+…+下和上近似每个维度b_i和dothatx_i在[C,D]中,对于一些常数C和D,选择以确保原始(具体)x_i的每个解都包含在过近似(抽象)解hatx_i集中。从时间0到t的hatx_i的解集在区间[ct+x_i(0),dt+x_i(0)]中,其中x_i(0)是时间0时x_i的初始条件,t是要计算到达设置的有界实时。您可以在所有维度上执行此操作。要计算C,D(每个分区和每个维度可能会有所不同),取决于您对可靠性的关注程度,您可以简单地(从数值上)最大化和最小化每个分区中的原始ODE dotx_i

从您的其他帖子来看,您似乎正在尝试模拟混合系统。模拟在试图表示超越性时仍然会遇到问题,因为即使尝试对一条轨迹建模(而不是对一组可能的轨迹建模),也需要表示通常是超越性的解决方案。据我所知,这仍然是在数值模拟社区中进行的[参见,例如,3],但有关于“保证”(声音)积分的工作,它提供了数值解与实际(分析)解之间的距离的界限[4,5]

[1] 线性向量场族的符号可达性计算。Gerardo Lafferire、George J.Pappas和Sergio Yovine。符号计算杂志,32(3):231-253,2001年9月

[2] E.Asarin,T.Dang,A.Girard,非线性系统分析的杂交方法,信息学报,43:7,2007,451-476

[3] 《计算矩阵指数的十九种可疑方法》,二十五年后,克里夫·莫勒和查尔斯·范·洛恩,《暹罗评论》,第45卷,第1期(2003年3月),第3-49页

[4] 解析函数的自动保证积分,Martin C.Eiermann,BIT数值数学,1989

[5] GRKLib:一个有保证的龙格库塔图书馆,O.布依苏,M.马特尔,《科学计算、计算机算术和有效数字》,2006年


[6] 梅特塔斯基证明的实代数策略,格兰特·奥尔尼·帕斯莫尔,劳伦斯·C·鲍尔森和莱昂纳多·德·莫拉。智能计算机数学会议(CICM/AISC),2012,

您可以轻松地在Z3中对微分方程进行编码,因为它只是一组n^2+n个实常数(n^2来自a_ij,n来自b_i)和n个实变量(x_i)上的n个线性(仿射)函数。您可以直接在Z3中对其进行编码

dotx_1 = a_11 * x_1 + a_12 * x_2 + a_13 * x_3 + ... + a_1n * x_n + b_1
dotx_2 = a_21 * x_1 + a_22 * x_2 + a_13 * x_3 + ... + a_2n * x_n + b_2
...
dotx_n = a_n1 * x_1 + a_n2 * x_2 + a_n3 * x_3 + ... + a_nn * x_n + b_n
以下是Z3Py中2x2版本的链接:

然而,编码常微分方程的解将是困难的,因为线性常微分方程的解涉及指数(超越函数)。对于解可以表示为多项式(在a_ij常数、x_i变量和/或时间变量t上)的常微分方程类,可以将(精确)解编码为Z3中的多项式(参见,例如,[1])

然而,对于涉及超越论的一般解决方案,您有许多可能的选择,这取决于您试图实现的目标。一种选择是将超验函数建模为未解释的函数。在各种SMT-LIB基准测试中有一些工作可以做到这一点,但我对这些不太熟悉,所以希望其他人能够指出它们的链接。如果你想证明一些关于这些常微分方程解的引理,这将是非常有用的。一些工具,如MetiTarski,保持了超越函数的上下限近似值(例如,使用截断泰勒级数,这是多项式,因此在Z3中可以表示),但我不知道这在Z3中的地位,但看起来可能有一些支持,Leonardo可以对其进行更多评论[6]

如果您正在进行可达性计算,那么