matlab 数值积分问题设计目标是这样的:我有三个大型的维数相同的列向量X0,Y0,Z0,在Z0中寻找与某设定值T相同的元素的元素下标,通过获得的元素下标获得对应X0和Y0,并建立(X0,Y0),将获得的一
来源:学生作业帮助网 编辑:六六作业网 时间:2025/01/29 08:15:38
matlab 数值积分问题设计目标是这样的:我有三个大型的维数相同的列向量X0,Y0,Z0,在Z0中寻找与某设定值T相同的元素的元素下标,通过获得的元素下标获得对应X0和Y0,并建立(X0,Y0),将获得的一
matlab 数值积分问题
设计目标是这样的:我有三个大型的维数相同的列向量X0,Y0,Z0,在Z0中寻找与某设定值T相同的元素的元素下标,通过获得的元素下标获得对应X0和Y0,并建立(X0,Y0),将获得的一组(X0,Y0)进行适当插值,最后在选定的范围(a,b)进行数值积分,然后将结果和T建立成(T,结果)的矩阵,设定值T并不是一个定值,而是一个等差数列,所以希望最后得到一个矩阵形如:[T1 ,T1积分结果;T2,T2积分结果.]
现在修改的程序如下:
function B = quadspln(x0,y0,z0,a,b)A=[]; %缓存矩阵
B=[]; %结果
for j=1:10 %循环,暂定循环次数为10
r=[]; %暂存矩阵清零
w=[]; %暂存矩阵清零
ind=find(z0==j+5); %寻找符合要求的Z0的下标 j+5为设定值T
r=x0(ind);w=y0(ind); %寻找对应的X0与Y0元素
f=inline('interp1(r,w,x,''spline'')','x','r','w');%适当插值
y=quadl(f,a,b,1e-8,[],r,w); %积分
A=[j+5,y]; %与深度Z建立成二维矩阵
eval(['A',num2str(j),'=','A']); %A1...AN都是1行2列的矩阵
eval(['B=[B;A',num2str(j),'];']); %合并结果至B
end
end
现在上面的这个程序只能完成当j=1,j=2,j=3时的积分,到4后,程序报错:
? Error using ==> inlineeval at 15 Error in inline expression ==> interp1(r,w,x,'spline')
There should be at least two data points.
Error in ==> inline.feval at 36
INLINE_OUT_ = inlineeval(INLINE_INPUTS_, INLINE_OBJ_.inputExpr, INLINE_OBJ_.expr);
Error in ==> quadl at 70
y = feval(f,x,varargin{:}); y = y(:).';
Error in ==> quadspln at 11
y=quadl(f,a,b,1e-8,[],r,w);
辛苦各位高手了~
matlab 数值积分问题设计目标是这样的:我有三个大型的维数相同的列向量X0,Y0,Z0,在Z0中寻找与某设定值T相同的元素的元素下标,通过获得的元素下标获得对应X0和Y0,并建立(X0,Y0),将获得的一
建议检查j=4的时候,能否在z0数组中找到z0=j+5.从你的描述来看,问题出在插值的时候r和w中至少有一个是空值或者r和w的值相等.所以问题很有可能出在ind=find(z0==j+5).如果能否在z0数组中找到z0=j+5,那么还需要检查r=x0(ind)和w=y0(ind)的值是否相等,如果相等,那么是无法做插值的.如果如我所言,出现了上述问题,那么就需要在出问题的地方加入if...else...语句做修正.