楼主: 12345fghk
7989 11

[其他] 求助matlab solve 与fzero结果完全不一致。 [推广有奖]

  • 0关注
  • 0粉丝

硕士生

89%

还不是VIP/贵宾

-

威望
0
论坛币
1119 个
通用积分
10.0000
学术水平
1 点
热心指数
1 点
信用等级
0 点
经验
1711 点
帖子
122
精华
0
在线时间
89 小时
注册时间
2007-11-19
最后登录
2023-12-26

10论坛币
解这个方程-87/2/x+1/2*exp(x)*(87+200*x)/x-782/5=0,用fzero命令:fzero(char(fangcheng),0.3)
可以算出正确值 0.1010
可是用solve命令:solve(fangcheng,x),无论怎么样都得到0.的结果是怎么回事?

最佳答案

mike68097 查看完整内容

方法1:>> syms x>> solve(-87/2/x+1/2*exp(x)*(87+200*x)/x-782/5==0, x) ans = 0.10099792968574978894955689083098 -------------------------- 方法2: fangcheng ='-87/2/x+1/2*exp(x)*(87+200*x)/x-782/5' >> fzero(fangcheng, 0.3) ans = 0.1010 >> solve(fangcheng, 0.3) ans = 0.10099792968574978894955689083098
关键词:MATLAB matla Solve atlab fzero matlab
沙发
mike68097 发表于 2014-10-20 22:12:09 |只看作者 |坛友微信交流群

方法1:

>> syms x

>> solve(-87/2/x+1/2*exp(x)*(87+200*x)/x-782/5==0, x)
ans =
0.10099792968574978894955689083098
--------------------------

方法2:
fangcheng ='-87/2/x+1/2*exp(x)*(87+200*x)/x-782/5'
>> fzero(fangcheng, 0.3)
ans =
    0.1010
>> solve(fangcheng, 0.3)
ans =
0.10099792968574978894955689083098

使用道具

藤椅
breezelhc 发表于 2014-10-20 22:50:09 |只看作者 |坛友微信交流群
这个跟你设置的初值有关系
已有 1 人评分论坛币 收起 理由
admin_kefu + 30 根据规定进行奖励

总评分: 论坛币 + 30   查看全部评分

使用道具

板凳
yumusenlin 发表于 2014-10-21 09:50:02 |只看作者 |坛友微信交流群
多设置些初始值试一试。根本原因就是,这两个functions做optimization找local minimum 的方法是不同的,所以找点方式不同,会有这些问题,尤其是ill-conditioned problem。

使用道具

报纸
12345fghk 发表于 2014-10-24 11:32:53 |只看作者 |坛友微信交流群
mike68097 发表于 2014-10-21 10:29
方法1:>> syms x>> solve(-87/2/x+1/2*exp(x)*(87+200*x)/x-782/5==0, x)
ans =
0.100997929685749788949 ...
还是不行啊,用到solve时两个方法都不行,方法一:



方法二:
附件: 你需要登录才可以下载或查看附件。没有帐号?我要注册

使用道具

地板
12345fghk 发表于 2014-10-24 11:33:55 |只看作者 |坛友微信交流群
mike68097 发表于 2014-10-21 10:29
方法1:>> syms x>> solve(-87/2/x+1/2*exp(x)*(87+200*x)/x-782/5==0, x)
ans =
0.100997929685749788949 ...
我用的matlab7.0和win7的系统,是不是matlab坏了?

使用道具

7
12345fghk 发表于 2014-10-24 12:22:59 |只看作者 |坛友微信交流群
谢谢各位,问题已解决,这个方程没有解析解,而solve给出的是符号解析解,对于无解析解的方程效果很差。下面是一段百度百科的文字:“在MATLAB中,solve函数主要是用来求解代数方程(多项式方程)的符号解析解。也能解一些简单其他方程的数值解,不过对于解其他方程的能力很弱,此时求出的解往往是不精确或不完整的。注意可能得到的只是部分的结果,并不是全部解。”

使用道具

8
mike68097 发表于 2014-10-24 12:38:26 |只看作者 |坛友微信交流群
不懂你的Matlab的设置是否有问题, 看起来小数点以下都被舍去或没显示, 也许你要试试以下:

format short
fangcheng ='-87/2/x+1/2*exp(x)*(87+200*x)/x-782/5'
solve(fangcheng, 0.3)

使用道具

9
12345fghk 发表于 2014-10-24 13:10:23 |只看作者 |坛友微信交流群
mike68097 发表于 2014-10-24 12:38
不懂你的Matlab的设置是否有问题, 看起来小数点以下都被舍去或没显示, 也许你要试试以下:

format short
...
还是一样的0.
你的matlab能得出正确的结果吗?

使用道具

10
mike68097 发表于 2014-10-24 15:57:58 |只看作者 |坛友微信交流群

对了, matlab可以设定求解精度/次数等设定, 你可以试试以下, 看看设定的精度是否足够?  如果还不行, 那大哥你就重新安装吧, 免的忙来忙去一场空!

-------------------------------------
>> options=optimset('fsolve');可以试试去查看options的值, 并于必要时更改:

>> options.TolFun  
ans= 1.0000e-06

>> options.TolX
ans= 1.0000e-06

>>options.MaxIter
ans= 400

>> options.Algorithm
ans = trust-region-dogleg
------------------------------------------
如果还不行, 建议你换套matlab试验看看 https://bbs.pinggu.org/thread-3155044-1-1.html (matlab8.3).
这结果应该就会跟之前讲的一样了.

>> solve(fangcheng, 0.3)
ans =
0.10099792968574978894955689083098

使用道具

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

本版微信群
加JingGuanBbs
拉您进交流群

京ICP备16021002-2号 京B2-20170662号 京公网安备 11010802022788号 论坛法律顾问:王进律师 知识产权保护声明   免责及隐私声明

GMT+8, 2024-4-27 11:32