黄金分割法与进退法的C语言程序.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
基本思想: 对f(x)任选一个初始点a1及初始步长h, 通过比较这两点函数值的大小,确定第三点位置,比较这三点的函数值大小,确定是否为 “高—低—高” 形态。 (1)选定初始点a, 初始步长h=h0,计算 y1=f(a1), y2=f(a1+h)。 (2)比较y1和y2。 (a)如y1y2, 向右前进;加大步长 h=2 h ,转(3)向前; (b)如y1y2, 向左后退;h=- h0, 将a1与a2,y1与y2的 值互换。转(3)向后探测; (c)如y1=y2,极小点在a1和a1+h之间。 (3)产生新的探测点a3=a1+h,y3=f(a3); (4) 比较函数值 y2与y3: (b)如y2y3, 加大步长 h=2 h ,a1=a2, a2=a3,转(3)继续探测。 (a)如y2y3, 则初始区间得到: a=min[a1,a3], b=max[a3,a1],函数最小值所在的区间为[a, b] 。 我编的修改 #includemath.h #includestdio.h #define f(x) 3*x*x*x-4*x+2 main() { double f1,f2,f3,temp,x1,x2,x3,h,a,b,Y1,Y2,A,A1,A2,e=0.2; int n; printf(x1=); scanf(%lf,x1); printf(h=); scanf(%lf,h); f1=f(x1); x2=x1+h; f2=f(x2); if(f1==f2) a=x1(x1+h)?x1:x1+h; b=x1(x1+h)?x1:x1+h; if(f2f1) { h=-h; temp=x1; x1=x2; x2=temp; temp=f1; f1=f2; f2=temp; x3=x2+h; f3=f(x3); } else if(f2f1) { h=2*h; x3=x2+h; f3=f(x3); } while(f2f3) { x1=x2; x2=x3; f2=f(x3); x3=x2+h; f3=f(x3); } a=x1x3?x1:x3; b=x1x3?x1:x3; printf([%f,%f]\n,a,b); A1=b+0.328*(b-a); Y1=f(A1); A2=a+0.618*(b-a); Y2=f(A2); do { n++; if (!(Y1Y2)) { a=A1; A1=A2; Y1=Y2; A2=a+0.618*(b-a); Y2=f(A2); } else { b=A2; A2=A1; Y2=Y1; A1=b+0.382*(b-a); Y1=f(A1); } } while ((a-b)=e||(a-b)=-e); A=(a+b)*0.5; printf(A = %lf\n,A); printf(f(A) = %lf\n, f(A)); printf(n = %d\n,n); printf(a=%f,b=%f,a,b); getch(); } 陈文斌 #includestdio.h double m,n,p,e,a,b; double F(double x) { return m*x*x+n*x+p; } InputData() //数据输入函数的名称要和倒数第四行的一起改,要同时改成同一名称 { printf(x,y,z=?); //这里提示输入方程的系数,提示语句x,y,z=?改成你自己的 scanf(%lf,%lf,%lf,m,n,p); printf(e=?); //这里提示输入黄金分割的精度,提示语句e=?改成你自己的 scanf(%lf,e); } JTF() //进退法的名称要和倒数第三行一起改 { double x1,x2,x3,f1,f2,f3,t,h; pri

文档评论(0)

dashewan + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档