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
相关产品推荐
相关产品推荐

