- 注册时间
- 2007-12-27
- 最后登录
- 1970-1-1
- 威望
- 星
- 金币
- 枚
- 贡献
- 分
- 经验
- 点
- 鲜花
- 朵
- 魅力
- 点
- 上传
- 次
- 下载
- 次
- 积分
- 44753
- 在线时间
- 小时
|
发表于 2010-6-21 15:08:52
|
显示全部楼层
写了一个Pari/Gp代码计算函数的最大或最小值:
alx返回函数的最大值和取最大值的情况
alm返回函数的最小值和取最小值的情况
函数采用的是上一层双曲函数形式(也就是目标函数值平移了一下)
返回的数组第一项是最值,后面如果跟六个数,那么分别是取三个值的计数(u,v,w)和三个值(X,Y,Z)
如果最值后面跟三个数,那么分别是取两个值的计数和它们的取值(X=Y)
当然输入的三个参数中,参数N要求不小于n- fc(u,v,w,N,k,X)=
- {
- v*(u+w)*(cosh(X)-1)+u*w*(cosh(2*X)-1)-(N^2-(u+v+w)^2)/2
- }
-
- ft(u,v,w,k,X)=
- {
- v*(u+w)*(cosh(k*X)-1)+u*w*(cosh(2*k*X)-1)
- }
-
- fr(u,v,w,N,k)=
- {
- local(h);
- h=acosh((N^2-(u+v+w)^2)/(2*v*(u+w))+1.0);
- solve(X=0,h,fc(u,v,w,N,k,X))
- }
-
- srx(k,n,N)=
- {
- local(u,v,w,h,val);
- local(r,su,sv,sx);
- r=0.0;su=0;sv=0;val=0;
- for(u=1,n-2,
- for(v=1,n-1-u,
- w=n-u-v;
- h=fr(u,v,w,N,k);
- val=ft(u,v,w,k,h);
- if(val>r,
- r=val;su=u;sv=v;sx=h
- )
- )
- );
- [r,su,sv,n-su-sv,sx,0,-sx]
- }
-
- srm(k,n,N)=
- {
- local(u,v,w,h,val);
- local(r,su,sv,sx);
- r=-1;su=0;sv=0;val=0;
- for(u=1,n-2,
- for(v=1,n-1-u,
- w=n-u-v;
- h=fr(u,v,w,N,k);
- val=ft(u,v,w,k,h);
- if(r<0 || val<r,
- r=val;su=u;sv=v;sx=h
- )
- )
- );
- [r,su,sv,n-su-sv,sx,0,-sx]
- }
-
- alx(k,n,N)=
- {
- local(X,r1,r);
- X=acosh((N^2-n^2)/(2.0*(n-1))+1.0);
- r1=(n-1)*(cosh(k*X)-1);
- r=srx(k,n,N);
- if(r[1]<r1,
- r=[r1,1,n-1,X]
- );
- r
- }
-
- alm(k,n,N)=
- {
- local(X,r1,r,d);
- d=(n-(n%2))/2;
- X=acosh((N^2-n^2)/(2.0*d*(n-d))+1.0);
- r1=d*(n-d)*(cosh(k*X)-1);
- r=srm(k,n,N);
- if(r[1]>r1,
- r=[r1,d,n-d,X]
- );
- r
- }
复制代码 对于函数alx的试验验证了我前面的猜想:
也就是转化会原题目,那么取最大值时,要么所有$a_i$中只取两个值,而且其中一个只取1次,要么只取三个值,其中一个为1,次数n-2,另外两个互为倒数,次数为1. 而对于n>3,通常N很小(非常接近n)时使用前面的(两个数),而N比较大是,使用后面的(三个数)。 |
评分
-
查看全部评分
|