找回密码
 注册
Simdroid-非首页
查看: 112|回复: 7

求助:一个求积分的程序

[复制链接]
发表于 2014-8-27 15:11:01 | 显示全部楼层 |阅读模式 来自 中国
要绘制下面的函数随a的变化曲线,a从1到200取值。


程序如下:
fid=fopen('eta1.xls','w');
for i=linspace(1.0,200.0);
    a=i;

     q1=(a-x).*(x+1.0);
q2=sqrt(log(x+1.0));
   fun1=@(x)q1.*q2;
        q3=quadl(fun1,0,a);
      fun2=@(x)q1./q2;
     q4=quadl(fun2,0,a);  

eta=2.0*q3/q4;
    fprintf(fid,'%f %f\n',a,eta);
end

计算总是报错,请帮我看看问题出在哪儿?谢谢!



本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×
发表于 2014-8-27 21:27:58 | 显示全部楼层 来自 陕西西安
Simdroid开发平台
本帖最后由 TBE_Legend 于 2014-8-27 21:30 编辑

(1)matlab有个免费的package,叫 chebfun,很适合你的问题,超级强大。

(2)mmtc的结果供参考

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

×

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2014-8-28 00:31:14 | 显示全部楼层 来自 加拿大
你代码的错误主要在于匿名函数的定义部分。去掉文件读写,直接修改你的代码为(修改部分已经注释):
A = linspace(1.0,200.0);
eta = zeros(size(A));
for n=1:length(A);
    a=A(n);
    q1=@(x)(a-x).*(x+1.0); % 函数定义 @(x)
    q2=@(x)sqrt(log(x+1.0));  % 函数定义 @(x)
    fun1=@(x)q1(x).*q2(x);  % 函数定义
    q3=quadl(fun1,0,a);
    fun2=@(x)q1(x)./q2(x); % 函数定义
    q4=quadl(fun2,0,a);
    eta(n)=2.0*q3/q4;
end
plot(A,eta)

另外,这类问题如果想高效计算的话,matlab提供了向量化积分解决方案(只要版本不低于2012a),效率为大幅度提升
a = linspace(1,200);
f1 = @(x) (a-x).*(x+1).*sqrt(log(x+1));
f2 = @(x) (a-x).*(x+1)./sqrt(log(x+1));
eta = 2*integral(@(x) f1(a*x).*a,0,1,'ArrayValued',true)./integral(@(x) f2(a*x).*a,0,1,'ArrayValued',true);
plot(a,eta)

评分

1

查看全部评分

回复 不支持

使用道具 举报

 楼主| 发表于 2014-8-28 10:01:14 | 显示全部楼层 来自 中国
TBE_Legend 发表于 2014-8-27 21:27
(1)matlab有个免费的package,叫 chebfun,很适合你的问题,超级强大。

(2)mmtc的结果供参考

谢谢推荐,chebfun很好用。
mmtc是什么?可以介绍一二吗?

点评

mmtc 应该是mathematica  发表于 2014-8-29 11:38
回复 不支持

使用道具 举报

 楼主| 发表于 2014-8-28 10:03:08 | 显示全部楼层 来自 中国
winner245 发表于 2014-8-28 00:31
你代码的错误主要在于匿名函数的定义部分。去掉文件读写,直接修改你的代码为(修改部分已经注释):
A = l ...

谢谢帮我改程序。因为我需要把几条曲线放到一张图上,想用画图软件处理数据,所以需要把结果输出文本文件,可以再麻烦你帮我把输出文件的代码补充上吗?谢谢!
回复 不支持

使用道具 举报

发表于 2014-8-28 10:47:15 | 显示全部楼层 来自 加拿大
suntht 发表于 2014-8-28 10:03
谢谢帮我改程序。因为我需要把几条曲线放到一张图上,想用画图软件处理数据,所以需要把结果输出文本文件 ...

我看你的代码是写 excel 文件,建议用 xlswrite 函数,查查帮助文件,照着例子写
回复 不支持

使用道具 举报

 楼主| 发表于 2014-8-28 14:15:57 | 显示全部楼层 来自 中国
winner245 发表于 2014-8-28 10:47
我看你的代码是写 excel 文件,建议用 xlswrite 函数,查查帮助文件,照着例子写 ...

写好了,谢谢帮忙。
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-6-16 20:20 , Processed in 0.039444 second(s), 17 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表