[Matlab]协方差矩阵计算使用cov函数的结果与自编程序结果存在不一致

目前还弄不清是什么原因,有多大影响,只知道存在这个问题。

运行版本:

1.MatlabR2015b windows64Bit

2.https://octave-online.net/

3.http://www.compileonline.com/execute_matlab_online.php

代码:

%自编协方差矩阵计算法结果一致,但与matlab自带的cov函数不一致
% Rxx.m

close all;
clear;
clc;
rng(‘default‘);
rng(0);
A = randn(10,4);
[r,c]=size(A);
% method 1
Rxx1=A‘*A/r;
%method2
for n=1:r
 rx2_0(:,:,n)=A(n,:)‘*A(n,:);
end
Rxx2=sum(rx2_0,3)/r;
% method 3
Rxx3=cov(A);
fprintf(‘err1=%f\n‘,sumsqr(Rxx1-Rxx2));
fprintf(‘err2=%f\n‘,sumsqr(Rxx1-Rxx3));
fprintf(‘err3=%f\n‘,sumsqr(Rxx2-Rxx3));

  

结果

err1接近于0,err2,err3相等且等于某个数,对比了一下对应的矩阵数据,确实有差异。

Todo~.~

原文地址:https://www.cnblogs.com/alimy/p/9758643.html

时间: 2024-11-03 04:20:03

[Matlab]协方差矩阵计算使用cov函数的结果与自编程序结果存在不一致的相关文章

Matlab var std cov 函数解析

在Matlab中使用var求样本方差,使用std求标准差! 首先来了解一下方差公式: p = [-0.92 0.73 -0.47 0.74 0.29; -0.08 0.86 -0.67 -0.52 0.93] p = -0.9200    0.7300   -0.4700    0.7400    0.2900 -0.0800    0.8600   -0.6700   -0.5200    0.9300 var(p(1,:)) ans = 0.5511 var(p(1,:),0) ans =

MATLAB中的常用函数

MATLAB中的常用函数 1. 特殊变量与常数 主题词 意义 主题词 意义 ans 计算结果的变量名 computer 确定运行的计算机 eps 浮点相对精度 Inf 无穷大 I 虚数单位 inputname 输入参数名 NaN 非数 nargin 输入参数个数 nargout 输出参数的数目 pi 圆周率 nargoutchk 有效的输出参数数目 realmax 最大正浮点数 realmin 最小正浮点数 varargin   实际输入的参量 varargout 实际返回的参量     2.

python实现类似于Matlab中的magic函数

参考这篇文章的代码封装了一个类似Matlab中的magic函数,用来生成魔方矩阵. #!/usr/bin/env python # -*- coding: utf-8 -*- import numpy as np def magic(n): row,col=0,n//2 magic=[] for i in range(n): magic.append([0]*n) magic[row][col]=1 for i in range(2,n*n+1): r,l=(row-1+n)%n,(col+1)

matlab学习笔记 bsxfun函数

matlab学习笔记 bsxfun函数 最近总是遇到 bsxfun这个函数,前几次因为无关紧要只是大概看了一下函数体去对比结果,今天再一次遇见了这个函数,想想还是有必要掌握的,遂查了些资料总结如下.   函数bsxfun [功能描述]两个数组间元素逐个计算. [应用场合]当我们想对一个矩阵A的每一列或者每一行与同一个长度相等的向量a进行某些操作(比较大小,乘除等)时,我们只能用循环方法或者利用repmat函数将要操作的向量a复制成和A一样尺寸的矩阵,进而进行操作.从MATLAB R2007a开始

Matlab 最小二乘法拟合非线性函数

1.最小二乘原理 参考资料: 1.http://blog.csdn.net/lotus___/article/details/20546259 2.http://blog.sina.com.cn/s/blog_5404ea4f0101afth.html 2.matlab实现最小二乘法 利用matlab的最小二乘拟合函数对非线性函数进行拟合,具体地拟合的函数: [q r] = lsqcurvefit(fun, q_0, xdata, ydata);输入参数:fun:需要拟合的函数,假定有n个需要拟

matlab 全部的随机数函数

matlab 全部的随机数函数 (一)Matlab内部函数 a. 基本随机数 Matlab中有两个最基本生成随机数的函数. 1.rand() 生成(0,1)区间上均匀分布的随机变量.基本语法: rand([M,N,P ...]) 生成排列成M*N*P... 多维向量的随机数.如果只写M,则生成M*M矩阵:如果参数为[M,N]可以省略掉方括号.一些例子: rand(5,1) %生成5个随机数排列的列向量,一般用这种格式 rand(5) %生成5行5列的随机数矩阵 rand([5,4]) %生成一个

Matlab调用C语言函数

Matlab调用C语言函数 如果我有一个用C语言写的函数,实现了一个功能,如一个简单的函数:double add(double x, double y) { return x + y ;}现在我想要在Matlab中使用它,比如输入:>> a = add(1.1, 2.2)                                                     3.3000要得出以上的结果,那应该怎样做呢?解决方法之一是要通过使用MEX文件,MEX文件使得调用C函数和调用Matl

python像matlab类似的符号函数绘图

matplotlib 绘图之前需要先定义数据范围,python 有一个 sympy 包,类似 matlab 里面的符号函数,可以用来进行二维和三维的图像绘制, from sympy.plotting import plot3d或者plot(二维)from sympy import symbols(用来定义符号变量)from sympy.functions import sin(用来调用已经含有的一些函数名称,比如常见的sin,cos,exp)等 . 还有一个更方便的 mpmath 包,可以结合

matlab调试时子函数断点不起作用

matlab调试代码时总是遇到这样一个奇怪的问题,就是当我在主程序(.m脚本)中调用子函数并在子函数中设置断点,然后开始调试运行主程序... 发现主程序直接运行到结束而并没有在调用子函数的时候在所设置的断点处停下来,而且所设置的断点也被清除... 但是如果在主程序中调用相应子函数的地方设置断点,调试时在此处停一下然后在继续运行则可以在子函数中的断点停下... 这个问题困扰我挺长时间,虽然用第二种方法能够实现需要的调试功能,但是总是要在主程序停一下,有点麻烦 so, 有事问谷歌--you get