讨论一个函数句柄和quadgk的问题,似乎本版没见过
quadgk(fun, a, b)对高频振荡函数的数值积分很有效,但前提是fun要是function handle.举个例子:
我要积分 fun =a1(i)*x+b1(j)*x^2+9
a1 and b1都是数组,怎样才能得到各个元素点的数值积分值呢?就是如何实现这个循环
我们要定义function,其只能有x一个未知量,i j怎么传递过去呢?如果定义成fun(x,i,j)似乎quadgk就不认了
function y=fun(x)
y=a1(i)*x+b1(j)*x^2+9;
还有一个很可恶的事情,如果用inline定义fun,则quadl可以求解,但quadgk就显示错误,要求fun必须是function handle,太可恶了。
这个还有解决办法吗?大家可以试试来想想办法,反正代码也很短。也帮小弟一个忙了 事实上是,函数句柄要比inline有效率也方便的多。
fun = @(a1,b1) @(x)a1*x+b1*x.^2+9
a1 = 1:10;
a2 = 1:10;
res = zeros(1,10);
a = 3;
b = 6;
for k=1:10
res(k) = quadgk(fun(a1(k),a2(k)), a, b)
end
手头没有MATLAB,自己试试吧。
[ 本帖最后由 rocwoods 于 2008-9-23 10:07 编辑 ]
回复 2# rocwoods 的帖子
怪不得rocwoods是版主,我是初级会员呢。多谢版主了。谢谢谢谢,我试试看回复 2# rocwoods 的帖子
我们不谋而和啊我刚这样试完,准备贴上,你已经重新编辑改过了
我的代码是
fun = @(a1,b1) @(x) a1.*x+b1.*x.^2+9;
a1 = 1:10;
b1 = 1:10;
a = 3;
b = 6;
for i=1:length(a1)
integ(i)=quad(fun(a1(i),b1(i)), a, b);
end
我没有找到quadgk这个函数
[ 本帖最后由 ljelly 于 2008-9-23 11:31 编辑 ] 都对,谢谢大家。不过我的实际问题复杂得多,还要请教一下
据个简单例子
fun1 = @(a1,b1) @(x) a1.*x+b1.*x.^2+9;
fun2 =@(a2,b2) @(x) a2.*x+b2.*x.^4+9*x;
fun = (fun1+fun2)*(a1*x+b2*x^2);
应该如何定义复合函数fun呢?使得fun1 , fun2都能带进去,并且保证最后fun只是x的句柄函数,才可以quadgk积分
帮助上没找到定义多个变量组的句柄函数,只好来请教高人 对于给定的a1,a2,b1,b2
fun = (fun1(a1,b1)+fun2(a2,b2)).*(a1*x+b2*x.^2);
即可 6# rocwoods
>> fun1 = @(a1,b1) @(x) a1.*x+b1.*x.^2+9;
>> fun2 =@(a2,b2) @(x) a2.*x+b2.*x.^4+9*x;
>> a1=1;
>> a2=2;
>> b1=1;
>> b2=2;
>> fun = (fun1(a1,b1)+fun2(a2,b2)).*(a1*x+b2*x.^2);
??? Undefined function or method 'plus' for input arguments of type
'function_handle'.
不行啊 6# rocwoods
>> fun1 = @(a1,b1) @(x) a1.*x+b1.*x.^2+9;
>> fun2 =@(a2,b2) @(x) a2.*x+b2.*x.^4+9*x;
>> a1=1;
>> a2=2;
>> b1=1;
>> b2=2;
>> fun = (fun1(a1,b1)+fun2(a2,b2)).*(a1*x+b2*x.^2);
?? ...
sigma665 发表于 2009-4-22 08:45 http://forum.simwe.com/images/common/back.gif
fun11 = fun1(a1,b1);
fun22 = fun2(a2,b2);
fun = @(x) (fun11(x) + fun22(x)).*(a1*x+b2*x.^2);
8# rocwoods
谢谢
页:
[1]