%多元线性回归求解 clear clc x=[15037 18.8 1366 17001 18 1519 18718 3.1 1644 21826 3.4 1893 26937 6.4 2311 35260 14.7 2998 48108 24.1 4044 59811 17.1 5046 70142 8.3 5846 78061 2.8 6420 83024 -0.8 6796 88479 -1.4 7159 98000 0.4 7858 108068 0.7 8622 119096 -0.8 9398 135174 1.2 10542 159587 3.9 12336 184089 1.8 14040 213132 1.5 16024 235367 1.7 17535 277654 1.9 19264]; y=[15.73 15.04 14.39 12.98 11.6 11.45 11.21 10.55 10.42 10.06 9.14 8.18 7.58 6.95 6.45 6.01 5.87 5.89 5.38 5.24 5.45]; [m,n]=size(x); X=[ones(m,1) x]; [m1,n1]=size(X); [m2,n2]=size(y); for i=1:n2 %b 为参数,bint 回归系数的区间估计,r 为残差, %rint 为置信区间,stats 用于回归模型检验 [b(:,i),bint,r,rint,stats(i,:)]=regress(y(:,i),X); [mm,nn]=size(b); for jj=1:m1 temp=0; for ii=1:mm yy(jj,i)=temp+b(ii,i)*X(jj,ii); temp=yy(jj,i); end end xiangdui_wucha(1,i)=abs(abs(y(1,i))-abs(yy(1,i)))/abs(y(1,i)); if n2~=1 subplot(2,n2/2,i); rcoplot(r,rint)%残差分析,作出残差及其置信区间 else rcoplot(r,rint)%残差分析,作出残差及其置信区间 end end disp('参数'); b %参数计算 disp('预测结果'); yy %检验回归模型:相关系数 r^2=stats(1,:)越接近 1 回归方程越显著 %F=stats(2,:)值越大回归方程越显著、p=stats(3,:)<0.01 时回归模型成立 disp('回归模型检验:'); format long stats for i=1:n2 if (stats(i,4)<0.01)&(stats(i,1)>0.6) disp('回归方程显著-------模型成立'); end end format short disp('相对误差'); xiangdui_wucha%第一行原始值与预测值的相对误差 xx=[1:21]; plot(xx,y,'b',xx,yy,'r',xx,r,'g'); legend('蓝色--实际曲线','红色--拟合曲线','绿色--残差曲线') 对残差图进行分析,对实际曲线、拟合曲线和残差曲线进行分析
时间: 2024-04-27 11:23:17 浏览: 6
这是一个多元线性回归求解的程序,数据包括自变量 x 和因变量 y,程序使用了 regress 函数进行回归分析,然后进行了回归模型的检验,包括相关系数 r^2、F 统计量和 p 值。在绘制实际曲线、拟合曲线和残差曲线后,对残差图进行了分析。可以看到程序非常详细,对于需要进行多元线性回归求解的人来说是非常有用的。
相关问题
%一阶声波方程模拟 clear;clc; %雷克子波 % figure(1); dt=1e-3; tmax=501; t=0:d
tmax=dt:(tmax-1)*dt; %时间范围
f1=10; %第一个子波的频率
f2=20; %第二个子波的频率
t1=1/f1; %第一个子波的周期
t2=1/f2; %第二个子波的周期
a1=2; %第一个子波的振幅
a2=1; %第二个子波的振幅
w=pi/(sqrt(t1^2+t2^2)); %角频率
delta=t1*t2/(t1+t2); %相位差
t=t-tmax/2*dt; %时间向左平移
q=a1*sin(w*t).*exp(-((t-tmax/(2*dt))/t1).^2)+a2*sin(w*t+delta).*exp(-((t-tmax/(2*dt))/t2).^2); %构造雷克子波
figure; %绘制雷克子波图像
plot(t,q);
xlabel('时间(s)');
ylabel('振幅');
title('雷克子波');
figure; %绘制频谱图
N=length(q); %信号长度
df=1/(N*dt); %频率分辨率
f=linspace(0,1/(2*dt),N/2+1); %频率范围
Q=fft(q,N)/N; %信号的傅里叶变换
Q=2*abs(Q(1:N/2+1)); %归一化并取幅值
plot(f,Q);
xlabel('频率(Hz)');
ylabel('幅值');
title('雷克子波频谱');
figure; %使用一阶声波方程模拟
c=1500; %声速
dx=0.01; %网格间距
dt2=0.5*dx/c; %计算时间间隔
tmax2=max(t)+100*dt; %计算模拟时间
nx=round(max(tmax2*c/dx,2/tmax2/dt2)); %计算网格数
x=0:dx:(nx-1)*dx; %空间范围
P=zeros(nx,1); %初始化压力场
P(2:nx-1)=q(1:nx-2)/2*q(2:nx-1)/2; %初始脉冲赋值
for t2=0:dt2:tmax2 %迭代计算
P(2:nx-1)=P(2:nx-1)+(c*dt2/dx*(P(3:nx)-P(2:nx-1))); %更新压力场
P(1)=0; P(nx)=0; %边界条件
if mod(t2,dt)==0 %每个时间步长绘制结果
figure;
plot(x,P);
xlabel('距离(m)');
ylabel('幅值');
title(['声波传播 t=',num2str(t2)]);
end
end
clc;clear all ;close all; xpipei=zeros(19,21);%定义变量。变量规划 readbmp=du
这段代码实际上是MATLAB的代码。
首先,clc命令用于清除命令窗口的内容,使其变为空白。
clear all命令用于清除MATLAB工作空间中的所有变量和函数。
close all命令用于关闭所有已打开的图形窗口。
xpipei=zeros(19,21); 定义了一个名为xpipei的变量,它是一个19行、21列的零矩阵。
readbmp=du; 定义了一个名为readbmp的变量,它的值是du。
根据代码的含义,这段代码的作用是:
清除命令窗口的内容,清除工作空间中的所有变量和函数,关闭所有打开的图形窗口。然后定义一个名为xpipei的19行21列的零矩阵,以及一个名为readbmp的变量,其值为du。