中南大学实用测量数据处理实验


中南大学《实用测量数据处理》实验(自用)

实验一:总体最小二乘估计

为了确定直线方程 y = β 0 + β 1 x y=β_0+β_1 x y=β0+β1x中的两个参数,获取了四对观测值 ( 1 , 2 ) , ( 2 , 6 ) , ( 4 , 4 ) , ( 6 , 1 ) (1,2),(2,6),(4,4),(6,1) (1,2),(2,6),(4,4),(6,1),试根据最小二乘和总体最小二乘求出参数估值。

A = [1 1;1 2;1 4;1 6];
L = [2;6;4;1];

X0 = (A'*A)\A'*L;
X1 = X0;
while true

    V1 = (A*X1-L)'*(A*X1-L)/(1+X1'*X1);
    X2 = (A'*A)\A'*L+(A'*A)\X1*V1;
    
    if all(abs(X2-X1)<10e-4)
        break;
    else
        X1 = X2;
    end
end
% 可视化
figure
scatter(A(:,2),L)
hold on
x = 0:7;
plot(x,X0(1)+X0(2)*x)
plot(x,X1(1)+X1(2)*x)
legend("观测点","最小二乘","整体最小二乘")

实验二:线性回归分析

序号坝段1温度/(℃)坝段2温度/(℃)水平位移/mm
16.816.5715.40
29.889.5313.20

导入数据

clear;close all;clc;

data=[6.81	6.57	15.40
    9.88	9.53	13.20
    9.52	7.79	15.26
    9.70	12.32	11.33
    6.52	9.88	13.32
    5.34	8.26	14.26
    9.50	7.55	14.16];

A = [ones(size(data,1),1),data(:,1:end-1)];
y = data(:,end)

计算回归结果

% 回归
beta = (A'*A)\A'*y
y_ = A*beta

显著性检验

m = size(A,2)-1;
n = size(A,1);
% 1、总体显著性检验
% 原假设:beta为0
avg = mean(y);

SSR = sum((y_ - avg).*(y_ - avg));  % 回归
SST = sum((y_ - y).*(y_ - y));  % 残差

F = (SSR/m)/(SST/(n-m-1));
if F>finv(0.950,m,n-m-1)
    disp("拒绝原假设,回归方程是显著的。")
end

% 2、回归系数显著性检验
% (1)使用t检验
C = diag(inv(A'*A));
sigma0 = sqrt(SST/(n-m-1));
for i=2:size(C,1)
    t = beta(i)/(sigma0*sqrt(C(i)));
    if abs(t)>tinv(0.975,n-m-1)
        fprintf("自变量X%d对y显著的。\n",i)
    else
        fprintf("自变量X%d对y不显著\n",i)
    end
end
% (2)使用f检验
for i=2:size(C,1)
    F = (beta(i)*beta(i)/C(i))/(SST/(n-m-1));
    if F>finv(0.950,1,n-m-1)
        fprintf("自变量X%d对y显著的。\n",i)
    else
        fprintf("自变量X%d对y不显著\n",i)
    end
end

实验三:非线性回归分析

导入数据

clc;clear;close all;
% 导入数据
y = load("data3.txt");

非线性回归

A = ones(size(y,1),4);
t = (1:size(y,1))';

% 对θ设置初始值
theta1 = [max(y),max(y),1,0]'; 

% 开始迭代
while true
    
    A(:,2) = -exp(-theta1(3)*(t.^theta1(4)));
    A(:,3) = -theta1(2)*A(:,2).*(t.^theta1(4));
    A(:,4) = A(:,3).*theta1(3).*log(t); 

    L = y - (f(t,theta1));

    % 平差,防止奇异使用岭估计
    dtheta = (A'*A + diag(ones(1,4)*0.001))\A'*L; 
    
    theta2 = theta1 + dtheta;
    
    % 迭代退出条件
    if all(abs(theta2-theta1)<10e-4)
        break;
    else
        theta1 = theta2;
    end
end

假设检验

% 假设检验
y_ = f(t,theta2);  % 在最后面定义了f函数
e = y - y_;
mu = mean(e);  % 均值
% sigma = std(e);  % 标准差
n = size(e,1);
sigma = sqrt(sum((e-mu).*(e-mu))/(n-1));

% 统计每个区间的频数
L = 10;
[m,~] = hist(e)  % m用于存储频数,注意hist只能统计10个区间。

l = min(e);r = max(e);d = (r-l)/L; % 间隔
x = l:d:r;
q = (normcdf(x(2:end),mu,sigma) - normcdf(x(1:end-1),mu,sigma))*n  % 理论频数

% 1\计算卡方统计量结果
kafang = sum((m-q).*(m-q)./q)
if abs(kafang)>chi2inv(0.975,L-3)
    disp("残差不服从正态分布")
else
    disp("残差服从正态分布")
end

% 2\残差均值是否为零的检验
U = mu/(sigma/sqrt(n))

if abs(U)<norminv(0.975,0,1)
    disp("残差均值服从为0的检验")
else
    disp("不服从")
end

function y=f(t,theta)
    y = theta(1)-theta(2)*exp(-theta(3)*t.^theta(4));
end

实验四:平滑与滤波

clc;clear;close all;
% 读取数据
y = load("data4.dat");

% 可视化数据
tiledlayout(5,1);
x = 1:size(y,1);
nexttile
plot(x,y)

% 三点滑动平均
g1 = (y(1:end-2) + y(2:end-1) + y(3:end))/3;
nexttile
plot(x(2:end-1),g1)

% 五点滑动平均(线性)
g2 = (y(1:end-4) + y(2:end-3) + y(3:end-2) + y(4:end-1) + y(5:end))/5;
nexttile
plot(x(3:end-2),g2)


% 五点滑动平均(二次曲线)
g3 = (-3*y(1:end-4) + 12*y(2:end-3) + 17*y(3:end-2) + 12*y(4:end-1) - 3*y(5:end))/35;
nexttile
plot(x(3:end-2),g3)


% 高斯权平滑
N = 5;a = 5;
st = (N-1)/2+1;ed = size(y,1)-(N-1)/2;
g4 = zeros(ed-st+1,1);
w = weight(N,a);  % 计算权重
for i=st:ed
    g4(i-st+1) = w'*y(i-2:i+2);
end
nexttile
plot(x(st:ed),g4)

function w = weight(N,sigma)
    n = (N-1)/2+1;
    w = zeros(N,1);
    for i=1:N
        w(i) = guassin(n-i,sigma);
    end
    w = w/sum(w);
end

function g = guassin(x,sigma)
    g = 1/sqrt(2*pi*sigma*sigma)*exp(-x*x/(2*sigma*sigma));
end
  • 6
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杨BOSS响

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值