You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Octave添加第二个函数后出现‘LMSregression未定义’错误

Octave脚本调用函数提示“未定义”的解决方案

你的问题根源是**clear all命令清除了之前定义的函数**:在脚本中,clear all写在两个函数定义之后,执行该命令会清空工作区所有变量,同时删除已加载的函数定义,导致后续调用LMSregression时找不到该函数。

以下是三种可行的解决办法:

  • 方案1:调整clear all的位置,移到脚本最开头(占位符之后、函数定义之前)

    1;
    clear all;
    
    %%=========INTERPOLATION FUNCTION=================
    function Y=interpdata(x1,y1,x2,y2,X)
        Y=interp1([x1,x2],[y1,y2],X);
    endfunction
    %%=====end of INTERPOLATION FUNCTION==============
    
    %%=========LEAST MEAN SQUARE FUNCTION=============
    function coef=LMSregression(mat,size_)
        sumX2=0;
        sumXY=0;
        sumX=0;
        sumY=0;
        for i=1:size_
            sumX=sumX+mat(i,1);
            sumY=sumY+mat(i,2);
            sumX2=sumX2+mat(i,1)*mat(i,1);
            sumXY=sumXY+mat(i,1)*mat(i,2);
        endfor
        slope = (size_ * sumXY - sumX * sumY) /(size_ * sumX2 -sumX * sumX);
        b = sumY/size_ - slope * sumX/size_;
        coef = [slope b];
    endfunction
    %%=======end of LEAST MEAN SQUARE FUNCTION========
    
    %%============CALIBRATION AND DIVISION============
    data_ = dlmread ("mono00.txt", ";");
    size_data=size(data_);
    
    counter1=1;
    counter2=1;
    counter3=1;
    for i=1:size_data(1)
        if data_(i,1)==1
            zone1(counter1,:)=data_(i,:);
            counter1=counter1+1;
        elseif data_(i,1)==2
            zone2(counter2,:)=data_(i,:);
            counter2=counter2+1;
        elseif data_(i,1)==3
            zone3(counter3,:)=data_(i,:);
            counter3=counter3+1;
        endif
    endfor
    %%======end of CALIBRATION AND DIVISION===========
    
    %% 后续代码保持不变
    
  • 方案2:替换clear all为clear variables,只清除工作区变量,保留函数定义

    1;
    %%=========INTERPOLATION FUNCTION=================
    function Y=interpdata(x1,y1,x2,y2,X)
        Y=interp1([x1,x2],[y1,y2],X);
    endfunction
    %%=====end of INTERPOLATION FUNCTION==============
    
    %%=========LEAST MEAN SQUARE FUNCTION=============
    function coef=LMSregression(mat,size_)
        sumX2=0;
        sumXY=0;
        sumX=0;
        sumY=0;
        for i=1:size_
            sumX=sumX+mat(i,1);
            sumY=sumY+mat(i,2);
            sumX2=sumX2+mat(i,1)*mat(i,1);
            sumXY=sumXY+mat(i,1)*mat(i,2);
        endfor
        slope = (size_ * sumXY - sumX * sumY) /(size_ * sumX2 -sumX * sumX);
        b = sumY/size_ - slope * sumX/size_;
        coef = [slope b];
    endfunction
    %%=======end of LEAST MEAN SQUARE FUNCTION========
    
    clear variables;  % 替换原有的clear all
    
    %%============CALIBRATION AND DIVISION============
    data_ = dlmread ("mono00.txt", ";");
    size_data=size(data_);
    
    counter1=1;
    counter2=1;
    counter3=1;
    for i=1:size_data(1)
        if data_(i,1)==1
            zone1(counter1,:)=data_(i,:);
            counter1=counter1+1;
        elseif data_(i,1)==2
            zone2(counter2,:)=data_(i,:);
            counter2=counter2+1;
        elseif data_(i,1)==3
            zone3(counter3,:)=data_(i,:);
            counter3=counter3+1;
        endif
    endfor
    %%======end of CALIBRATION AND DIVISION===========
    
    %% 后续代码保持不变
    
  • 方案3:遵循Octave规范,将所有函数定义移至文件末尾(所有执行代码之后)

    1;
    clear all;
    
    %%============CALIBRATION AND DIVISION============
    data_ = dlmread ("mono00.txt", ";");
    size_data=size(data_);
    
    counter1=1;
    counter2=1;
    counter3=1;
    for i=1:size_data(1)
        if data_(i,1)==1
            zone1(counter1,:)=data_(i,:);
            counter1=counter1+1;
        elseif data_(i,1)==2
            zone2(counter2,:)=data_(i,:);
            counter2=counter2+1;
        elseif data_(i,1)==3
            zone3(counter3,:)=data_(i,:);
            counter3=counter3+1;
        endif
    endfor
    %%======end of CALIBRATION AND DIVISION===========
    
    %%=================DATA CLEAN AND SORT============
    zone1=[zone1(:,2) zone1(:,6) ];
    zone2=[zone2(:,2) zone2(:,6) ];
    zone3=[zone3(:,2) zone3(:,6) ];
    zone1=sortrows(zone1, 1);
    zone2=sortrows(zone2, 1);
    zone3=sortrows(zone3, 1);
    size_zone1=counter1-1;
    size_zone2=counter2-1;
    size_zone3=counter3-1;
    %%===========end of DATA CLEAN AND SORT===========
    
    %%=================LMS REGRESSION=================
    coefs=zeros(3,2);
    coefs(1,:)=LMSregression(zone1, size_zone1);
    X1=linspace(min(zone1(:,1)), max(zone1(:,1)),100);
    coefs(2,:)=LMSregression(zone2, size_zone2);
    X2=linspace(min(zone2(:,1)), max(zone2(:,1)),100);
    coefs(3,:)=LMSregression(zone3, size_zone3);
    X3=linspace(min(zone3(:,1)), max(zone3(:,1)),100);
    %%=============end of LMS REGRESSION==============
    
    %%=========INTERPOLATION FUNCTION=================
    function Y=interpdata(x1,y1,x2,y2,X)
        Y=interp1([x1,x2],[y1,y2],X);
    endfunction
    %%=====end of INTERPOLATION FUNCTION==============
    
    %%=========LEAST MEAN SQUARE FUNCTION=============
    function coef=LMSregression(mat,size_)
        sumX2=0;
        sumXY=0;
        sumX=0;
        sumY=0;
        for i=1:size_
            sumX=sumX+mat(i,1);
            sumY=sumY+mat(i,2);
            sumX2=sumX2+mat(i,1)*mat(i,1);
            sumXY=sumXY+mat(i,1)*mat(i,2);
        endfor
        slope = (size_ * sumXY - sumX * sumY) /(size_ * sumX2 -sumX * sumX);
        b = sumY/size_ - slope * sumX/size_;
        coef = [slope b];
    endfunction
    %%=======end of LEAST MEAN SQUARE FUNCTION========
    

内容的提问来源于stack exchange,提问作者ATSlooking4things

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 08:55:05