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