首页 > 解决方案 > 请解释这个 Octave 错误代码:op1 是 1x12,op2 是 1x3

问题描述

在此处输入图像描述

代码:

function result = assess_polynomial_n(y,n)

    [coeff, t, pred_accum] = fit_data(y, n);
    [avg, std_dev] = compute_error(coeff,y);
    [coeff1, t, pred_accum1] = fit_data(y, n+1);
    [avg1, std_dev1] = compute_error(coeff1,y);
    if avg1>avg
        result = n;
    elseif avg<0.1 && std_dev<0.1
        result = n;   
    elseif pred_accum1.*(1)<0.0001
        result = n;
    else
        result = 0;
    end
end
***Error***
error: compute_error: operator -: nonconformant arguments (op1 is 1x12, op2 is 1x3)
error: called from
    compute_error at line 11 column 17
    assess_polynomial_n at line 19 column 18
    __tester__.octave at line 38 column 1

有谁知道为什么我会收到这个错误?我们应该在 MATLAB 中工作,但将我们的代码粘贴到使用 Octave 的 Moodle 中,如果这样可以清除任何内容。

由于错误发生在 Compute_Error 中,我还将发布我要求参考的函数。这是整个项目的一部分,我将在其中定义我在创建assess_polynomial_n 之前调用的函数。

function [coeff, t, pred_accum] = fit_data(y, n)
    len = length(y);
    t = 10*[0:len-1];
    coeff = polyfit(t, y, n);
    pred_accum = polyval(coeff, t);
end

function [avg std_dev] = compute_error(x,y)
    s=[];
    for i=1:length(x)
        error=abs(x(i)-y(i));
        s=[s,error];
    end
    avg = mean(s);
    std_dev = std(s);
end

标签: octave

解决方案


问题在于这行代码:
[avg1, std_dev1] = compute_error(coeff1,y);

您正在尝试计算原始数据与拟合多项式系数之间的误差。这没有意义,对吧?

相反,您应该计算原始数据和拟合数据之间的误差,这是多项式在每个t值处的输出。正确的代码是:
[avg1, std_dev1] = compute_error(pred_accum1,y);


推荐阅读