在Matlab中定义函数的问题

时间:2014-04-18 03:13:16

标签: r matlab function maximize

我在Matlab的第一个晚上遇到麻烦。我正在R里休息我的桂冠...我猜...

我试图解决欧拉方程在无限时间内达到平衡的问题。

Matlab似乎更适合在这个问题上进行优化,但我在开始定义函数时遇到了一些问题。这就是我所拥有的:

%% ECON 20210 Honors Problem Set #2 Code
%% Writen By Jacob Miller
%% Date 4/17/2014

%% In this problem, you have to write 
%% a program to solve the following social planner problem:
%% Maximize The sum from t=1 to T over Ct,Nt, Kt+1 of the function
%% sum from t=1 to T of B^t-1*(Ct^(1-y)/1-y)-psi*log(n) 
%% subject to the constraint Ct=A(kt^a)*(nt^1-a)+(1-d)Kt-Kt+1

function [eul] = funkone(c,y,p,n)
eul = (power(c,minus(1,y))/minus(1,y)-p*log(n));

现在正在返回错误:

EDU>> MillerEconPset2
Error using MillerEconPset2 (line 12)
Not enough input arguments.

似乎我认为我正在尝试运行该功能,但我只是想定义它。我有一个类似的脚本在R中工作:

myfunc<-function(c,y,n,p){
  (c^(1-y))/(1-y)-n*log(p)
}

但不幸的是,R对于解决全球均衡并不是那么好。知道如何修复Matlab代码吗?

感谢十亿人。

最佳,

杰克

1 个答案:

答案 0 :(得分:0)

通过创建包含该函数的文件并使用与函数名称匹配的相应文件名保存该函数来定义函数。应该在与主脚本不同的文件中定义独立功能。然后,只要它们位于MATLAB搜索路径或当前工作目录中,您就可以访问以这种方式定义的任何函数。

在这种情况下可以使用的替代方法是使用匿名函数。那就是:

funkone = @(c,y,p,n) (power(c,minus(1,y))/minus(1,y)-p*log(n));

可以称为

ouput_val = funkone(c,y,p,n)