函数数值积分的问题 。

조회 수: 8 (최근 30일)
doved
doved 2022년 11월 24일
답변: temom 2022년 11월 24일
我有两个函数 f1 和 f2,其中 f1 是未知具体形式的自定义函数,但可以通过给定点可以生成函数值,f2则是已知的具体形式的函数,现在我想对两个函数的乘积 f1*f2 在区间 [a,b]上求数值积分。
本来我想用函数 quadl 来实现的,如下
F2 = @(zz2) rsplinec(z2,zz2,order,knots,k).*normpdf(zz2,0.5+4*(te(i)-0.5)^3,sqrt(0.04*te(i)^2-0.06*te(i)+0.25));
H2(i,k) = quadl(F2,z2l,z2r);
(上面是程序的一部分,其中rsplinec 是自定义函数),运行后报如下错误:
??? Error using ==> reshape
To RESHAPE the number of elements must not change.
Error in ==> spcol at 116
nrows = length(tau); tau = reshape(tau,1,nrows);
Error in ==> rsplinec at 16
Amatrix = spcol(tt2,m,ttt);
Error in ==>
@(zz2)rsplinec(z2,zz2,order,knots,k).*normpdf(zz2,0.5+4*(te(i)-0.5)^3,sqrt(0.04*te(i)^2-0.06*te(i)+0.25))
Error in ==> quadl at 70
y = feval(f,x,varargin{:}); y = y(:).';
Error in ==> sp4 at 39
H2(i,k) = quadl(F2,z2l,z2r);
根据以上错误和我对自定义函数 rspline 的测试,我理解上面的错误的意思是:由于 quadl 函数是首先在区间 [a,b]上等间距的生产一系列点,然后根据一定的规则来对积分进行数值逼近。但不巧的是自定义函数 rspline 的第二个参数如果是等间距产生的话,就会报如下部分的错误
??? Error using ==> reshape
To RESHAPE the number of elements must not change.
Error in ==> spcol at 116
nrows = length(tau); tau = reshape(tau,1,nrows);
Error in ==> rsplinec at 16
Amatrix = spcol(tt2,m,ttt);
因此,在这种情况下,是不是不可以用 quadl 函数了? 如果不可以用,我该怎么做呢?求指点,先谢谢了!

채택된 답변

temom
temom 2022년 11월 24일
不是要你重写整个 rsplinec 函数,spcol 函数本身没有你说的不能应用于等间隔点的时候,根据目前 reshape 那个位置的错误提示,修改你的函数定义可能很简单,而你却拒绝去修改。
如果你拒绝以上所有的建议,那你可以再试试 trapz 函数,你先在积分区间上产生一系列非等间隔的点 再z22,然后代入 F2计算函数值,然后直接用 trapz(z22,F2(z22)) 计算,这样计算的精度会差一些

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 数值积分和微分에 대해 자세히 알아보기

태그

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!