24小时热门版块排行榜    

查看: 2295  |  回复: 11

askformore

木虫 (小有名气)

[求助] matlab画图求助

需要用matlab画出下面这个图形【即第一个图形】:

表达式都是很清楚的,只是需要用matlab画出来,我写的程序是下面这样,很简单的:
for y=18:0.001:21;

   k=[2:0.01:25];
   a1=pi*(k-2).^4/12./(1+0.8048.*(k-2)+0.1459.*(k-2).^2+1.137*10^(-3)*(k-2).^3-3.879*10^(-6)*(k-2).^4)./(exp(0.511*938.272.*k./(20*10^(y-18)*2.7*8.6170))-1);
   b1=trapz(k,a1);
da1=pi*(k-2).^4/12./(1+0.8048.*(k-2)+0.1459.*(k-2).^2+1.137*10^(-3)*(k-2).^3-3.879*10^(-6)*(k-2).^4).*(-3./(exp(0.511*938.272.*k./(20*10^(y-18)*2.7*8.6170))-1)+0.511*938.272.*k.* exp(0.511*938.272.*k./(20*10^(y-18)*2.7*8.6170))./(20*10^(y-18)*2.7*8.6170)./(exp(0.511*938.272.*k./(20*10^(y-18)*2.7*8.6170))-1).^2);
   db1=trapz(k,da1);
   
c=[25:0.1:10000]';
   a2=c.*(-86.07+50.96.*log(c)-14.45.*log(c).^2+8/3.*log(c).^3)./(1-(2.91./c+78.35./c.^2+1837./c.^3))./(exp(0.511*938.272.*c./(20*10^(y-18)*2.7*8.6170))-1);
   b2=trapz(c,a2);
da2=c.*(-86.07+50.96.*log(c)-14.45.*log(c).^2+8/3.*log(c).^3)./(1-(2.91./c+78.35./c.^2+1837./c.^3)).*(-3./(exp(0.511*938.272.*c./(20*10^(y-18)*2.7*8.6170))-1)+0.511*938.272.*c.*exp(0.511*938.272.*c./(20*10^(y-18)*2.7*8.6170))./(20*10^(y-18)*2.7*8.6170)./ (exp(0.511*938.272.*c./(20*10^(y-18)*2.7*8.6170))-1).^2);
   db2=trapz(c,da2);

dp=(db1+db2)./(b1+b2);
plot(y,dp,'r');
axis([18 21 -1 3]);
    hold on;
end

得到的图形为【第二个图形,即红色曲线的图形】:

很明显,和目标图形相比,matlab只画出了整个图形横坐标在大约y>19.2之后的图形,而且,这一段图形和目标图形是一致的【或者说一样的】。但是,为什么y<19.2的部分画不出来呢?

请各位同学帮助哈,如果能帮助修改,用matlab获得目标图形,可以再追加金币,多谢!

目标图形



为什么只显示后半段呢?
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
回帖支持 ( 显示支持度最高的前 50 名 )

czxf

银虫 (正式写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
askformore: 金币+50, ★★★★★最佳答案, 非常感谢您耐心的修改,运行您修改的程序,已得到目标图形。辛苦辛苦! 2012-05-28 18:45:38
楼主的问题出现在inf/inf=nan,如楼上所说,exp(700)左右就达到了inf,解决的方法是将两个inf进行约分,概括起来即对exp(x)/(exp(x)-1)^2进行约分。以下是我修改后的程序:
clc
clear
for y=18:0.001:21;
   k=[2:0.01:25];
   a1=pi*(k-2).^4/12./(1+0.8048.*(k-2)+0.1459.*(k-2).^2+1.137*10^(-3)*(k-2).^3-3.879*10^(-6)*(k-2).^4)./(exp(0.511*938.272.*k./(20*10^(y-18)*2.7*8.6170))-1);
   b1=trapz(k,a1);
   da1=pi*(k-2).^4/12./(1+0.8048.*(k-2)+0.1459.*(k-2).^2+1.137*10^(-3)*(k-2).^3-3.879*10^(-6)*(k-2).^4).*(-3./(exp(0.511*938.272.*k./(20*10^(y-18)*2.7*8.6170))-1)+0.511*938.272.*k.* exp(0.511*938.272.*k./(20*10^(y-18)*2.7*8.6170))./(20*10^(y-18)*2.7*8.6170)./(exp(0.511*938.272.*k./(20*10^(y-18)*2.7*8.6170))-1).^2);
   db1=trapz(k,da1);
   
   c=[25:0.1:10000]';
   a2=c.*(-86.07+50.96.*log(c)-14.45.*log(c).^2+8/3.*log(c).^3)./(1-(2.91./c+78.35./c.^2+1837./c.^3))./(exp(0.511*938.272.*c./(20*10^(y-18)*2.7*8.6170))-1);
   b2=trapz(c,a2);
   da2=c.*(-86.07+50.96.*log(c)-14.45.*log(c).^2+8/3.*log(c).^3)./(1-(2.91./c+78.35./c.^2+1837./c.^3)).*(-3./(exp(0.511*938.272.*c./(20*10^(y-18)*2.7*8.6170))-1)+0.511*938.272.*c./(20*10^(y-18)*2.7*8.6170)./(exp(0.511*938.272.*c./(20*10^(y-18)*2.7*8.6170))+exp(-0.511*938.272.*c./(20*10^(y-18)*2.7*8.6170))-2));
   db2=trapz(c,da2);

   dp=(db1+db2)./(b1+b2);
   plot(y,dp,'r');
   axis([18 21 -1 3]);
   hold on;
end
直接运行就可以,图我已经得到,不好上传,需要的话再联系
10楼2012-05-26 13:40:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
普通回帖

csgt0

荣誉版主 (著名写手)

彩色挂图

【答案】应助回帖

★ ★ ★ ★ ★
感谢参与,应助指数 +1
askformore: 金币+5, 有帮助, 请问NAN是什么?出现这个问题的原因是什么?谢谢! 2012-05-23 11:56:06
内容已删除
showmethemoney
2楼2012-05-23 09:31:44
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csgt0

荣誉版主 (著名写手)

彩色挂图

【答案】应助回帖

★ ★ ★
askformore: 金币+3, 有帮助, 可是,a1和a2里也含有这个指数项,计算它俩的时候是没问题的,画图也没问题。应该问题不在这里。不过还是谢谢你的帮忙! 2012-05-23 11:58:45
因为在y较小时,如果c接近10000,则此值无穷大,超出了计算范围
exp(0.511*938.272.*c./(20*10^(y-18)*2.7*8.6170))
showmethemoney
3楼2012-05-23 09:47:21
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csgt0

荣誉版主 (著名写手)

彩色挂图

exp(709)就已经INF了
showmethemoney
4楼2012-05-23 09:48:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csgt0

荣誉版主 (著名写手)

彩色挂图

【答案】应助回帖

不是说了,要指数超过709就超出范围了,你的k比c小多了,当然a1,a2没问题。
showmethemoney
5楼2012-05-23 12:00:14
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

askformore

木虫 (小有名气)

引用回帖:
5楼: Originally posted by csgt0 at 2012-05-23 12:00:14:
不是说了,要指数超过709就超出范围了,你的k比c小多了,当然a1,a2没问题。

麻烦你仔细看一下,a2里面是含有c的,并且也含有那个指数项
6楼2012-05-23 12:05:00
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

csgt0

荣誉版主 (著名写手)

彩色挂图

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
askformore: 金币+12, ★★★很有帮助, 好的,谢谢你啊! 2012-05-23 12:56:51
xzhdty: 金币+2, 欢迎讨论 2012-05-23 19:06:45
引用回帖:
6楼: Originally posted by askformore at 2012-05-23 12:05:00:
麻烦你仔细看一下,a2里面是含有c的,并且也含有那个指数项

ok,很简单,a2里面出现数/inf,结果为0,而在db里面既出现0/inf,也出现inf/inf,后者结果为nan
如下
>> 0/inf

ans =

     0

>> inf/inf

ans =

   NaN

>> inf/0

ans =

   Inf
showmethemoney
7楼2012-05-23 12:50:24
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

疾凤劲草

铁杆木虫 (正式写手)

Entertainment

楼主啊,你的程序我前几天用我的matlab r2010a算了一下 很久都没有反映,那天我也在编程,运行了一个很多循环的matlab程序,以为matlab给弄出问题了。今天我又运行了一下,还是很久都没有反映,但是关闭matlab主窗口时会闪现你说的那幅不完整图像,我对matlab刚刚开始研究,也不明白,如果找到原因了希望告知一下,谢谢。
8楼2012-05-25 16:59:26
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

hhucy

实习版主 (著名写手)

DOE锅炉工

引用回帖:
8楼: Originally posted by 疾凤劲草 at 2012-05-25 16:59:26
楼主啊,你的程序我前几天用我的matlab r2010a算了一下 很久都没有反映,那天我也在编程,运行了一个很多循环的matlab程序,以为matlab给弄出问题了。今天我又运行了一下,还是很久都没有反映,但是关闭matlab主窗口 ...

是的,新版本matlab会这样的
人生那么多不确定,你怕什么
9楼2012-05-25 18:50:09
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 askformore 的主题更新
信息提示
请填处理意见