声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 7893|回复: 2

[编程技巧] SOLVE函数使用几点注意

[复制链接]
发表于 2007-10-18 13:26 | 显示全部楼层 |阅读模式

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

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

x
用Matlab编程遇到问题,来到振动论坛的Matlab版,版主和其它版友的热心帮助让我十分的感动,现将自己问的问题,以及通过实践得到的一些心得与大家分享。

solve关于解方程的一些技巧。

1
函数为符号函数
(a,b,c为符号时,运算同样成立)
例题: >> solve('a*x^2+b*x+c=0')


ans =

1/2/a*(-b+(b^2-4*a*c)^(1/2))


1/2/a*(-b-(b^2-4*a*c)^(1/2))

2
一般默认x为指定未知量;也可特指,如:特指a为未知量
>>solve('a*x^2+b*x+c=0','a')


ans =

-(b*x+c)/x^2

3
如果a,b,c有赋值,加入subseval语句
例题1
>> a=1;b=3;c=2;subs(solve('a*x^2+b*x+c=0'))

ans =

-1

-2
例题2
>> a=[1;1];b=[3;2];c=[2;1];
>> for m=1:2
eval(solve('a(m)*x^2+b(m)*x+c(m)=0'))
end

ans =

-1


-2


ans =

-1


-1

4
运算中出现复数
一方程如下,其中除xc外都已经赋值,xc为未知量
>>xc=subs(solve('As*fy=fc*b*xc*(xc*ey/(e0*(h0-xc))-(xc*ey/(h0-xc))^2/(3*e0^2))+Es*As*(xc-as)/(h0-xc)*ey'));
得到的结果:

xc =
  1.0e+002 *
   1.7517 - 0.0000i
  -1.0593 - 0.0000i
   0.6221 + 0.0000i


如果复数值非常小的话,可以忽略,根据实际需要取所需实数。
例如:取第三个值的实数部分

>>real(xc(3))
ans=62.21

评分

1

查看全部评分

回复
分享到:

使用道具 举报

发表于 2007-10-18 13:32 | 显示全部楼层
好!
发表于 2007-10-18 13:33 | 显示全部楼层
总结得不错,对初学者比较有用。
---------------------------------------------------------
本版面一向鼓励原创和经验分享
---------------------------------------------------------
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-5-16 03:14 , Processed in 0.056971 second(s), 21 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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