| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1072 人关注过本帖
标题:多用用符号求解
取消只看楼主 加入收藏
abingchem
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:716
专家分:0
注 册:2004-12-30
收藏
 问题点数:0 回复次数:4 
多用用符号求解
符号可以求出精确解:
>> solve('sin(x)=cos(x)')

ans =

1/4*pi

>> f2=solve('tan(2*x)=sin(x)')

f2 =

[ 0]
[ pi]
[ atan(1/2*(-2*3^(1/2))^(1/2),1/2+1/2*3^(1/2))]
[ atan(-1/2*(-2*3^(1/2))^(1/2),1/2+1/2*3^(1/2))]
[ atan(1/2*2^(1/2)*3^(1/4)/(1/2-1/2*3^(1/2)))+pi]
[ -atan(1/2*2^(1/2)*3^(1/4)/(1/2-1/2*3^(1/2)))-pi]

>> [x,y,z]=solve('x+y+z=1','x-y+z=2','2*x-y-z=1')

x =

2/3


y =

-1/2


z =

5/6

求解小问题的时候,多用符号方法,可能会有意想不到的效果哟
搜索更多相关主题的帖子: 符号 求解 
2006-07-04 11:30
abingchem
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:716
专家分:0
注 册:2004-12-30
收藏
得分:0 
第一段程序如果改成这样:
a=solve('3*x=1');
if a==1/3
disp('equal or not equal');
elseif a-1/3==0
disp('equal!');
else disp('not equal!');
end
结果就是:
equal or not equal
可见a=1/3

对第二段,你可以加一个syms i;变成:
syms i;
b=solve('3*x=i');
if b==1/3*i
。。。。。。
试试,结果意想不到哟:)

而事实上,在运行环境里a-1/2=b-1/3*pi=c-1/2*pi=0,
我不知道是不是这样的情况,在编程中,很麻烦的一件事就是浮点数和零的比较,很多时候,是比较误差的,只要在认可的范围内,浮点数足够小就当成零了。

此人已消失
2006-07-04 18:49
abingchem
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:716
专家分:0
注 册:2004-12-30
收藏
得分:0 
即使在符号数,在电脑里也是离散化的,也是字节,不可能保证像数学上那样

此人已消失
2006-07-04 20:02
abingchem
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:716
专家分:0
注 册:2004-12-30
收藏
得分:0 
虚数和实数是不能比较的,何必较这个真呢?如果我是编matlab的,我可以取两个数的实部进行大小比较,一样可以给个结果

至于你说的那个比较,我觉得可能会是这样的:==进行了对符号运算的扩展,而<则没有,就像C++中的运算符重载一样
这是软件本身语法方面的问题

此人已消失
2006-07-04 23:22
abingchem
Rank: 6Rank: 6
等 级:贵宾
威 望:24
帖 子:716
专家分:0
注 册:2004-12-30
收藏
得分:0 
偶没觉得是对着偶来的啊

此人已消失
2006-07-05 21:24
快速回复:多用用符号求解
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.016808 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved