发新话题
打印

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

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

我用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;

TOP

回复 楼主 小妮妮 的帖子

fsolve对初值的要求比较高,这是其本身的缺陷.你用fzero可以求出来,为什么还有fsolve呢?
本帖最近评分记录
  • sigma665 振动币 +50 2008-8-31 09:01 理由:回复具有一定的启发引导性
凡所有相,皆是虚妄。若见诸相非相,即见如来。
注:有问题请事先在论坛相应版块发帖子,不要直接短信或者邮件联系,论坛没有原帖子的一律不回。谢谢合作、见谅!

TOP

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

TOP

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

TOP

回复 板凳 小妮妮 的帖子

通过调节TolX和TolFun也只能猜测,并不能完美解决问题。你可以试一下其他的优化方法,matlab中搜索SQP(序列的二次规划)方法
凡所有相,皆是虚妄。若见诸相非相,即见如来。
注:有问题请事先在论坛相应版块发帖子,不要直接短信或者邮件联系,论坛没有原帖子的一律不回。谢谢合作、见谅!

TOP

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

TOP

回复 6楼 小妮妮 的帖子

自己看看fsolve的帮助文档就不难发现,你的问题用optimset命令解决。自己看看optimset和fsolve的帮助文档吧。
For more info. http://blog.sina.com.cn/zhangfujian

TOP

对于一元方程通过调节TolX和TolFun 可以解决这个问题,但是要是方程组,似乎就不行了,该如何处理?而且具体TolX和TolFun 选取多大值该如何选取,在帮助里根本没有说明。

TOP

fsolve是采用迭代法求解的
如果是多元方程,其中的一个元取值扫过其所有符合的条件时另外一元还没有扫过。也就是有死角,这就要你对初始条件加以更具体的限定,不像一元方程那么随便

TOP

请问楼上你是说初值的设定问题么?设在根附近就可以吧。

TOP

发新话题