精华内容
下载资源
问答
  • 其次,在每次 EDF 运行中,二元矩阵抽样 (BMS) 策略为每个变量提供相同的选择机会并生成不同的变量组合,用于生成子集总体以构建子模型总体。 然后,采用模型总体分析(MPA)来寻找交叉验证均方根误差(RMSECV)较...
  • 数据挖掘——为什么使用哑变量?哑变量有哪些作用?哪些情况应该使用哑变量? 直接给链接: https://www.cnblogs.com/sddai/p/8834373.html

    数据挖掘——为什么使用哑变量?哑变量有哪些作用?哪些情况应该使用哑变量?


    直接给链接:
    https://www.cnblogs.com/sddai/p/8834373.html

    展开全文
  • MATLAB教程(1) MATLAB 基础知识

    万次阅读 多人点赞 2017-10-26 20:57:32
    不管是什么类型的数据,所有的额MATLAB变量都是数组。矩阵是常用于线性代数的二维数组。 1.数组的创建 在一个单行中创建一个拥有四个元素的数组,其各个元素之间用逗号或者空格隔开。 例如: a = [1 2 3...

    初学。去年看过一点点MATLAB,很久不用,遗忘惊人。为了加深自己的印象,扎实基础,现将官网上的基础教程做简单的翻译。

    首先,以下从九个部分简单介绍基础入门知识。

    第一部分:MATLAB显示桌面的基本布局

    https://cn.mathworks.com/help/matlab/learn_matlab/desktop.html

    1.启动MATLAB后,桌面会显示默认布局,主要有以下三个部分:

    • 当前文件夹
    • 命令行窗口
    • 工作空间

    2.在MATLAB中一般需要创建变量和调用函数。

    直接在命令行中输入变量名以及其值即可(比如:a = 1),多个变量的创建同理,不再赘述。

    需要注意的是,如果没有定义输出变量,MATLAB会使用一个名为ans的变量来储存计算结果。

    这里写图片描述

    3.如果语句以分号结束,表示MATLAB内部会执行这一运算,但是命令行不对计算结果进行输出。

    第二部分:矩阵和数组

    https://cn.mathworks.com/help/matlab/learn_matlab/matrices-and-arrays.html

    大多数的编程语言一次性只能对一个数进行操作,而MATLAB主要被用来对整个矩阵或者数组进行操作。不管是什么类型的数据,所有的额MATLAB变量都是数组。矩阵是常用于线性代数的二维数组。

    1.数组的创建

    • 在一个单行中创建一个拥有四个元素的数组,其各个元素之间用逗号或者空格隔开。
      例如:
      a = [1 2 3 4]
      这种数组叫做单行矩阵(行向量)。
    • 创建一个多行矩阵,其各个行之间用分号隔开。
      例如:
      b = [1,2;3,4;5,6]
    • 还可以用函数来创建矩阵。
      例如:创建一个5行1列每一个元素都是0的列向量。
      z = zero(5,1)
      这里写图片描述

    2.矩阵和数组的操作

    • 在MATLAB中,允许用一个单一的运算或者函数对矩阵中所有的数据进行处理(操作)。

    例如:
    这里写图片描述

    • 如果要对矩阵进行转置,则使用单引号(‘)
      例如:a’
      这里写图片描述

    • 可以通过执行标准矩阵乘法,通过*运算符来计算内积。

    这是我自己的结果截图……很明显是不对滴~
    这里写图片描述

    然后下面是官网爸爸给的运行结果。
    这里写图片描述

    我们都知道,一个矩阵与它的逆矩阵相乘的结果的确应该等于单位矩阵。至于这里为什么不对,还希望各位大佬们能不吝赐教,大恩不言谢~

    这里要注意的是,p不是一个整数值矩阵,MATLAB存储数字是以浮点型存储的,真实值和它的浮点数在运算时有小小的不同,我们可以使用格式化命令,显示更多的小数位数。

    比如:
    format long
    p = a*inv(a)

    可以使用format short来重置到较短格式的使用。

    • x = a.*a用来表示对矩阵的每一个元素做平方操作。
      若需要对每一个元素做立方运算,则用x = a.^3(如图)

    这里写图片描述

    • 矩阵的扩充
      行方向上:A = [a,a]
      列方向上:A = [a; a]

      这里写图片描述

    • 复数
      复数由实部和虚部组成,它的虚部是-1的平方根。
      即sqrt(-1) = 0.0000 + 1.0000i
      一般用i或者j来代表复数的虚部部分。

    第三部分:数组的索引

    https://cn.mathworks.com/help/matlab/learn_matlab/array-indexing.html

    MATLAB中的每一个变量都是可以存储多个值的数组。如果想要使用数组中的某一个值,则需要用到索引。

    1.单个元素的索引

    从一个数组中索引某个元素一般有两种方法:
    第一种比较常见:数组名加要索引的元素所在的行和列,例如A(2,4) = 8。
    第二种不太常用:数组名加一个下标,该下标按列遍历。A(14) = 8。【这里不太好表达,上图吧~】

    这里写图片描述

    再多说一句,其实A(14)中的14表示按列数第14个元素!
    利用下标索引元素这种方式叫做线性索引
    注意:如果索引超出矩阵维度,MATLAB会报错。

    2.多个元素的索引
    引用数组的多个元素,使用冒号操作符m : n(m,n分别表示索引开始和结束的范围)

    例1索引第二列第1个元素到第3个元素。
    例2索引第三行全部元素

    这里写图片描述

    不难发现,索引行则将行数放在逗号前;索引列要将列数放在逗号后。

    另外,冒号运算符也可以帮助创建一组等距的矢量值,例如:
    B = 0:10:100
    —->B = 0 10 20 30 40 50 60 70 80 90 100
    输出一个从0到100步长为10的数组。

    第四部分:工作空间变量

    https://cn.mathworks.com/help/matlab/learn_matlab/workspace.html

    工作区包含你创建的变量或者从数据文件或其他程序导入到MATLAB中的变量。例如,我现在创建两个变量 :
    A = magic(4)
    B = rand(3,5,2)

    • 我们可以通过whos来看工作空间的内容。

    这里写图片描述

    • 工作区的变量在退出MATLAB后就不存在了。
      所以一般使用save myfile.mat命令来保存工作区变量以便以后使用。
      保存操作将当前工作文件夹中的工作区保存在一个压缩文件中,该文件的扩展名为.MAT,称为MAT文件。
    • 如果想要清空工作空间里的所有变量,则需使用clear命令
    • 使用load myfile.mat命令将MAT文件中的数据恢复到工作区

    第五部分:文本和字符

    https://cn.mathworks.com/help/matlab/learn_matlab/character-strings.html

    • 在处理文本时,将其中的字符序列用单引号括起来,可以将文本分配给变量。
      例如:myText = ‘Hello, world’;
    • 如果文本本身包括一个单引号,则在定义时使用两个单引号。
      例如:otherText = ‘You”re right’

    这里写图片描述

    同所有的MATLAB变量一样,上述创建的两个变量也都是数组,他们的数据类型是字符型。注意:字符数组也可以像数字数组那样用方括号括起来表示。

    • 要将数字转换成字符,就要用到函数。例如num2str()或者int2str()。

      这里写图片描述

    第六部分:函数调用

    https://cn.mathworks.com/help/matlab/learn_matlab/calling-functions.html

    MATLAB提供了大量函数来执行计算任务,函数相当于其他编程语言中的子程序或方法。
    例如求最大值的函数,max()。

    • 将输入参数用括号括起来,如果有多个参数,则将参数用逗号隔开。
      一般通过将函数值赋给某个变量这种方式来返回(输出)函数值,如果有多个输出参数,则需将它们用方括号括起来。
      例如:
      A = [1 3 5];
      [maxA,location] = max(A)

    这里写图片描述

    • 可以用单引号括住任何字符进行输入。
      例如:
      disp(‘hello world’)
      ===>输出 hello world

    disp()用来显示变量的内容,括号里可以是字符,结构体,矩阵等等,类似于c语言的printf()。


    • clc函数被用来清空命令行。

    第七部分:二、三维图

    https://cn.mathworks.com/help/matlab/learn_matlab/plots.html

    • 折线图

      (1) 画图

      x = 0:pi/1000:2*pi;
      y = sin(x);
      plot(x,y)

    这里x就用到了前面说到的索引。x表示0到2*pi之间步长为pi/100的值。
    二维图如下:

    这里写图片描述

    这里多说一下步长,步长决定了横轴取值的密集程度。下图是将步长改为pi/10之后的图像。

    这里写图片描述

    对比图中标记处不难发现,步长增大,图像的精确度变低,所以这里尽量保证步长足够小,使得x可以取到足够多的值

    (2) 坐标
    我们可以对横轴和纵轴分别命名,并对上述正弦图像加上标题。

    这里写图片描述

    (3)plot(x, y, ‘r–’)
    通过在图像函数中添加第三个输入参数,可以用红色虚线绘制与原来相同的变量。

    这里写图片描述

    其中第三个参数规定了线条的颜色、样式和标记的字符。(例如上例中的‘r–’表示红色虚线。)标记是指对每一个数据点用参数所给的标记形式进行表示。(例如’g:o’表示用‘o’连成一条绿色的线输出=.=我这个解释没谁了,讲不清楚还是上图吧…..)

    这里写图片描述

    这样的标记除了’o’,还有‘+’,‘*’等等。

    这时候你会发现,我们开始为第一个图定义的标题和标签不再显示在当前图形窗口中了。这是因为在默认情况下,重新调用一个绘图函数,MATLAB就会清除数据,重置轴和其他元素来准备新的绘图。
    若要将图添加到现有图形,使用hold命令即可。

    这里写图片描述

    在使用hold off或close the window命令之前,所有的图都会出现在当前的图形窗口中。

    • 3D图像

      3D图像通常用有两个参数的函数来定义一个曲面,z = f(x,y) 。
      对于z,首先使用meshgrid命令在函数定义域内创建若干(x,y)。

    这里写图片描述

    这里需要注意的是,在matlab中,.2代表0.2
    (-2:.2:2)表示在-2到2的区间上以0.2的长度为间隔的向量;

    当变量x是由向量、数组或隔开的点组成(如x=0:0.1:1)时,则后面有x变量的方程要加点 (.),例如:y=x.*exp(-x.*2)
    但是如果x是连续的变量,如syms x,则方程写成y=x*exp(-x*2)。

    • Subplots
      你可以用subplot函数在同一窗口的不同区域显示多个图像。
      subplots函数的前两个输入参数显示当前窗口每行每列的图像数量,第三个输入参数指定活动区域。例如,在图形窗口创建四个区域来分别输出图像。

    这里写图片描述

    mesh()生成由X,Y和Z指定的网线面,由C指定的颜色的三维网格图。

    第八部分:程序和脚本

    https://cn.mathworks.com/help/matlab/learn_matlab/scripts.html

    • 示例脚本(从均匀分布中生成随机数据并计算平均值。绘制数据和平均值。)
      用edit命令来创建脚本:
      edit plotrand
      这样就打开了一个叫plotrand.m的空文件,输入产生随机数向量的代码:
    n = 50;
    r = rand(n,1);
    plot(r)
    

    然后,添加代码在图中绘制水平线:

    m = mean(r);
    hold on
    plot([0,n],[m,m])
    hold off
    title('Mean of Random Uniform Data')
    

    在写代码过程中,可用(%)在代码之间添加注释。
    最后保存脚本,在命令行窗口输入plotrand运行脚本。

    这里写图片描述

    • 循环和条件语句
      在脚本中,可以循环使用部分代码,并且通过使用(for,while,if,switch等关键字)来执行这部分代码。
      例如,创建一个叫calcmean.m的脚本,利用for循环计算五个随机样本的平均数和总平均数。
    nsamples = 5;
    npoints = 50;
    
    for k = 1:nsamples
        currentData = rand(npoints,1);
        sampleMean(k) = mean(currentData);
    end
    overallMean = mean(sampleMean)

    现在,修改for循环,以便每次迭代时都可以查看结果。在运行脚本时,会先显示中间结果,再计算总体均值。

    for k = 1:nsamples
       iterationString = ['Iteration #',int2str(k)];
       disp(iterationString)
       currentData = rand(npoints,1);
       sampleMean(k) = mean(currentData)
    end
    overallMean = mean(sampleMean)
    
    calcmean

    在编辑器中,在calcmean.m的最后添加条件语句,使它根据不同的总体均值返回不同的信息。

    if overallMean < .49
       disp('Mean is less than expected')
    elseif overallMean > .51
       disp('Mean is greater than expected')
    else
       disp('Mean is within the expected range')
    end
    • 脚本位置
      MATLAB中,要运行脚本,文件必须位于当前文件夹或搜索路径中的文件夹中。
      默认情况下,MATLAB安装程序创建的MATLAB文件夹位于搜索路径上。如果要在另一个文件夹中存储和运行程序,需要将其添加到搜索路径中:在当前文件夹浏览器中选择文件夹,右键单击,然后选择“添加到路径”。

    第九部分:帮助和文档

    https://cn.mathworks.com/help/matlab/learn_matlab/help.html

    • 使用doc命令在单独的窗口中打开函数文档。

      doc mean

    • 键入左圆括号后暂停,MATLAB在命令窗口中就会显示函数提示(函数文档的语法部分)。

      mean(

    • 使用帮助命令后,在命令窗口中查看函数的简单用法概括。

      help mean

    以上就是MATLAB的基础入门知识,欢迎指正呦~

    展开全文
  • 属性与变量的区别

    千次阅读 2020-08-14 21:52:12
    属性是变量的附加解释,某变量可以称作属性,java,c#等面向对象语言环境使用较多。 例如面向对象编程写一个学生类,里面有name,age等变量;我们就可以称name是学生类名字属性age是学生类年龄属性。 也可以把学生类...

    属性变量的附加解释,某变量可以称作属性,java,c#等面向对象语言环境使用较多。
    例如面向对象编程写一个学生类,里面有name,age等变量;我们就可以称name是学生类名字属性age是学生类年龄属性。
    也可以把学生类类型声明成变量称之为学生属性
    属性是变量基础上的演称,只是相对而言的没有绝对,常说私有属性,公有属性等,指的都是变量。
    https://blog.csdn.net/weixin_41913666/article/details/79748962

    展开全文
  • 2014年高考数学一轮复习 考点热身训练 10.2用样本估计总体变量间的相关关系
  • 介绍了单变量和多变量的时间序列分析的建模、定阶方法。多变量时间序列也称向量时间序列。
  • 使用VAR模型和复杂网络测度对多变量时间序列进行因果分析
  • 2011年高考数学 考点44 随机抽样、用样本估计总体变量间的相关关系、统计案例
  • 2012年高考数学 考点46 随机抽样、用样本估计总体变量间的相关关系、统计案例
  • 2010年高考数学 考点26 随机抽样、用样本估计总体变量间的相关关系、统计案例
  • 【UEFI基础】UEFI变量基础

    千次阅读 2016-10-20 21:38:53
    【UEFI基础】UEFI变量基础。

    接口

    UEFI中操作变量的接口主要是下面的几个:

    获取变量的接口:

    /**
      Returns the value of a variable.
    
      @param[in]       VariableName  A Null-terminated string that is the name of the vendor's
                                     variable.
      @param[in]       VendorGuid    A unique identifier for the vendor.
      @param[out]      Attributes    If not NULL, a pointer to the memory location to return the
                                     attributes bitmask for the variable.
      @param[in, out]  DataSize      On input, the size in bytes of the return Data buffer.
                                     On output the size of data returned in Data.
      @param[out]      Data          The buffer to return the contents of the variable.
    **/
    typedef
    EFI_STATUS
    (EFIAPI *EFI_GET_VARIABLE)(
      IN     CHAR16                      *VariableName,
      IN     EFI_GUID                    *VendorGuid,
      OUT    UINT32                      *Attributes,    OPTIONAL
      IN OUT UINTN                       *DataSize,
      OUT    VOID                        *Data
      );

    设置变量的接口:

    /**
      Sets the value of a variable.
    
      @param[in]  VariableName       A Null-terminated string that is the name of the vendor's variable.
                                     Each VariableName is unique for each VendorGuid. VariableName must
                                     contain 1 or more characters. If VariableName is an empty string,
                                     then EFI_INVALID_PARAMETER is returned.
      @param[in]  VendorGuid         A unique identifier for the vendor.
      @param[in]  Attributes         Attributes bitmask to set for the variable.
      @param[in]  DataSize           The size in bytes of the Data buffer. Unless the EFI_VARIABLE_APPEND_WRITE, 
                                     EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS, or 
                                     EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS attribute is set, a size of zero 
                                     causes the variable to be deleted. When the EFI_VARIABLE_APPEND_WRITE attribute is 
                                     set, then a SetVariable() call with a DataSize of zero will not cause any change to 
                                     the variable value (the timestamp associated with the variable may be updated however 
                                     even if no new data value is provided,see the description of the 
                                     EFI_VARIABLE_AUTHENTICATION_2 descriptor below. In this case the DataSize will not 
                                     be zero since the EFI_VARIABLE_AUTHENTICATION_2 descriptor will be populated). 
      @param[in]  Data               The contents for the variable.
    **/
    typedef
    EFI_STATUS
    (EFIAPI *EFI_SET_VARIABLE)(
      IN  CHAR16                       *VariableName,
      IN  EFI_GUID                     *VendorGuid,
      IN  UINT32                       Attributes,
      IN  UINTN                        DataSize,
      IN  VOID                         *Data
      );

    获取下一个变量的接口:

    /**
      Enumerates the current variable names.
    
      @param[in, out]  VariableNameSize The size of the VariableName buffer.
      @param[in, out]  VariableName     On input, supplies the last VariableName that was returned
                                        by GetNextVariableName(). On output, returns the Nullterminated
                                        string of the current variable.
      @param[in, out]  VendorGuid       On input, supplies the last VendorGuid that was returned by
                                        GetNextVariableName(). On output, returns the
                                        VendorGuid of the current variable.
    **/
    typedef
    EFI_STATUS
    (EFIAPI *EFI_GET_NEXT_VARIABLE_NAME)(
      IN OUT UINTN                    *VariableNameSize,
      IN OUT CHAR16                   *VariableName,
      IN OUT EFI_GUID                 *VendorGuid
      );

    获取系统中的变量信息:

    /**
      Returns information about the EFI variables.
    
      @param[in]   Attributes                   Attributes bitmask to specify the type of variables on
                                                which to return information.
      @param[out]  MaximumVariableStorageSize   On output the maximum size of the storage space
                                                available for the EFI variables associated with the
                                                attributes specified.
      @param[out]  RemainingVariableStorageSize Returns the remaining size of the storage space
                                                available for the EFI variables associated with the
                                                attributes specified.
      @param[out]  MaximumVariableSize          Returns the maximum size of the individual EFI
                                                variables associated with the attributes specified.
    
      @retval EFI_SUCCESS                  Valid answer returned.
      @retval EFI_INVALID_PARAMETER        An invalid combination of attribute bits was supplied
      @retval EFI_UNSUPPORTED              The attribute is not supported on this platform, and the
                                           MaximumVariableStorageSize,
                                           RemainingVariableStorageSize, MaximumVariableSize
                                           are undefined.
    
    **/
    typedef
    EFI_STATUS
    (EFIAPI *EFI_QUERY_VARIABLE_INFO)(
      IN  UINT32            Attributes,
      OUT UINT64            *MaximumVariableStorageSize,
      OUT UINT64            *RemainingVariableStorageSize,
      OUT UINT64            *MaximumVariableSize
      );

    参数说明已在注释中,这里需要关心的是Attributes这个参数,它具体有以下的取值:

    ///
    /// Attributes of variable.
    ///
    #define EFI_VARIABLE_NON_VOLATILE                            0x00000001
    #define EFI_VARIABLE_BOOTSERVICE_ACCESS                      0x00000002
    #define EFI_VARIABLE_RUNTIME_ACCESS                          0x00000004
    ///
    /// This attribute is identified by the mnemonic 'HR'
    /// elsewhere in this specification.
    ///
    #define EFI_VARIABLE_HARDWARE_ERROR_RECORD                   0x00000008
    ///
    /// Attributes of Authenticated Variable
    ///
    #define EFI_VARIABLE_AUTHENTICATED_WRITE_ACCESS              0x00000010
    #define EFI_VARIABLE_TIME_BASED_AUTHENTICATED_WRITE_ACCESS   0x00000020
    #define EFI_VARIABLE_APPEND_WRITE                            0x00000040
    

    其中常用的就是前面的三种:

    EFI_VARIABLE_NON_VOLATILE:表示设置变量时将变量写入到非易失介质中,比如SpiFlash;

    EFI_VARIABLE_BOOTSERVICE_ACCESS:表示设置的变量在UEFI阶段都可以访问,更具体的说是在调用gBS->ExitBootServices()之前都可以访问;

    EFI_VARIABLE_RUNTIME_ACCESS:表示设置的变量在OS下都可以访问,当然前提是OS是UEFI兼容的。

    接口初始化

    变量的接口是在gRT中的,它们并非一开始就可以使用,必须要到UEFI的DXE阶段才可以使用。

    并且,也不是DXE阶段一开始就可以使用,从DxeMain.c中可以看到,最初的时候gRT表实际上是空的。

    在DXE的运行过程中,会加载一个个的模块,来填满整个表。

    对于变量,大致就是像下面这样的代码:

      SystemTable->RuntimeServices->GetVariable         = RuntimeServiceGetVariable;
      SystemTable->RuntimeServices->GetNextVariableName = RuntimeServiceGetNextVariableName;
      SystemTable->RuntimeServices->SetVariable         = RuntimeServiceSetVariable;
      SystemTable->RuntimeServices->QueryVariableInfo   = RuntimeServiceQueryVariableInfo;
    
      //
      // Now install the Variable Runtime Architectural Protocol on a new handle
      //
      NewHandle = NULL;
      Status = gBS->InstallMultipleProtocolInterfaces (
                      &NewHandle,
                      &gEfiVariableArchProtocolGuid,
                      NULL,
                      &gEfiVariableWriteArchProtocolGuid,
                      NULL,
                      NULL
                      );

    变量的初始化有不同的分类,分别在不同的模块中实现,并且只需要其中的一个模块运行就可以了。

    下面是一个大致的模块分类(名称类似,但又可能不同):

    1. EmuVariableRuntimeDxe.inf

    这种形式的变量初始化模块的特点是,所有变量都存放在内存中,相当于前面提到的属性EFI_VARIABLE_NON_VOLATILE并没有什么作用。

    2. VariableRuntimeDxe.inf

    这里就是最一般的形式。

    3. VariableSmmRuntimeDxe.inf

    这种形式是一般形式的安全加强版,变量存放在非易失介质时需要通过SMM模式来完成,因此变量的有效性和可靠性会更高。

    EmuVariableRuntimeDxe

    下面以EmuVariableRuntimeDxe.inf模块为例,说明变量的初始化。

    简单来说,初始化分为三个部分:

    1.    初始化mVariableModuleGlobal

    2.    为全局变量gRT赋值;

    3.    安装相关的Protocol和事件(该事件用于物理地址到虚拟地址的转变)。

    mVariableModuleGlobal的类型是ESAL_VARIABLE_GLOBAL,结构如下:

    typedef struct {
      VARIABLE_GLOBAL VariableGlobal[2];
      UINTN           VolatileLastVariableOffset;
      UINTN           NonVolatileLastVariableOffset;
      UINTN           CommonVariableTotalSize;
      UINTN           HwErrVariableTotalSize;
      CHAR8           *PlatformLangCodes;
      CHAR8           *LangCodes;
      CHAR8           *PlatformLang;
      CHAR8           Lang[ISO_639_2_ENTRY_SIZE + 1];
    } ESAL_VARIABLE_GLOBAL;
    

    VariableGlobal是一个数组,它有两个元素,表示的分别是物理内存和虚拟内存,因为需要有对OS的支持,所以才会有虚拟内存这一块。

    VARIABLE_GLOBAL的结构体如下:

    typedef struct {
      EFI_PHYSICAL_ADDRESS  VolatileVariableBase;
      EFI_PHYSICAL_ADDRESS  NonVolatileVariableBase;
      EFI_LOCK              VariableServicesLock;
    } VARIABLE_GLOBAL;
    

    EFI_PHYSICAL_ADDRESS就是UINT64。

    VariableServicesLock是一个用于变量的锁,它的类型EFI_LOCK的结构体如下:

    typedef struct {
      EFI_TPL         Tpl;
      EFI_TPL         OwnerTpl;
      EFI_LOCK_STATE  Lock;
    } EFI_LOCK;
    

    EFI_TPL是UINTN,EFI_LOCK_STATE有以下的几种状态:

    typedef enum {
      EfiLockUninitialized = 0,
      EfiLockReleased      = 1,
      EfiLockAcquired      = 2
    } EFI_LOCK_STATE;
    

    不过关于锁的东西并不是这里需要关注的重点。

    mVariableModuleGlobal的初始化位于VariableCommonInitialize(),具体的流程如下:

    其中需要注意两个结构体:

    ///
    /// Variable Store region header.
    ///
    typedef struct {
      ///
      /// Variable store region signature.
      ///
      EFI_GUID  Signature;
      ///
      /// Size of entire variable store,
      /// including size of variable store header but not including the size of FvHeader.
      ///
      UINT32  Size;
      ///
      /// Variable region format state.
      ///
      UINT8   Format;
      ///
      /// Variable region healthy state.
      ///
      UINT8   State;
      UINT16  Reserved;
      UINT32  Reserved1;
    } VARIABLE_STORE_HEADER;
    

    这个是整个变量存储空间的头部。

    然后每个变量都有一个自己的头部:

    ///
    /// Single Variable Data Header Structure.
    ///
    typedef struct {
      ///
      /// Variable Data Start Flag.
      ///
      UINT16      StartId;
      ///
      /// Variable State defined above.
      ///
      UINT8       State;
      UINT8       Reserved;
      ///
      /// Attributes of variable defined in UEFI specification.
      ///
      UINT32      Attributes;
      ///
      /// Size of variable null-terminated Unicode string name.
      ///
      UINT32      NameSize;
      ///
      /// Size of the variable data without this header.
      ///
      UINT32      DataSize;
      ///
      /// A unique identifier for the vendor that produces and consumes this varaible.
      ///
      EFI_GUID    VendorGuid;
    } VARIABLE_HEADER;

    初始化的内容就是这些,完成初始化后就可以使用变量的存取了。

    之后介绍变量读写的实现。

    GetVariable

    GetVariable()的流程大致如下:

    有几点需要注意:

    1. 从RuntimeServiceGetVariable()到EmuGetVariable()多了一个参数:

    EFI_STATUS
    EFIAPI
    RuntimeServiceGetVariable (
      IN CHAR16        *VariableName,
      IN EFI_GUID      *VendorGuid,
      OUT UINT32       *Attributes OPTIONAL,
      IN OUT UINTN     *DataSize,
      OUT VOID         *Data
      )
    {
      return EmuGetVariable (
              VariableName,
              VendorGuid,
              Attributes OPTIONAL,
              DataSize,
              Data,
              &mVariableModuleGlobal->VariableGlobal[Physical]
              );
    }
    

    mVariableModuleGlobal->VariableGlobal[Physical],表示的是在UEFI下的物理地址。

    2. FindVariable (VariableName, VendorGuid,&Variable, Global);函数中最重要的是第三个参数Variable,它也是函数的输出,它的结构如下:

    typedef struct {
      VARIABLE_HEADER *CurrPtr;
      VARIABLE_HEADER *EndPtr;
      VARIABLE_HEADER *StartPtr;
      BOOLEAN         Volatile;
    } VARIABLE_POINTER_TRACK;
    

    这个输出的结构反映了当前的变量保存区域。

    当找到变量后(没找到关系也不大,下图以找到为例),上述的值如图中所示:

    上述的立方体区域实际上有两个,一个存放易失变量一个存放非易失变量,Volatile根据在那块区域找到的来确定。

    3. FindVariable()函数出入的VariableName参数如果是空的,而VendorGuid非空,则直接返回下一个非易失变量。

    4. UpdateVariableInfo()部分是用来统计UEFI下的变量总体信息的,并不是变量实现的一部分,这里先不关注。

    SetVariable

    具体的流程如下:

    展开全文
  • 2014年高考数学一轮复习 热点难点精讲精析 10.2用样本估计总体变量间的相关关系
  • 之前看过的,后来就忘了,记一下加深印象 ...其实看定义还是有点不容易理解的,其实就是数理统计中的总体,把随机变量看做总体就可以了。对随机变量进行一次测量,就相当于在总体中进行了一次抽样。这样就...
  • 之前提到过描述单个随机变量的一些工具,比如正针对整体总体细节的“分布”、针对总体概述的各种统计量(期望、方差等),也提到过针多元随机变量的描述量:协方差和相关系数,现在此总结下多个变量之间关系的研究。...
  • 超详细SPSS主成分分析计算指标权重(一)

    万次阅读 多人点赞 2019-03-13 20:58:51
    首先什么是主成分分析?如何进行主成分分析?由于数据之间可能会具有相关性,即可能表达的是同样的含义,因此需要的对这些相关性的数据进行降维处理,用较少的变量去解释原来资料中的大部分变量,将我们手中许多...
  • 问题:两变量间是否存在相关或关联? 身高与体重 尿铅排出量与血铅含量 凝血时间与凝血酶浓度 血压与年龄 1、线性相关 例 在某地一项膳食调查中,随机抽取了14名40~60岁的健康妇女,测得每人的基础代谢(kJ /d...
  • n维随机变量

    2020-04-10 15:34:48
  • 机器学习中的特征变量及处理总结

    千次阅读 2019-12-09 20:48:41
    文章目录1. 定性特征变量1.1 定类变量处理1.2 定序变量处理2. 定量特征变量3. 总结   牢记一句话:“数据和特征决定了...  总体而言,所有的特征变量可以归为两大类:定性特征和定量特征,我们依次看一下。 1....
  • TensorFlow入门

    千次阅读 多人点赞 2019-04-23 10:09:29
    TensorFlow入门 参考资料: TensorFlow中文社区教程 TENSORFLOW从入门到精通之——TENSORFLOW基本操作 TensorFlow升级到1.0版本的问题 Tensorflow save&restore遇到问题及解决应对 ...TensorFlow的变量管理...
  • 变量分析、组合变量分析

    千次阅读 2020-04-20 21:23:16
    变量分析、组合变量分析 单变量分析 1.协方差的一些解释: 在坐标轴中,使用x_u、y_u画两条直线,会使数据分布在四个象限 当s_xy为正时,表示变量x、y是正的线性关系,即x增加,y增加 当s_xy为负时,表示变量x、y...
  • 软件测试_笔记(完整版)

    万次阅读 多人点赞 2018-07-02 08:51:28
    软件测试复习(部分) 概述 程序+文档+数据=软件 ...为什么要做软件测试 发现软件缺陷 功能错 功能遗漏 超出需求部分(画蛇添足) 性能不符合要求 软件质量高低:是否符合用户习惯、符合用户需求 测试...
  • 有一个总体系统框图 在分析模型的时候先看到chap4_1ctrl模块,里面加入了一个.m文件,是一个S函数模块 模块函数的输入上看有4个量,t是采样时间,x是状态变量,u是输入(是simulink模块的输入),flag是仿真过程...
  • 变量的t检验

    千次阅读 2019-09-08 21:54:53
    要求:量变量服从正态分布 实例与SPSS演示: 用SPSS打开文件;ttest2.sav。...路径为:.\9\ttest2.sav 零假设:组别1,2之成绩总体分布的均值无明显差异 ...检验统计量:两变量总体方差是否相等,t的取值也随之...
  • 总体与样本的理解

    千次阅读 2016-10-26 19:19:51
    对于这个不部分的理解总是有一些不确定,所以运用起来...但是在数理统计这部分,事情的切入角度是不一样的:研究的随机变量分布是不知道的,但是我们常常需要通过一些手段来推断这个随机变量的分布。这个手段是:多次
  • 输入:总体(或解,用 X 表示)及其输出:总体成员的目标函数值 (F)。 文件 ProblemDetails.p 可用于确定每个案例的下限和上限以及函数句柄。 格式为 [lb, ub, fobj] = ProblemDetails(n); 输入:
  • %其中h为布尔变量,h=0表示不拒绝零假设,说明均值为mahat的假设合理。若h=1则相反; %ci表示0.95的置信区间。 %sig若比0.5大则不能拒绝零假设,否则相反。}}} 进行参数估计和假设检验时...
  • C语言中的局部变量和全局变量

    千次阅读 多人点赞 2019-03-17 16:25:02
    首先,我们先明白一个重要的概念,什么是作用域? 每个变量都有属于它的作用域,就是这些变量在什么范围内有效。 我们按照变量的作用域范围可以把变量划分为局部变量和全局变量。 二.局部变量 1.局部变量出现在三种...
  • 然后经常会看到不同的书中*有靠近变量类型的,有靠近变量名称的,很迷惑这两者有什么区别。后来上网查证了一下,总结如下: 总体来说,*靠近哪一个都可以,编译器都会认为是指针变量,所以本质是一样的。但是两个...
  • 【stata】基础指令——学习教程全记录(01)

    万次阅读 多人点赞 2019-02-09 11:00:07
    开一文记录和总结stata的学习,不断更新中~ 拿到一个数据集,首先要全局了解一下这个数据集的情况: 【describe】查看这个数据集的简要介绍,包括了样本数量(obs...【describe,short】:只看整个数据集的总体概况,...
  • LSTM多变量时间序列预测

    千次阅读 2021-03-27 20:40:42
    基于LSTM多变量的时间序列预测

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 150,021
精华内容 60,008
关键字:

总体是什么变量