声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1447|回复: 9

[编程技巧] 求助!关于fsolve求解方程的问题

[复制链接]
发表于 2008-8-29 14:23 | 显示全部楼层 |阅读模式

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

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

x
我用fsolve求解代码中的超越方程得到的解与用fzero得到的解差别很大,我通过改变初值,fzero求解的根很稳定(需要的根),可是fsolve却不稳定,这是怎么回事,我该如何处理能够得到理想的解,请高手明示!
clear all;clc;close all;
global T
format long
n0=[0.04];
options=optimset('display','on');
T=1;
[n(1,:),fval,exitflag]=fsolve(@myfun,n0,options)

function y=myfun(n)
global T
x=n(1);
y=zeros(1,1);
w=sqrt(1+(6*x)^2);
y(1)=(3*x/w)*tanh(w/(2*T/log(2)))-x;
回复
分享到:

使用道具 举报

发表于 2008-8-30 22:30 | 显示全部楼层

回复 楼主 小妮妮 的帖子

fsolve对初值的要求比较高,这是其本身的缺陷.你用fzero可以求出来,为什么还有fsolve呢?

评分

1

查看全部评分

 楼主| 发表于 2008-8-31 13:43 | 显示全部楼层
因为fzero求解的是一元方程,我涉及的是方程组,所以要用fsolve
 楼主| 发表于 2008-8-31 13:57 | 显示全部楼层
有人说可以通过调节TolX和TolFun来处理,可是这两个参数该调节到什么样的值能得到理想的值呢,有什么方法么?
发表于 2008-8-31 20:08 | 显示全部楼层

回复 板凳 小妮妮 的帖子

通过调节TolX和TolFun也只能猜测,并不能完美解决问题。你可以试一下其他的优化方法,matlab中搜索SQP(序列的二次规划)方法
 楼主| 发表于 2008-9-1 09:32 | 显示全部楼层
谢谢楼上,我可以看看你说的那个方法。还有个问题,就是针对具体的方程TolX和TolFun 这两个参数具体取什么,是如何选取的,能详细说说么?
发表于 2008-9-1 14:24 | 显示全部楼层

回复 6楼 小妮妮 的帖子

自己看看fsolve的帮助文档就不难发现,你的问题用optimset命令解决。自己看看optimset和fsolve的帮助文档吧。
 楼主| 发表于 2008-9-1 19:23 | 显示全部楼层
对于一元方程通过调节TolX和TolFun 可以解决这个问题,但是要是方程组,似乎就不行了,该如何处理?而且具体TolX和TolFun 选取多大值该如何选取,在帮助里根本没有说明。
发表于 2008-9-2 18:34 | 显示全部楼层
fsolve是采用迭代法求解的
如果是多元方程,其中的一个元取值扫过其所有符合的条件时另外一元还没有扫过。也就是有死角,这就要你对初始条件加以更具体的限定,不像一元方程那么随便
 楼主| 发表于 2008-9-3 10:41 | 显示全部楼层
请问楼上你是说初值的设定问题么?设在根附近就可以吧。
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

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

GMT+8, 2024-9-23 05:24 , Processed in 0.063227 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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