小妮妮 发表于 2008-8-29 14:23

求助!关于fsolve求解方程的问题

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

无水1324 发表于 2008-8-30 22:30

回复 楼主 小妮妮 的帖子

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

小妮妮 发表于 2008-8-31 13:43

因为fzero求解的是一元方程,我涉及的是方程组,所以要用fsolve

小妮妮 发表于 2008-8-31 13:57

有人说可以通过调节TolX和TolFun来处理,可是这两个参数该调节到什么样的值能得到理想的值呢,有什么方法么?

无水1324 发表于 2008-8-31 20:08

回复 板凳 小妮妮 的帖子

通过调节TolX和TolFun也只能猜测,并不能完美解决问题。你可以试一下其他的优化方法,matlab中搜索SQP(序列的二次规划)方法

小妮妮 发表于 2008-9-1 09:32

谢谢楼上,我可以看看你说的那个方法。还有个问题,就是针对具体的方程TolX和TolFun 这两个参数具体取什么,是如何选取的,能详细说说么?

sogooda 发表于 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

请问楼上你是说初值的设定问题么?设在根附近就可以吧。
页: [1]
查看完整版本: 求助!关于fsolve求解方程的问题