- 积分
- 27
- 注册时间
- 2008-3-10
- 仿真币
-
- 最后登录
- 1970-1-1
|
发表于 2011-3-31 19:50:02
|
显示全部楼层
来自 英国
本帖最后由 nwcwww 于 2011-3-31 20:00 编辑
1# 千亿星辰
你这个是接着昨天的问题么?感觉还是没有理清思路。我这里只是猜想你想通过几个表达式,积分后,f3随w变化的图线。
f1=@(w)quad(@(x)x.*2./((2*pi).^0.5*x).*exp(-(log(x)-log(1.2)).^2*4),0,w);
...
mhkmars 发表于 2011-3-31 16:36
用f1f2生成一个匿名函数f3倒是挺容易。。
不过如果直接ezplot(f3,[0.110]),
应该会比你用plot+arrayfun(@(w)f1(w)./f2(w),w)更慢。
而用plot+arrayfun(@(w)f3(w),w)的话和你的方法速度差不多。
用ezplot+f3:
-
- clear;figure;tic;
- f1=@(w)quad(@(x)x.*2./((2*pi).^0.5*x).*exp(-(log(x)-log(1.2)).^2*4),0,w);
- f2=@(w)quad(@(x)2./((2*pi).^0.5*x).*exp(-(log(x)-log(1.2)).^2*4),0,w);
- f3=@(w)f1(w)/f2(w);
- ezplot(f3,[0.1,10]);grid;toc
- Elapsed time is 0.786917 seconds.
复制代码
用plot+arrayfun+f3:
- clear;figure;tic;
- f1=@(w)quad(@(x)x.*2./((2*pi).^0.5*x).*exp(-(log(x)-log(1.2)).^2*4),0,w);
- f2=@(w)quad(@(x)2./((2*pi).^0.5*x).*exp(-(log(x)-log(1.2)).^2*4),0,w);
- f3=@(w)f1(w)/f2(w);
- w=linspace(0.1,10);plot(w,arrayfun(@(w)f3(w),w));grid;toc
- Elapsed time is 0.167830 seconds.
复制代码
用plot+arrayfun+f1+f2,也就是你的代码:
- clear;figure;tic;
- f1=@(w)quad(@(x)x.*2./((2*pi).^0.5*x).*exp(-(log(x)-log(1.2)).^2*4),0,w);
- f2=@(w)quad(@(x)2./((2*pi).^0.5*x).*exp(-(log(x)-log(1.2)).^2*4),0,w);
- w=linspace(0.1,10);plot(w,arrayfun(@(w)f1(w)./f2(w),w));grid;toc
- Elapsed time is 0.180164 seconds.
复制代码 后两种方法在速度上没啥差别。。 |
评分
-
1
查看全部评分
-
|