声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 3884|回复: 15

[图像处理] 求助 如何在图像中把虚数解标出来

[复制链接]
发表于 2011-4-21 14:51 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
b=0;
for j=1:100
    p(j)=0+0.1*j;
  b=p(j);
a=[b-2 b 6-b 4-b];
x=roots(a);
d(j)=x(1)
end
plot(p,d)
hold on

这个程序画的是方程解的图,但是有的解是虚数,matlab好像是直接取实数部分放到图里面去了,请问怎样才能把图里面属于虚数的那些点标成红色
回复
分享到:

使用道具 举报

发表于 2011-4-21 15:59 | 显示全部楼层
本帖最后由 hancy 于 2011-4-21 16:12 编辑

real(d)代表d的实部,imag(d)是虚部

plot(p,imag(d),'r.')
untitled.jpg

 楼主| 发表于 2011-4-21 16:30 | 显示全部楼层
回复 2 # hancy 的帖子

终于画出来了  万分感谢~~
 楼主| 发表于 2011-4-21 17:29 | 显示全部楼层
本帖最后由 kalfca 于 2011-4-21 17:34 编辑

回复 2 # hancy 的帖子

才想起来这个图里面的点仅仅只是虚部值的点,不是方程解的点,下面的图就是这个方程的解的图,我希望是将图中那些解的点是虚数用红点标示出来,效果如下,图中的红点是我用图形编辑器画的...我有个思路  就是加个判定语句
未命名.jpg


发表于 2011-4-21 18:01 | 显示全部楼层
回复 4 # kalfca 的帖子
  1. b=0;
  2. for j=1:100
  3. p(j)=0+0.1*j;
  4. b=p(j);
  5. a=[b-2 b 6-b 4-b];
  6. x=roots(a);
  7. d(j)=x(1);
  8. end
  9. for i=1:100
  10. if imag(d(i))~=0
  11. D(i)=d(i);
  12. else D(i)=-25;
  13. end
  14. end
  15. plot(p,real(d),p,real(D),'r.')
  16. axis([0 10 -20 25])
  17. hold on
复制代码
untitled1.jpg
虽然实现了你的目的,但是过程很繁琐,实际上是根据已知结果对图像的处理
额,我也新手,水平不足。希望有高人提供真正的解决方法!
 楼主| 发表于 2011-4-21 20:06 | 显示全部楼层
回复 5 # hancy 的帖子

你比我厉害多了 我才是超级新手,为了毕业设计没办法,大学四年没碰过matlab...这个就已经很好很好啦~非常感谢你  我可以向老师交代了~~

点评

又是应付差事.........汗  发表于 2011-4-22 09:18
 楼主| 发表于 2011-4-21 20:12 | 显示全部楼层
回复 5 # hancy 的帖子

else D(i)=-25;
end
end
plot(p,real(d),p,real(D),'r.')
axis([0 10 -20 25])
hold on
完了,老大,这有个地方看不懂哇 这个D(i)=-25有什么作用呢 为什么选-25?作用是使点超过图形的表示范围么~~?
发表于 2011-4-21 20:25 | 显示全部楼层
回复 7 # kalfca 的帖子

是啊,下面那个axis([xmin xmax ymin ymax])是控制显示范围的
-25在-20下面,不会显示在图上
 楼主| 发表于 2011-4-21 20:26 | 显示全部楼层
回复 8 # hancy 的帖子

哈哈 这你都想得到
发表于 2011-4-21 20:31 | 显示全部楼层
回复 9 # kalfca 的帖子

这是取巧的办法,往往大型一点的题目就没法用了-_-!!

还是等待高手给个真正的解决办法吧
 楼主| 发表于 2011-4-21 20:38 | 显示全部楼层
回复 10 # hancy 的帖子

呵呵 好吧 辛苦你了~
发表于 2011-4-22 09:05 | 显示全部楼层
本帖最后由 meiyongyuandeze 于 2011-4-22 09:06 编辑
  1. clear;
  2. clc;
  3. close all
  4. format long;
  5. b0=linspace(0,10,100);
  6. d=arrayfun(@(b)roots([b-2 b 6-b 4-b]),b0,'Uni',0);
  7. dd=cell2mat(d)
复制代码
用匿名函数+arryfun可以比较简单的完成循环求根,但实在看不出哪里有复根。。。。。所以没画图!
显然你的多项式有一个重根为-1,而且每个b值对应三个根。。。。。
 楼主| 发表于 2011-4-22 10:58 | 显示全部楼层
回复 12 # meiyongyuandeze 的帖子

这个有复根的啊,具体图形显示不出来我也不知道,我只有带数字进去验算
当b=3的时候 a=(1 3 3 1)
a=[1 3 3 1];
>> roots(a)

ans =

  -1.0000 + 0.0000i
  -1.0000 - 0.0000i
  -1.0000   
这个是结果....
 楼主| 发表于 2011-4-22 11:01 | 显示全部楼层
回复 12 # meiyongyuandeze 的帖子

只是不知道为什么会出现i  而且i 前面还是0.0000
 楼主| 发表于 2011-4-22 11:08 | 显示全部楼层
回复 12 # meiyongyuandeze 的帖子

刚才试了下这个程序 有复根 不过很小很小....
dd =

  Columns 1 through 4

  2.000000000000001                       2.053191489361700                       2.112359550561797                       2.178571428571430                     
-0.999999981369628                      -1.000000000000000 + 0.000000016292727i -1.000000000000000 + 0.000000015477330i -0.999999999999999 + 0.000000006252422i
-1.000000018630372                      -1.000000000000000 - 0.000000016292727i -1.000000000000000 - 0.000000015477330i -0.999999999999999 - 0.000000006252422i

这个图怎么画呢 都显示不出来...
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-9-30 11:38 , Processed in 0.067917 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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