INFINITY -数学とかプログラミングとか-

統計とプログラムを使って役に立たせたい

TeX用コマンド入力を支援するための辞書をご利用ください。
sanctuary's blogは,適当なことが書いてあります。

2次元版、勾配降下法2(最急降下法)

極値が1個だけだと面白く無いので、次のような関数を損失関数とします。

J(x,y)=xy\exp(-x^2-y^2)

#loss function1

x=seq(-2,2,length=50)
y=seq(-2,2,length=50)
lossfunc1=function(x,y){
	return(x*y*exp(-x^2-y^2))
}

z=matrix(0,50,50)
for(i in 1:50){
	for(j in 1:50){
		z[i,j]=lossfunc1(x[i],y[j])
	}
}

persp(x,y,z,ticktype="detailed",theta = 30, phi = 20, expand = 0.5,col = "lightblue",xlim=c(-2,2),ylim=c(-2,2),zlim=c(-0.5,0.5))

損失関数のグラフ

f:id:infinity_th4:20120623000332j:image:w360

極大値は(-1/\sqrt(2),-1/\sqrt(2)),(1/\sqrt(2),1/\sqrt(2))で、0.1839397を取ります。

極小値は(-1/\sqrt(2),1/\sqrt(2)),(1/\sqrt(2),-1/\sqrt(2))で、-0.1839397を取ります。

dffunc1=function(vecw){
	x=vecw[1];y=vecw[2]
	return(matrix(c(exp(-x^2-y^2)*y*(1-2*x^2),exp(-x^2-y^2)*x*(1-2*y^2)),2,1))
}

vecw_list=c()
cntlist=c()
errorlist=c()

grad201=function(vecw,alpha,times){
	cnt=1
	for(i in 1:times){
		vecw_before=vecw
		vecw=vecw-alpha*dffunc1(vecw)
		#if(cnt==1||0==cnt%%1000000){
			vecw_list<<-c(vecw_list,vecw)
			cntlist<<-c(cntlist,cnt)
			errorlist<<-c(errorlist,c(vecw-vecw_before)%*%c(vecw-vecw_before))
			printf("cnt:%d;vecw=(%.8f,%.8f),error=%.8f\n",cnt,vecw[1],vecw[2],c(vecw-vecw_before)%*%c(vecw-vecw_before))
			printf("dffunc1[1]:%f,dffunc1[2]:%f\n",dffunc1(vecw)[1],dffunc1(vecw)[2])
		#}
		if(c(vecw-vecw_before)%*%c(vecw-vecw_before)<=1.0e-8){
			break
		}
		cnt=cnt+1
	}

}

まず、初期値に(-1,1)をとってみます。

> vecw=matrix(c(-1,1),2,1)
> 
> 
> grad201(vecw,0.1,1e+5)
cnt:1;vecw=(-0.98646647,0.98646647),error=0.00036631
dffunc1[1]:-0.133304,dffunc1[2]:0.133304
cnt:2;vecw=(-0.97313610,0.97313610),error=0.00035540
dffunc1[1]:-0.130905,dffunc1[2]:0.130905
cnt:3;vecw=(-0.96004559,0.96004559),error=0.00034272
dffunc1[1]:-0.128158,dffunc1[2]:0.128158
cnt:4;vecw=(-0.94722981,0.94722981),error=0.00032849
dffunc1[1]:-0.125085,dffunc1[2]:0.125085
cnt:5;vecw=(-0.93472127,0.93472127),error=0.00031293
dffunc1[1]:-0.121717,dffunc1[2]:0.121717
cnt:6;vecw=(-0.92254960,0.92254960),error=0.00029630
dffunc1[1]:-0.118085,dffunc1[2]:0.118085
cnt:7;vecw=(-0.91074113,0.91074113),error=0.00027888
dffunc1[1]:-0.114226,dffunc1[2]:0.114226
cnt:8;vecw=(-0.89931858,0.89931858),error=0.00026095
dffunc1[1]:-0.110177,dffunc1[2]:0.110177
cnt:9;vecw=(-0.88830085,0.88830085),error=0.00024278
dffunc1[1]:-0.105979,dffunc1[2]:0.105979
cnt:10;vecw=(-0.87770293,0.87770293),error=0.00022463
dffunc1[1]:-0.101671,dffunc1[2]:0.101671
cnt:11;vecw=(-0.86753586,0.86753586),error=0.00020674
dffunc1[1]:-0.097290,dffunc1[2]:0.097290
cnt:12;vecw=(-0.85780690,0.85780690),error=0.00018931
dffunc1[1]:-0.092873,dffunc1[2]:0.092873
cnt:13;vecw=(-0.84851965,0.84851965),error=0.00017251
dffunc1[1]:-0.088453,dffunc1[2]:0.088453
cnt:14;vecw=(-0.83967430,0.83967430),error=0.00015648
dffunc1[1]:-0.084063,dffunc1[2]:0.084063
cnt:15;vecw=(-0.83126799,0.83126799),error=0.00014133
dffunc1[1]:-0.079729,dffunc1[2]:0.079729
cnt:16;vecw=(-0.82329505,0.82329505),error=0.00012714
dffunc1[1]:-0.075476,dffunc1[2]:0.075476
cnt:17;vecw=(-0.81574741,0.81574741),error=0.00011393
dffunc1[1]:-0.071325,dffunc1[2]:0.071325
cnt:18;vecw=(-0.80861496,0.80861496),error=0.00010174
dffunc1[1]:-0.067291,dffunc1[2]:0.067291
cnt:19;vecw=(-0.80188584,0.80188584),error=0.00009056
dffunc1[1]:-0.063390,dffunc1[2]:0.063390
cnt:20;vecw=(-0.79554683,0.79554683),error=0.00008037
dffunc1[1]:-0.059632,dffunc1[2]:0.059632
cnt:21;vecw=(-0.78958365,0.78958365),error=0.00007112
dffunc1[1]:-0.056024,dffunc1[2]:0.056024
cnt:22;vecw=(-0.78398121,0.78398121),error=0.00006277
dffunc1[1]:-0.052573,dffunc1[2]:0.052573
cnt:23;vecw=(-0.77872391,0.77872391),error=0.00005528
dffunc1[1]:-0.049281,dffunc1[2]:0.049281
cnt:24;vecw=(-0.77379582,0.77379582),error=0.00004857
dffunc1[1]:-0.046149,dffunc1[2]:0.046149
cnt:25;vecw=(-0.76918094,0.76918094),error=0.00004259
dffunc1[1]:-0.043177,dffunc1[2]:0.043177
cnt:26;vecw=(-0.76486327,0.76486327),error=0.00003728
dffunc1[1]:-0.040362,dffunc1[2]:0.040362
cnt:27;vecw=(-0.76082705,0.76082705),error=0.00003258
dffunc1[1]:-0.037703,dffunc1[2]:0.037703
cnt:28;vecw=(-0.75705679,0.75705679),error=0.00002843
dffunc1[1]:-0.035194,dffunc1[2]:0.035194
cnt:29;vecw=(-0.75353742,0.75353742),error=0.00002477
dffunc1[1]:-0.032831,dffunc1[2]:0.032831
cnt:30;vecw=(-0.75025433,0.75025433),error=0.00002156
dffunc1[1]:-0.030609,dffunc1[2]:0.030609
cnt:31;vecw=(-0.74719343,0.74719343),error=0.00001874
dffunc1[1]:-0.028522,dffunc1[2]:0.028522
cnt:32;vecw=(-0.74434119,0.74434119),error=0.00001627
dffunc1[1]:-0.026565,dffunc1[2]:0.026565
cnt:33;vecw=(-0.74168468,0.74168468),error=0.00001411
dffunc1[1]:-0.024731,dffunc1[2]:0.024731
cnt:34;vecw=(-0.73921156,0.73921156),error=0.00001223
dffunc1[1]:-0.023015,dffunc1[2]:0.023015
cnt:35;vecw=(-0.73691008,0.73691008),error=0.00001059
dffunc1[1]:-0.021409,dffunc1[2]:0.021409
cnt:36;vecw=(-0.73476914,0.73476914),error=0.00000917
dffunc1[1]:-0.019909,dffunc1[2]:0.019909
cnt:37;vecw=(-0.73277819,0.73277819),error=0.00000793
dffunc1[1]:-0.018509,dffunc1[2]:0.018509
cnt:38;vecw=(-0.73092731,0.73092731),error=0.00000685
dffunc1[1]:-0.017202,dffunc1[2]:0.017202
cnt:39;vecw=(-0.72920712,0.72920712),error=0.00000592
dffunc1[1]:-0.015983,dffunc1[2]:0.015983
cnt:40;vecw=(-0.72760880,0.72760880),error=0.00000511
dffunc1[1]:-0.014847,dffunc1[2]:0.014847
cnt:41;vecw=(-0.72612407,0.72612407),error=0.00000441
dffunc1[1]:-0.013789,dffunc1[2]:0.013789
cnt:42;vecw=(-0.72474516,0.72474516),error=0.00000380
dffunc1[1]:-0.012804,dffunc1[2]:0.012804
cnt:43;vecw=(-0.72346477,0.72346477),error=0.00000328
dffunc1[1]:-0.011887,dffunc1[2]:0.011887
cnt:44;vecw=(-0.72227609,0.72227609),error=0.00000283
dffunc1[1]:-0.011034,dffunc1[2]:0.011034
cnt:45;vecw=(-0.72117272,0.72117272),error=0.00000243
dffunc1[1]:-0.010240,dffunc1[2]:0.010240
cnt:46;vecw=(-0.72014871,0.72014871),error=0.00000210
dffunc1[1]:-0.009502,dffunc1[2]:0.009502
cnt:47;vecw=(-0.71919847,0.71919847),error=0.00000181
dffunc1[1]:-0.008817,dffunc1[2]:0.008817
cnt:48;vecw=(-0.71831680,0.71831680),error=0.00000155
dffunc1[1]:-0.008179,dffunc1[2]:0.008179
cnt:49;vecw=(-0.71749886,0.71749886),error=0.00000134
dffunc1[1]:-0.007587,dffunc1[2]:0.007587
cnt:50;vecw=(-0.71674012,0.71674012),error=0.00000115
dffunc1[1]:-0.007038,dffunc1[2]:0.007038
cnt:51;vecw=(-0.71603636,0.71603636),error=0.00000099
dffunc1[1]:-0.006527,dffunc1[2]:0.006527
cnt:52;vecw=(-0.71538366,0.71538366),error=0.00000085
dffunc1[1]:-0.006053,dffunc1[2]:0.006053
cnt:53;vecw=(-0.71477837,0.71477837),error=0.00000073
dffunc1[1]:-0.005613,dffunc1[2]:0.005613
cnt:54;vecw=(-0.71421709,0.71421709),error=0.00000063
dffunc1[1]:-0.005204,dffunc1[2]:0.005204
cnt:55;vecw=(-0.71369665,0.71369665),error=0.00000054
dffunc1[1]:-0.004825,dffunc1[2]:0.004825
cnt:56;vecw=(-0.71321412,0.71321412),error=0.00000047
dffunc1[1]:-0.004474,dffunc1[2]:0.004474
cnt:57;vecw=(-0.71276675,0.71276675),error=0.00000040
dffunc1[1]:-0.004147,dffunc1[2]:0.004147
cnt:58;vecw=(-0.71235202,0.71235202),error=0.00000034
dffunc1[1]:-0.003845,dffunc1[2]:0.003845
cnt:59;vecw=(-0.71196756,0.71196756),error=0.00000030
dffunc1[1]:-0.003564,dffunc1[2]:0.003564
cnt:60;vecw=(-0.71161118,0.71161118),error=0.00000025
dffunc1[1]:-0.003303,dffunc1[2]:0.003303
cnt:61;vecw=(-0.71128084,0.71128084),error=0.00000022
dffunc1[1]:-0.003062,dffunc1[2]:0.003062
cnt:62;vecw=(-0.71097465,0.71097465),error=0.00000019
dffunc1[1]:-0.002838,dffunc1[2]:0.002838
cnt:63;vecw=(-0.71069086,0.71069086),error=0.00000016
dffunc1[1]:-0.002630,dffunc1[2]:0.002630
cnt:64;vecw=(-0.71042784,0.71042784),error=0.00000014
dffunc1[1]:-0.002438,dffunc1[2]:0.002438
cnt:65;vecw=(-0.71018407,0.71018407),error=0.00000012
dffunc1[1]:-0.002259,dffunc1[2]:0.002259
cnt:66;vecw=(-0.70995816,0.70995816),error=0.00000010
dffunc1[1]:-0.002094,dffunc1[2]:0.002094
cnt:67;vecw=(-0.70974879,0.70974879),error=0.00000009
dffunc1[1]:-0.001940,dffunc1[2]:0.001940
cnt:68;vecw=(-0.70955477,0.70955477),error=0.00000008
dffunc1[1]:-0.001798,dffunc1[2]:0.001798
cnt:69;vecw=(-0.70937497,0.70937497),error=0.00000006
dffunc1[1]:-0.001666,dffunc1[2]:0.001666
cnt:70;vecw=(-0.70920836,0.70920836),error=0.00000006
dffunc1[1]:-0.001544,dffunc1[2]:0.001544
cnt:71;vecw=(-0.70905396,0.70905396),error=0.00000005
dffunc1[1]:-0.001431,dffunc1[2]:0.001431
cnt:72;vecw=(-0.70891090,0.70891090),error=0.00000004
dffunc1[1]:-0.001326,dffunc1[2]:0.001326
cnt:73;vecw=(-0.70877833,0.70877833),error=0.00000004
dffunc1[1]:-0.001228,dffunc1[2]:0.001228
cnt:74;vecw=(-0.70865549,0.70865549),error=0.00000003
dffunc1[1]:-0.001138,dffunc1[2]:0.001138
cnt:75;vecw=(-0.70854167,0.70854167),error=0.00000003
dffunc1[1]:-0.001055,dffunc1[2]:0.001055
cnt:76;vecw=(-0.70843620,0.70843620),error=0.00000002
dffunc1[1]:-0.000977,dffunc1[2]:0.000977
cnt:77;vecw=(-0.70833848,0.70833848),error=0.00000002
dffunc1[1]:-0.000905,dffunc1[2]:0.000905
cnt:78;vecw=(-0.70824794,0.70824794),error=0.00000002
dffunc1[1]:-0.000839,dffunc1[2]:0.000839
cnt:79;vecw=(-0.70816404,0.70816404),error=0.00000001
dffunc1[1]:-0.000777,dffunc1[2]:0.000777
cnt:80;vecw=(-0.70808631,0.70808631),error=0.00000001
dffunc1[1]:-0.000720,dffunc1[2]:0.000720
cnt:81;vecw=(-0.70801429,0.70801429),error=0.00000001
dffunc1[1]:-0.000667,dffunc1[2]:0.000667
cnt:82;vecw=(-0.70794757,0.70794757),error=0.00000001
dffunc1[1]:-0.000618,dffunc1[2]:0.000618

dffunc1[1]を書き足したのは、偏微分の値が小さくなると、収束が遅くなることを見たかったためです。

cnt:82;vecw=(-0.70794757,0.70794757)からわかるように、収束値は(-0.70794757,0.70794757)です。

(-1/\sqrt 2,1/\sqrt(2))に近い値です。


一方、初期値を(1,-1)にとってみます。

> vecw=matrix(c(1,-1),2,1)
> 
> grad201(vecw,0.1,1e+5)
cnt:1;vecw=(0.98646647,-0.98646647),error=0.00036631
dffunc1[1]:0.133304,dffunc1[2]:-0.133304
cnt:2;vecw=(0.97313610,-0.97313610),error=0.00035540
dffunc1[1]:0.130905,dffunc1[2]:-0.130905
cnt:3;vecw=(0.96004559,-0.96004559),error=0.00034272
dffunc1[1]:0.128158,dffunc1[2]:-0.128158
cnt:4;vecw=(0.94722981,-0.94722981),error=0.00032849
dffunc1[1]:0.125085,dffunc1[2]:-0.125085
cnt:5;vecw=(0.93472127,-0.93472127),error=0.00031293
dffunc1[1]:0.121717,dffunc1[2]:-0.121717
cnt:6;vecw=(0.92254960,-0.92254960),error=0.00029630
dffunc1[1]:0.118085,dffunc1[2]:-0.118085
cnt:7;vecw=(0.91074113,-0.91074113),error=0.00027888
dffunc1[1]:0.114226,dffunc1[2]:-0.114226
cnt:8;vecw=(0.89931858,-0.89931858),error=0.00026095
dffunc1[1]:0.110177,dffunc1[2]:-0.110177
cnt:9;vecw=(0.88830085,-0.88830085),error=0.00024278
dffunc1[1]:0.105979,dffunc1[2]:-0.105979
cnt:10;vecw=(0.87770293,-0.87770293),error=0.00022463
dffunc1[1]:0.101671,dffunc1[2]:-0.101671
cnt:11;vecw=(0.86753586,-0.86753586),error=0.00020674
dffunc1[1]:0.097290,dffunc1[2]:-0.097290
cnt:12;vecw=(0.85780690,-0.85780690),error=0.00018931
dffunc1[1]:0.092873,dffunc1[2]:-0.092873
cnt:13;vecw=(0.84851965,-0.84851965),error=0.00017251
dffunc1[1]:0.088453,dffunc1[2]:-0.088453
cnt:14;vecw=(0.83967430,-0.83967430),error=0.00015648
dffunc1[1]:0.084063,dffunc1[2]:-0.084063
cnt:15;vecw=(0.83126799,-0.83126799),error=0.00014133
dffunc1[1]:0.079729,dffunc1[2]:-0.079729
cnt:16;vecw=(0.82329505,-0.82329505),error=0.00012714
dffunc1[1]:0.075476,dffunc1[2]:-0.075476
cnt:17;vecw=(0.81574741,-0.81574741),error=0.00011393
dffunc1[1]:0.071325,dffunc1[2]:-0.071325
cnt:18;vecw=(0.80861496,-0.80861496),error=0.00010174
dffunc1[1]:0.067291,dffunc1[2]:-0.067291
cnt:19;vecw=(0.80188584,-0.80188584),error=0.00009056
dffunc1[1]:0.063390,dffunc1[2]:-0.063390
cnt:20;vecw=(0.79554683,-0.79554683),error=0.00008037
dffunc1[1]:0.059632,dffunc1[2]:-0.059632
cnt:21;vecw=(0.78958365,-0.78958365),error=0.00007112
dffunc1[1]:0.056024,dffunc1[2]:-0.056024
cnt:22;vecw=(0.78398121,-0.78398121),error=0.00006277
dffunc1[1]:0.052573,dffunc1[2]:-0.052573
cnt:23;vecw=(0.77872391,-0.77872391),error=0.00005528
dffunc1[1]:0.049281,dffunc1[2]:-0.049281
cnt:24;vecw=(0.77379582,-0.77379582),error=0.00004857
dffunc1[1]:0.046149,dffunc1[2]:-0.046149
cnt:25;vecw=(0.76918094,-0.76918094),error=0.00004259
dffunc1[1]:0.043177,dffunc1[2]:-0.043177
cnt:26;vecw=(0.76486327,-0.76486327),error=0.00003728
dffunc1[1]:0.040362,dffunc1[2]:-0.040362
cnt:27;vecw=(0.76082705,-0.76082705),error=0.00003258
dffunc1[1]:0.037703,dffunc1[2]:-0.037703
cnt:28;vecw=(0.75705679,-0.75705679),error=0.00002843
dffunc1[1]:0.035194,dffunc1[2]:-0.035194
cnt:29;vecw=(0.75353742,-0.75353742),error=0.00002477
dffunc1[1]:0.032831,dffunc1[2]:-0.032831
cnt:30;vecw=(0.75025433,-0.75025433),error=0.00002156
dffunc1[1]:0.030609,dffunc1[2]:-0.030609
cnt:31;vecw=(0.74719343,-0.74719343),error=0.00001874
dffunc1[1]:0.028522,dffunc1[2]:-0.028522
cnt:32;vecw=(0.74434119,-0.74434119),error=0.00001627
dffunc1[1]:0.026565,dffunc1[2]:-0.026565
cnt:33;vecw=(0.74168468,-0.74168468),error=0.00001411
dffunc1[1]:0.024731,dffunc1[2]:-0.024731
cnt:34;vecw=(0.73921156,-0.73921156),error=0.00001223
dffunc1[1]:0.023015,dffunc1[2]:-0.023015
cnt:35;vecw=(0.73691008,-0.73691008),error=0.00001059
dffunc1[1]:0.021409,dffunc1[2]:-0.021409
cnt:36;vecw=(0.73476914,-0.73476914),error=0.00000917
dffunc1[1]:0.019909,dffunc1[2]:-0.019909
cnt:37;vecw=(0.73277819,-0.73277819),error=0.00000793
dffunc1[1]:0.018509,dffunc1[2]:-0.018509
cnt:38;vecw=(0.73092731,-0.73092731),error=0.00000685
dffunc1[1]:0.017202,dffunc1[2]:-0.017202
cnt:39;vecw=(0.72920712,-0.72920712),error=0.00000592
dffunc1[1]:0.015983,dffunc1[2]:-0.015983
cnt:40;vecw=(0.72760880,-0.72760880),error=0.00000511
dffunc1[1]:0.014847,dffunc1[2]:-0.014847
cnt:41;vecw=(0.72612407,-0.72612407),error=0.00000441
dffunc1[1]:0.013789,dffunc1[2]:-0.013789
cnt:42;vecw=(0.72474516,-0.72474516),error=0.00000380
dffunc1[1]:0.012804,dffunc1[2]:-0.012804
cnt:43;vecw=(0.72346477,-0.72346477),error=0.00000328
dffunc1[1]:0.011887,dffunc1[2]:-0.011887
cnt:44;vecw=(0.72227609,-0.72227609),error=0.00000283
dffunc1[1]:0.011034,dffunc1[2]:-0.011034
cnt:45;vecw=(0.72117272,-0.72117272),error=0.00000243
dffunc1[1]:0.010240,dffunc1[2]:-0.010240
cnt:46;vecw=(0.72014871,-0.72014871),error=0.00000210
dffunc1[1]:0.009502,dffunc1[2]:-0.009502
cnt:47;vecw=(0.71919847,-0.71919847),error=0.00000181
dffunc1[1]:0.008817,dffunc1[2]:-0.008817
cnt:48;vecw=(0.71831680,-0.71831680),error=0.00000155
dffunc1[1]:0.008179,dffunc1[2]:-0.008179
cnt:49;vecw=(0.71749886,-0.71749886),error=0.00000134
dffunc1[1]:0.007587,dffunc1[2]:-0.007587
cnt:50;vecw=(0.71674012,-0.71674012),error=0.00000115
dffunc1[1]:0.007038,dffunc1[2]:-0.007038
cnt:51;vecw=(0.71603636,-0.71603636),error=0.00000099
dffunc1[1]:0.006527,dffunc1[2]:-0.006527
cnt:52;vecw=(0.71538366,-0.71538366),error=0.00000085
dffunc1[1]:0.006053,dffunc1[2]:-0.006053
cnt:53;vecw=(0.71477837,-0.71477837),error=0.00000073
dffunc1[1]:0.005613,dffunc1[2]:-0.005613
cnt:54;vecw=(0.71421709,-0.71421709),error=0.00000063
dffunc1[1]:0.005204,dffunc1[2]:-0.005204
cnt:55;vecw=(0.71369665,-0.71369665),error=0.00000054
dffunc1[1]:0.004825,dffunc1[2]:-0.004825
cnt:56;vecw=(0.71321412,-0.71321412),error=0.00000047
dffunc1[1]:0.004474,dffunc1[2]:-0.004474
cnt:57;vecw=(0.71276675,-0.71276675),error=0.00000040
dffunc1[1]:0.004147,dffunc1[2]:-0.004147
cnt:58;vecw=(0.71235202,-0.71235202),error=0.00000034
dffunc1[1]:0.003845,dffunc1[2]:-0.003845
cnt:59;vecw=(0.71196756,-0.71196756),error=0.00000030
dffunc1[1]:0.003564,dffunc1[2]:-0.003564
cnt:60;vecw=(0.71161118,-0.71161118),error=0.00000025
dffunc1[1]:0.003303,dffunc1[2]:-0.003303
cnt:61;vecw=(0.71128084,-0.71128084),error=0.00000022
dffunc1[1]:0.003062,dffunc1[2]:-0.003062
cnt:62;vecw=(0.71097465,-0.71097465),error=0.00000019
dffunc1[1]:0.002838,dffunc1[2]:-0.002838
cnt:63;vecw=(0.71069086,-0.71069086),error=0.00000016
dffunc1[1]:0.002630,dffunc1[2]:-0.002630
cnt:64;vecw=(0.71042784,-0.71042784),error=0.00000014
dffunc1[1]:0.002438,dffunc1[2]:-0.002438
cnt:65;vecw=(0.71018407,-0.71018407),error=0.00000012
dffunc1[1]:0.002259,dffunc1[2]:-0.002259
cnt:66;vecw=(0.70995816,-0.70995816),error=0.00000010
dffunc1[1]:0.002094,dffunc1[2]:-0.002094
cnt:67;vecw=(0.70974879,-0.70974879),error=0.00000009
dffunc1[1]:0.001940,dffunc1[2]:-0.001940
cnt:68;vecw=(0.70955477,-0.70955477),error=0.00000008
dffunc1[1]:0.001798,dffunc1[2]:-0.001798
cnt:69;vecw=(0.70937497,-0.70937497),error=0.00000006
dffunc1[1]:0.001666,dffunc1[2]:-0.001666
cnt:70;vecw=(0.70920836,-0.70920836),error=0.00000006
dffunc1[1]:0.001544,dffunc1[2]:-0.001544
cnt:71;vecw=(0.70905396,-0.70905396),error=0.00000005
dffunc1[1]:0.001431,dffunc1[2]:-0.001431
cnt:72;vecw=(0.70891090,-0.70891090),error=0.00000004
dffunc1[1]:0.001326,dffunc1[2]:-0.001326
cnt:73;vecw=(0.70877833,-0.70877833),error=0.00000004
dffunc1[1]:0.001228,dffunc1[2]:-0.001228
cnt:74;vecw=(0.70865549,-0.70865549),error=0.00000003
dffunc1[1]:0.001138,dffunc1[2]:-0.001138
cnt:75;vecw=(0.70854167,-0.70854167),error=0.00000003
dffunc1[1]:0.001055,dffunc1[2]:-0.001055
cnt:76;vecw=(0.70843620,-0.70843620),error=0.00000002
dffunc1[1]:0.000977,dffunc1[2]:-0.000977
cnt:77;vecw=(0.70833848,-0.70833848),error=0.00000002
dffunc1[1]:0.000905,dffunc1[2]:-0.000905
cnt:78;vecw=(0.70824794,-0.70824794),error=0.00000002
dffunc1[1]:0.000839,dffunc1[2]:-0.000839
cnt:79;vecw=(0.70816404,-0.70816404),error=0.00000001
dffunc1[1]:0.000777,dffunc1[2]:-0.000777
cnt:80;vecw=(0.70808631,-0.70808631),error=0.00000001
dffunc1[1]:0.000720,dffunc1[2]:-0.000720
cnt:81;vecw=(0.70801429,-0.70801429),error=0.00000001
dffunc1[1]:0.000667,dffunc1[2]:-0.000667
cnt:82;vecw=(0.70794757,-0.70794757),error=0.00000001
dffunc1[1]:0.000618,dffunc1[2]:-0.000618


今度は(1/\sqrt(2),-1/\sqrt(2))に近い値です。

最後に、
初期値を(0,0)とすると以下のようになります。

> vecw=matrix(c(0,0),2,1)
> 
> grad201(vecw,0.1,1e+5)
cnt:1;vecw=(0.00000000,0.00000000),error=0.00000000
dffunc1[1]:0.000000,dffunc1[2]:0.000000

勾配が(0,0)ですから当たり前の結果ですね。

以上です。