数模论坛

 找回密码
 注-册-帐-号
搜索
热搜: 活动 交友 discuz
查看: 3078|回复: 3

matlab如何实现函数嵌套???急!

[复制链接]
发表于 2004-4-12 19:24:20 | 显示全部楼层 |阅读模式
小弟在做0.618的程序,想封装起来,用二次函数的系数作为接口,返回最大值的坐标~
可是调用时出现问题!请看:
function [x0,y0]=my618(c) %输入一个二次函数的系数

function [y]=f(x)
  y=c(3)*x.^2+c(2)*x+c(1);
end

a=-100;b=100;e=0.01;p=0;
while(p==0)          %flag p==0执行循环,否则退出
t1=b-.618*(b-a);t2=a+.618*(b-a);
  if (f(t1)<=f(t2))
    if((t2-a)<e)
        p=1;        %flag p=1 退出循环
        x0=t1,y0=f(x0)
    else b=t2;t2=t1;t1=a+.618*(b-a);
    end
  elseif(b-t1<e)
        p=1;
        x0=t2,y0=f(x0)
    else a=t1;t1=t2;t2=b-.618*(b-a);
    end
  end
end

end

输入命令
my618((1,2,1))
??? my618((1,2,1))
            |
Error: ")" expected, "," found.
请 指点,该如何实现????[em12]
 楼主| 发表于 2004-4-12 19:26:26 | 显示全部楼层
请大侠指点!是不是不能嵌套函数啊??
那么封装起来该如何实现??
发表于 2004-4-13 02:13:47 | 显示全部楼层
不好意思,最近时间有点紧,没有细看你的程序,大致改了一下

function [x0,y0]=my618(c) %输入一个二次函数的系数
global c


a=-100;b=100;e=0.01;p=0;
while(p==0)          %flag p==0执行循环,否则退出
t1=b-.618*(b-a);t2=a+.618*(b-a);
    if (f(t1)<=f(t2))
        if((t2-a)<e)
            p=1;        %flag p=1 退出循环
            x0=t1,y0=f(x0)
        else b=t2;t2=t1;t1=a+.618*(b-a);
        end
    elseif(b-t1<e)
        p=1;
        x0=t2,y0=f(x0)
    else a=t1;t1=t2;t2=b-.618*(b-a);
    end
end


function [y]=f(x)
global c
  y=c(3)*x.^2+c(2)*x+c(1);


发表于 2004-4-15 06:27:10 | 显示全部楼层
[转帖]一个m文件可否有多个function?
http://www.dytrol.com/dispbbs.asp?boardID=11&ID=2427&page=2

问:

如果在一个程序中需要调用其他3个程序,并且这3个程序完成的功能是并列的,出现在switch-case语句中,是否可以将这3个function写入一个m文件?
可否写作:
function f1
stament
function f2
stament
function f3
stament
我现在是分别写作3个文件。



function y=mmix(x)
y=madd(x);
y=mtime(y);
return;

function y=madd(x)
y=10+x;
return;

function y=mtime(x)
y=10*x;
return;


>> mmix(10)

ans =

   200

您需要登录后才可以回帖 登录 | 注-册-帐-号

本版积分规则

小黑屋|手机版|Archiver|数学建模网 ( 湘ICP备11011602号 )

GMT+8, 2024-11-30 14:19 , Processed in 0.052753 second(s), 18 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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