深山164 2024-07-24 11:42 采纳率: 92.3%
浏览 99

对于此运算,数组的大小不兼容

clc
clear
p1 =  -6.125e-07  ;
p2 =     0.00234  ;
p3 =      -2.683  ;
p4 =       896.1  ;
x = readmatrix("问题a附件2:实际采集数据表(1).xls",'range','K3:K603');
y = readmatrix("问题a附件2:实际采集数据表(1).xls",'range','N2:N603');


y_true = p1.*x.^3 + p2.*x.^2 + p3.*x + p4; % 使用多项式计算真实y值
p = [p1 p2 p3 p4];
y_polyfit = polyval(p, x);
SS_res = sum((y - y_polyfit).^2); % 残差平方和
SS_tot = sum((y - mean(y_true)).^2); % 总平方和
rsq = 1 - SS_res / SS_tot; 
disp(rsq)

对于此运算,数组的大小不兼容是什么意思

  • 写回答

3条回答 默认 最新

  • 阿里嘎多学长 2024-07-24 11:42
    关注

    以下内容由AIGC及阿里嘎多学长共同生成、有用望采纳:


    在您提供的MATLAB代码中,出现“数组的大小不兼容”的错误通常意味着在执行数组操作时,参与运算的数组维度不匹配。以下是一些可能导致此错误的具体原因和解决方法:

    1. 确保数据读取正确: 使用readmatrix函数时,确保指定的Excel文件路径和数据范围是正确的。如果文件或范围不正确,可能导致读取的数据不是预期的向量或矩阵。

    2. 确保x是向量: 在多项式计算y_true时,x必须是一个向量。如果x是一个矩阵,您需要将其转换为向量,例如使用x(:)

    3. 使用polyval函数时的注意事项polyval函数需要两个参数:多项式的系数向量和x值的向量。确保x是一个列向量或行向量,并且与多项式的系数向量p相匹配。

    4. 计算残差平方和和总平方和时的数组匹配: 在计算SS_resSS_tot时,确保yy_polyfity_true都是相同长度的向量。

    下面是根据您提供的代码修改后的示例,这些修改考虑了上述所有点:

    clc;
    clear;
    
    % 定义多项式系数
    p1 = -6.125e-07;
    p2 = 0.00234;
    p3 = -2.683;
    p4 = 896.1;
    
    % 读取数据,确保路径和范围正确
    x = readmatrix("问题a附件2:实际采集数据表(1).xls", 'range', 'K3:K603');
    y = readmatrix("问题a附件2:实际采集数据表(1).xls", 'range', 'N2:N603');
    
    % 将x和y转换为列向量
    x = x(:);
    y = y(:);
    
    % 计算真实y值
    y_true = polyval([p1, p2, p3, p4], x);
    
    % 使用polyval计算多项式拟合值
    p = [p1, p2, p3, p4];
    y_polyfit = polyval(p, x);
    
    % 计算残差平方和
    SS_res = sum((y - y_polyfit).^2);
    
    % 计算总平方和
    SS_tot = sum((y - mean(y_true)).^2);
    
    % 计算决定系数R²
    rsq = 1 - SS_res / SS_tot;
    
    % 显示结果
    disp(['R-squared (R²): ', num2str(rsq)]);
    

    请注意,这段代码假设readmatrix函数能够正确读取数据,并且xy是相同长度的列向量。如果xy不是列向量,您需要在读取数据后使用(:)操作符将它们转换为列向量。此外,确保Excel文件的路径和指定的范围是正确的,并且数据没有缺失或格式问题。如果问题仍然存在,请检查数据的具体格式和内容。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 7月24日