查看: 1734|回复: 8|关注: 0

[已解决] 极值I分布变量nataf变换相关计算程序出错。求路过朋友帮.....

[复制链接]

新手

38 麦片

财富积分


050


28

主题

106

帖子

0

最佳答案
本人在张明的结构可靠度计算一书中看到 极值I变量nataf变换相关系数计算程序如下 1120.jpg

输入到程序中
  1. function rhoYij=rhoevievi(muX,sigmaX,rhoX12)
  2. aEv=sqrt(6)*sigmaX/pi;uEv=-psi(1)*aEv-muX;
  3. f=@(r)intergral2(@(yi,yj)1./sqrt(1-r.^2)/2/pi.*...
  4.     exp(-(yi.^2-2*r.*yi.*yj+yj.^2)./(1-r.^2)/2).*...
  5.     (-evinv(1-normcdf(yi),uEv(1),aEv(1))-muX(1))/sigmaX(1).*...
  6.     (-evinv(1-normcdf(yj),uEv(2),aEv(2))-muX(2))/sigmaX(2),...
  7.     -5,5,-5,5);
  8. rhoYij=fzero(@(r)f(r)-rhoX12,rhoX12)
复制代码
但是我一测试就出问题
  1. muX=[1;2];sigmaX=[0.1;0.2];rhoX12=0.5;
  2. function rhoYij=rhoevievi(muX,sigmaX,rhoX12)
  3. aEv=sqrt(6)*sigmaX/pi;uEv=-psi(1)*aEv-muX;
  4. f=@(r)intergral2(@(yi,yj)1./sqrt(1-r.^2)/2/pi.*...
  5.     exp(-(yi.^2-2*r.*yi.*yj+yj.^2)./(1-r.^2)/2).*...
  6.     (-evinv(1-normcdf(yi),uEv(1),aEv(1))-muX(1))/sigmaX(1).*...
  7.     (-evinv(1-normcdf(yj),uEv(2),aEv(2))-muX(2))/sigmaX(2),...
  8.     -5,5,-5,5);
  9. rhoYij=fzero(@(r)f(r)-rhoX12,rhoX12)
复制代码
错误提示如下:错误使用 fzero (line 306)
FZERO 无法继续,因为用户提供的 function_handle ==> @(r)f(r)-rhoX12 失败,出
现下面的错误。

未定义与 'function_handle' 类型的输入参数相对应的函数 'intergral2'。

306             error('MATLAB:fzero:InvalidFunctionSupplied',...


在此我已经纠结了很久得不到解决,希望路过的朋友能帮忙看看解决解决

论坛优秀回答者

专家

2829 麦片

财富积分


20003000


4

主题

5245

帖子

615

最佳答案
  • 关注者: 930
发表于 2018-6-22 12:58:44 | 显示全部楼层
1.请确定你提交了完整的代码
因为我不觉得你报错的代码有问题,在我电脑上运行也没错
2.请确定你知道function的用法,并正确使用自定义函数的调用
因为function的东西并不是让你运行,而是让你调用的

新手

38 麦片

财富积分


050


28

主题

106

帖子

0

最佳答案
 楼主| 发表于 2018-6-22 14:18:19 | 显示全部楼层
本帖最后由 jiangchangs123 于 2018-6-22 14:30 编辑
halleyhit 发表于 2018-6-22 12:58
1.请确定你提交了完整的代码
因为我不觉得你报错的代码有问题,在我电脑上运行也没错
2.请确定你知道functi ...

感谢您的感谢解答,非常高兴你的热心帮助。
1.我确定我输入的代码没有遗漏,检查过好几次了。
2.函数用法我懂个大概,这是在后面运算调用这个函数时候出错我简化了的
3.同时我发现对数正态分布与极值I分布nataf变换函数可用,代码如下
  1. function rhoYij=rhoevilogn(muX,sigmaX,rhoX12)
  2. aEv=sqrt(6)*sigmaX(1)/pi;uEv=-psi(1)*aEv-muX(1);
  3. sLn=sqrt(log(1+(sigmaX(2)/muX(2))^2));
  4. mLn=log(muX(2))-sLn.^2/2;
  5. f=@(r)integral2(@(yi,yj)1./sqrt(1-r.^2)/2/pi.*...
  6.     exp(-(yi.^2-2*r.*yi.*yj+yj.^2)./(1-r.^2)/2).*...
  7.     (-evinv(1-normcdf(yi),uEv,aEv)-muX(1))/sigmaX(1).*...
  8.     (logninv(normcdf(yj),mLn,sLn)-muX(2))/sigmaX(2),...
  9.     -5,5,-5,5);
  10. rhoYij=fzero(@(r)f(r)-rhoX12,rhoX12)
复制代码

4.我确实不知道上面这个哪里出错了,能不能帮忙修改修改。在此谢过5.我测试过多次
  1. muX=[1;2];sigmaX=[0.1;0.2];rhoX12=0.1;
  2. % function rhoYij=rhoevievi(muX,sigmaX,rhoX12)  %%直接不定义函数,就会报错
  3. aEv=sqrt(6)*sigmaX/pi;uEv=-psi(1)*aEv-muX;
  4. f=@(r)intergral2(@(yi,yj)1./sqrt(1-r.^2)/2/pi.*...
  5.     exp(-(yi.^2-2*r.*yi.*yj+yj.^2)./(1-r.^2)/2).*...
  6.     (-evinv(1-normcdf(yi),uEv(1),aEv(1))-muX(1))/sigmaX(1).*...
  7.     (-evinv(1-normcdf(yj),uEv(2),aEv(2))-muX(2))/sigmaX(2),...
  8.     -5,5,-5,5);
  9. rhoYij=fzero(@(r)f(r)-rhoX12,rhoX12)

复制代码

论坛优秀回答者

专家

2829 麦片

财富积分


20003000


4

主题

5245

帖子

615

最佳答案
  • 关注者: 930
发表于 2018-6-22 14:24:35 | 显示全部楼层 |此回复为最佳答案
本帖最后由 halleyhit 于 2018-6-22 14:30 编辑
jiangchangs123 发表于 2018-6-22 14:18
感谢您的感谢解答,非常高兴你的热心帮助。
1.我确定我输入的代码没有遗漏,检查过好几次了。
2.函数用法 ...

已经说过了,function的东西并不是让你运行,而是让你调用的
但你的代码从来都没有调用过
我也猜不出你到底是怎么执行的语句才会出来一楼的那种报错
建议还是那句话,请确定你知道function的用法,并正确使用自定义函数的调用
另外,integral2你拼错了

新手

38 麦片

财富积分


050


28

主题

106

帖子

0

最佳答案
 楼主| 发表于 2018-6-22 14:30:53 | 显示全部楼层
halleyhit 发表于 2018-6-22 14:24
已经说过了,function的东西并不是让你运行,而是让你调用的
但你的代码从来都没有调用过
我也猜不出你到 ...
  1. muX=[1;2];sigmaX=[0.1;0.2];rhoX12=0.1;
  2. % function rhoYij=rhoevievi(muX,sigmaX,rhoX12)  %%直接不定义函数,就会报错
  3. aEv=sqrt(6)*sigmaX/pi;uEv=-psi(1)*aEv-muX;
  4. f=@(r)intergral2(@(yi,yj)1./sqrt(1-r.^2)/2/pi.*...
  5.     exp(-(yi.^2-2*r.*yi.*yj+yj.^2)./(1-r.^2)/2).*...
  6.     (-evinv(1-normcdf(yi),uEv(1),aEv(1))-muX(1))/sigmaX(1).*...
  7.     (-evinv(1-normcdf(yj),uEv(2),aEv(2))-muX(2))/sigmaX(2),...
  8.     -5,5,-5,5);
  9. rhoYij=fzero(@(r)f(r)-rhoX12,rhoX12)

复制代码
像这样,直接不定义函数,直接运算吧。这样都会报错。麻烦您能帮我看看具体情况么错误提示:错误使用 fzero (line 306)FZERO 无法继续,因为用户提供的 function_handle ==> @(r)f(r)-rhoX12 失败,出现下面的错误。

未定义与 'function_handle' 类型的输入参数相对应的函数 'intergral2'。

306             error('MATLAB:fzero:InvalidFunctionSupplied',..


论坛优秀回答者

专家

2829 麦片

财富积分


20003000


4

主题

5245

帖子

615

最佳答案
  • 关注者: 930
发表于 2018-6-22 14:32:32 | 显示全部楼层
jiangchangs123 发表于 2018-6-22 14:30
像这样,直接不定义函数,直接运算吧。这样都会报错。麻烦您能帮我看看具体情况么错误提示:错误使用 fzer ...

囧。。。饶了那么大一圈,你自己函数名拼错了integral2

新手

38 麦片

财富积分


050


28

主题

106

帖子

0

最佳答案
 楼主| 发表于 2018-6-22 14:35:52 | 显示全部楼层
halleyhit 发表于 2018-6-22 14:24
已经说过了,function的东西并不是让你运行,而是让你调用的
但你的代码从来都没有调用过
我也猜不出你到 ...

大神,感谢你的耐心帮助哈,就是那个integral2写错了。。。蟹蟹你,太厉害了

新手

38 麦片

财富积分


050


28

主题

106

帖子

0

最佳答案
 楼主| 发表于 2018-6-22 14:37:05 | 显示全部楼层
halleyhit 发表于 2018-6-22 14:24
已经说过了,function的东西并不是让你运行,而是让你调用的
但你的代码从来都没有调用过
我也猜不出你到 ...

大神,谢谢你的帮助哈,就是那个写错了,问题已找到。。非常感谢你。。。

新手

5 麦片

财富积分


050


0

主题

3

帖子

0

最佳答案
发表于 2019-3-16 13:15:42 | 显示全部楼层
请问楼主,知道贝塔分布与威布尔分布之间的等效相关系数求解方法吗?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /4 下一条

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