全部版块 我的主页
论坛 数据科学与人工智能 数据分析与数据科学 MATLAB等数学软件专版
7050 1
2012-04-30
我是想解这样一个方程

F已知,我将它对x和y求了微分,利用两次quadgk来求积分(吴鹏书里给出的方法)
r是一个给定的量,假设为0.05.
我编写了下面的程序:
x0=[0.5;0.5];
p= fsolve(@(x,y) functionab(x,y), x0);
上面是我的调用语句,functionab里面放的是上面的这个积分方程。
我运行的时候,matlab会报错:
??? Input argument "y" is undefined.

Error in ==> @(x,y)functionab(x,y)


Error in ==> fsolve at 254
            fuser = feval(funfcn{3},x,varargin{:});

Error in ==> SolveAb at 5
p= fsolve(@(x,y) functionab(x,y), x0);

Caused by:
    Failure in initial user-supplied objective function evaluation. FSOLVE cannot continue.

我想知道为什么会这样啊?书里面例子的写法跟我差不多啊,为什么说我没有定义变量呢?

下面是相关的其它函数:



下面是方程组的函数,嵌套了copula和边缘分布cdf的函数,我贴出来:
%functionab.m
function [ f ] = functionab(x,y)
%引理3.1方程组函数,目的是解出最优的持有量a,b. r是要给定的参数。

r=0.05;
f(1)=quadgk(@(u) arrayfun(@(uu) quadgk(@(v) arrayfun(@(vv) (r-vv)./(1+r+x.*(vv-r)+y.*(uu-r)).*GumblePdf(vv,uu).*...
    NasdaqPdf(vv).*Sp500Pdf(uu),v), -inf,inf),u), -Inf, Inf);
f(2)=quadgk(@(u) arrayfun(@(uu) quadgk(@(v) arrayfun(@(vv) (r-uu)./(1+r+x.*(vv-r)+y.*(uu-r)).*GumblePdf(vv,uu).*...
    NasdaqPdf(vv).*Sp500Pdf(uu),v), -Inf,Inf),u), -Inf, Inf);
f=[f(1);f(2)];


后面是嵌套函数,可以不用去管


%nasdaqCdf
function [ y ] = NasdaqCdf( x )
%NASDAQCDF Summary of this function goes here
%   Detailed explanation goes here
y=quadgk(@(u) NasdaqPdf(u),-inf,x);
end


%sp500Cdf
function [ y ] = Sp500Cdf( x )
%SP500CDF Summary of this function goes here
%   Detailed explanation goes here
y=quadgk(@(u) Sp500Pdf(u),-inf,x);

end

%Gumble Copula function
function [ f ] = GumbleCopulaFunction( x , y )
%GUMBLECOPULAFUNCTION Summary of this function goes here
%   Detailed explanation goes here
a=3.6443;
%f=exp(-((-log(NasdaqCdf(x))).^a+(-log(Sp500Cdf(y))).^a).^(1./a));
f=exp(log(NasdaqCdf(x)).*(1+(log(Sp500Cdf(y))./log(NasdaqCdf(x))).^a).^(1./a));
end

%Gumble copula Pdf
function [ f ] = GumblePdf( x,y )
%GUMBLEPARTIALDIFFERENCE Gumble copula函数的二阶联合偏导
a=3.6443;
v=NasdaqCdf(x);
z=Sp500Cdf(y);
f1=GumbleCopulaFunction(x,y);
f=f1./(v.*z).*(log(v).*log(z)).^(a-1).*...
    (((-log(v)).^a+(-log(z)).^a).^(2./a-2)-(1-a).*((-log(v)).^a+(-log(z)).^a)...
    .^(1/a-2));

end

end

最后是两个核密度生成pdf的函数,由于要加载数据,不能嵌套到上面的函数里。
%nasdaqPdf文件
function [ fnasdaq ] = NasdaqPdf( x )
%NASDAQPDF Summary of this function goes here
%   Detailed explanation goes here
load nasdaq1261.txt
N=1261;
t=0;
for i=1:1261
    t=t+exp(-0.5*((x-nasdaq1261(i))/0.0025).^2);
end
fnasdaq=1/(sqrt(2*pi)*N*0.0025)*t;
end


%sp500Pdf文件
function [ fsp500 ] = Sp500Pdf( x )
%SP500PDF Summary of this function goes here
%   Detailed explanation goes here
load sp5001261.txt;
N=1261;
t=0;
for i=1:1261
    t=t+exp(-0.5*((x-sp5001261(i))/0.0025).^2);
end
fsp500=1/(sqrt(2*pi)*N*0.0025)*t;
end

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

全部回复
2012-4-30 19:37:31

呵呵,似乎看错了

二维码

扫码加我 拉你入群

请注明:姓名-公司-职位

以便审核进群资格,未注明则拒绝

相关推荐
栏目导航
热门文章
推荐文章

说点什么

分享

扫码加好友,拉您进群
各岗位、行业、专业交流群