【2023年研究生数学建模】E题代码与技术文档

目前已经完成E题的第一、二问的代码和文档,分享一部分给大家,欢迎一起来交流谈论哦。

问题1.1

Q1_1_judge.m

clc
clear
data=xlsread('a表.xlsx');
for p=1:size(data,1)
   fv=data(p,3); %首次体积 
   for sf=1:8
       if isnan(data(p,3*(sf+1))) %判断是否为空
          break 
       end
       new_fv=data(p,3*(sf+1));
       if new_fv-fv>=6||(new_fv-fv)/fv>=0.33
           if data(p,3*(sf+1)-1)<=48
               table(p,1)=1;
               table(p,2)=data(p,3*(sf+1)-1);
           end
       end
   end
end
% for i=1:size(table,1)
%    for j=1:2
%       if ~table(i,j)
%          table(i,j)=NaN; 
%       end
%    end

Q1_1_time.m

clc
clear
data=xlsread('1.1时间计算.xlsx');
for p=1:size(data,1) %遍历每一个人
    y=data(p,3);
    m=data(p,4);
    d=data(p,5);
    h=data(p,6);
    min=data(p,7);
    s=data(p,8);
    %下面四舍五入小时
    if s>30
        if min<59
            min=min+1; 
        else %min为59
           min=0;
           h=h+1; %进一位
        end
    end
    if min>30
        h=h+1; %不用管是否超过24
    end
    max_sf=data(p,1)-1;
    if max_sf>8
       max_sf=8; 
    end
    for sf=1:max_sf %遍历每一个随访
        y_sf=data(p,sf*6+3);
        m_sf=data(p,sf*6+4);
        d_sf=data(p,sf*6+5);
        h_sf=data(p,sf*6+6);
        min_sf=data(p,sf*6+7);
        s_sf=data(p,sf*6+8);
        %下面四舍五入小时
        if s_sf>30
            if min_sf<59
                min_sf=min_sf+1;
            else %min为59
                min_sf=0;
                h_sf=h_sf+1; %进一位
            end
        end
        if min>30
            h_sf=h_sf+1; %不用管是否超过24
        end
        temp_table=[y m d h;y_sf m_sf d_sf h_sf];
        if temp_table(1,1)~=temp_table(2,1) %以防万一有隔年的
           error('停!') 
        end
        if temp_table(1,2)==temp_table(2,2) %如果月份相同
            if temp_table(1,3)==temp_table(2,3) %如果月相同日相同
                gap=temp_table(2,4)-temp_table(1,4); %直接相减
            else %如果月相同,日不同
                new_h=temp_table(2,4)+(temp_table(2,3)-temp_table(1,3))*24;
                gap=new_h-temp_table(1,4);
            end
        else %如果月份不同
            gap_m=[temp_table(1,2):1:temp_table(2,2)-1]; %获取间隔的月份
            t_day=get_mday(gap_m(1)); %获取第一个月的天数
            gap_day_1=t_day-temp_table(1,3); %计算第一个月的天数差额
            if size(gap_m,2)>=2 %如果中间还有间隔
                for mm=2:size(gap_m,2)
                    t_day=get_mday(gap_m(mm)); %获取第mm个月的天数
                    gap_day_1=gap_day_1+t_day;
                end
            end
            gap_day=gap_day_1+temp_table(2,3); %总日期间隔
            new_h=temp_table(2,4)+gap_day*24;
            gap=new_h-temp_table(1,4);
        end
        table(p,sf)=gap;
    end
end
for p=1:size(table,1)
    for j=1:size(table,2)
       if table(p,j)~=0
           table(p,j)=table(p,j)+data(p,2);
       else
           table(p,j)=NaN;
       end
    end
end

%% 获取每个月的日期数
function t_day=get_mday(m)
m31=[1 3 5 7 8 10 12];
if ismember(m,m31)
    t_day=31;
elseif m==2
    t_day=28;
else
    t_day=30;
end
end

问题1.2

Q1_2_1.m

clc
clear
data1=xlsread('表2-患者影像信息血肿及水肿的体积及位置.xlsx');
data2=xlsread('表3-患者影像信息血肿及水肿的形状及灰度分布.xlsx','Hemo');
table=[];
for i=1:size(data1,1)
    for ii=1:size(data2,1)
        if data2(ii,1)==data1(i,1)
            table=[table;data2(ii,:)];
            break
        end
        if ii==size(data2,1)
            table=[table;zeros(1,size(table,2))];
        end
    end
end

Q1_2_BP.m

clc
clear
data1=xlsread('因子得分预测表.xlsx');
train1=data1(1:100,:);
test1=data1(1:end,1:30);


net=feedforwardnet([10 10 10]);%建立一个隐含层数为1,节点数为10的网络

%定义在训练集过程中不使用测试集,只保留训练集与验证集(用于验证泛化能力)
net.divideParam.trainRatio = 80/100;
net.divideParam.valRatio = 20/100;
net.divideParam.testRatio = 0/100;

%训练网络。
net=train(net,(train1(:,1:(end-1)))',(train1(:,end))');%注意,这里每一列为一个实例,所以需要转置
%测试效果
test_out=sim(net,(test1)');%测试
test_out=test_out';
for i=1:size(test_out,1)
   if test_out(i,1)<0
      test_out(i,1)=0; 
   end
   if test_out(i,1)>1
      test_out(i,1)=1; 
   end
end
% test_error=test_out-test1(:,end);
% test_mse = mse(test_error);
% fprintf('%d',test_mse)

%% 读出Excel
%观察值(实际值):test1的最后一列
%预测值:test_out。

技术文档

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

写在最后

下面是国一同学整理的完整代码与运行结果,需要的同学欢迎咨询~
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Magnolia_He/article/details/133197115