找回密码
 立即注册
查看: 3835|回复: 2

自己学着写了一个函数,为什么总是报错找不到对象呢,希望大家帮我看看问题在哪。

[复制链接]
发表于 2015-12-31 10:34:59 | 显示全部楼层 |阅读模式
val<-function(C,M,P,n,e){
x1=0;x2=10;
while(abs(P-y)>(P*e))
{
x=(x1+x2)/2;
y=(C*((1+x)^n-1)/((1+x)^(n+1)-(1+x)^n)+M/((1+x)^n));
if(P<y)
{
x1=x2
}
else
x2=x1
}
x;
}
val(1000,10000,2125,3,0.00001)

回复

使用道具 举报

 楼主| 发表于 2015-12-31 10:35:50 | 显示全部楼层
找不到对象y
回复

使用道具 举报

发表于 2016-1-4 17:13:59 | 显示全部楼层
年轻的时候找不到对象,通常是因为长得丑,也有的时候是因为没钱。
PS:你是想在固定区间求解方程吗,还是什么?我改了一下你的代码,可以运行了。你在循环之前首先得定义循环条件涉及的各个变量(函数输入除外)。
以下代码你试试:
  1. val=function(C,M,P,n,e,x1,x2){
  2.   x=(x1+x2)/2;y<-C*((1+x)^n-1)/((1+x)^(n+1)-(1+x)^n)+M/((1+x)^n);
  3.   while(abs(P-y)>(P*e))
  4.   {
  5.     x=(x1+x2)/2;
  6.     y=C*((1+x)^n-1)/((1+x)^(n+1)-(1+x)^n)+M/((1+x)^n);
  7.     if(is.nan(y)) {x;print("循环中y出现类似于分子为0的无意义的情形,停止循环,以下为出现此行为之前的解:");break}
  8.     if(P-y<=0)x1=x2 else x2=x1
  9.   }
  10.   return(x);
  11. }
  12. val(1000,10000,2125,3,0.00001,0,10)#x1=0的情况,循环中会出现分子为的情况
  13. val(1000,10000,2125,3,0.00001,1,10)#x1=1正常运行
  14. val(1000,10000,2125,3,0.00001,0.8,10)#特别卡,我是没有运行完就强制杀死了,我把e(精度吧?)还一下就好了,如下:
  15. val(1000,10000,2125,3,1,0.8,10)
  16. val(1000,10000,2125,3,1,0,10)
  17. val(1000,10000,2125,3,1,6,10)
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|R语言中文网

GMT+8, 2024-11-23 15:05 , Processed in 0.030175 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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