QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2478|回复: 2
打印 上一主题 下一主题

求高手帮我看看最速下降法的程序

[复制链接]
字体大小: 正常 放大

9

主题

4

听众

1673

积分

升级  67.3%

  • TA的每日心情
    奋斗
    2018-4-11 22:36
  • 签到天数: 490 天

    [LV.9]以坛为家II

    邮箱绑定达人

    跳转到指定楼层
    1#
    发表于 2012-2-11 18:57 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta |邮箱已经成功绑定
    题目要求用最速下降法求解函数f(x,y)=exp(x^2+y^2-x*y)*cos(x+y)的最小值,我用matlab编程如下:
    syms x y;
    f=exp(x^2+y^2-x*y)*cos(x+y);
    dfx=diff(f,x);dfy=diff(f,y);
    df=[dfx;dfy];
    [x,y]=input('请输入初始值[x,y]:');
    X=[x,y]';
    df=subs(df,[x,y],[X(1),X(2)]);
    k=1;
    lamda=1;
    epsilon=0.001;
    while sqrt(sum(df.^2))>=epsilon
        lamda=fminsearch('fungetlamda',lamda);
        X=X+lamda*df;
        df=subs(df,[X(1),X(2)],[X(1),X(2)]);
        k=k+1;
    end
    disp('[x,y]=');disp([X(1),X(2)]);
    disp('k=');disp(k);
    disp('fobj=');disp(exp(X(1)^2+X(2)^2-X(1)*X(2))*cos(X(1)+X(2)));
    其中函数fungetlamda为:
    function r=fungetlamda(lamda)
    r=exp((X(1)-lamda*df(1))^2+(X(2)-lamda*df(2))^2-(X(1)-lamda*df(1))*(X(2)-lamda*df(2)))*cos((X(1)-lamda*df(1))+(X(2)-lamda*df(2)));
    运行主程序后,命令窗口中出现“请输入初始值[x,y]:”的字样,可当我随意输入一个初始值(比如[0,0])之后,就会报错:??? Too many output arguments.
    请问应该怎样修正?谢谢!
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    暂无签名。

    9

    主题

    4

    听众

    1673

    积分

    升级  67.3%

  • TA的每日心情
    奋斗
    2018-4-11 22:36
  • 签到天数: 490 天

    [LV.9]以坛为家II

    邮箱绑定达人

    额,好像把[x,y]=input('请输入初始值[x,y]:');
    X=[x,y]';
    改成:
    X=input('请输入初始值[x,y]:');
    X=X';
    就不会报这个错了。
    暂无签名。
    回复

    使用道具 举报

    9

    主题

    4

    听众

    1673

    积分

    升级  67.3%

  • TA的每日心情
    奋斗
    2018-4-11 22:36
  • 签到天数: 490 天

    [LV.9]以坛为家II

    邮箱绑定达人

    不过输入初始值后还是会报错:
    ??? Undefined command/function 'X'.

    Error in ==> fungetlamda at 2
    r=exp((X(1)-lamda*df(1))^2+(X(2)-lamda*df(2))^2-(X(1)-lamda*df(1))*(X(2)-lamda*df(2)))*cos((X(1)-lamda*df(1))+(X(2)-lamda*df(2)));
    Error in ==> fminsearch at 175
    fv(:,1) = funfcn(x,varargin{:});

    Error in ==> steepest_descend_method at 12
        lamda=fminsearch('fungetlamda',lamda);
    错在哪儿呢?求帮助!
    暂无签名。
    回复

    使用道具 举报

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

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2025-6-2 01:54 , Processed in 0.646188 second(s), 61 queries .

    回顶部