解法一.docx
- 文档编号:2423612
- 上传时间:2022-10-29
- 格式:DOCX
- 页数:10
- 大小:17.62KB
解法一.docx
《解法一.docx》由会员分享,可在线阅读,更多相关《解法一.docx(10页珍藏版)》请在冰豆网上搜索。
解法一
1.#include
2.#include
3.#include
4.
5.using namespace std;
6.double foofun(double x)//定义所要求解的函数表达式;
7.{
8. double y;
9. y=sin(x);//实例 用的函数 为 sin(x); 用户可改为 其他的函数
10. return y;
11.}
12.double getCrossPoint(double x1,double x2)//定义求解弦与x轴的交点
13.{
14. double y;
15. y=(x1*foofun(x2)-x2*foofun(x1))/float((foofun(x2)-foofun(x2)));
16. return y;
17.}
18.
19./************二分法定义************************/
20. #define e 0.0005
21. double dichotomy(double x1,double x2)
22. {
23. double x3;
24. while (foofun(x1)*foofun(x2)<0)
25. {
26. /* if the x2 and x1 distance is less than e ,
27. * then x1 or x2 can be recognise as a root of the equivalent
28. */
29. while(fabs(x2-x1) 30. { 31. /* Of course the average of x1 and x2 is also can be 32. * regard as a root of the equivalent 33. */ 34. cout<<"x1: "< 35. 36. cout<<"f(x1)= "< 37. 38. cout<<"x2: "< 39. cout<<"f(x2)= "< 40. cout<<"(x1+x2)/2: "<<(x1+x2)/2< 41. cout<<"f((x1+x2)/2)= "< 42. return (x1+x2)/2; 43. } 44. x3 = (x1+x2)/2; 45. if(0 == foofun(x3)) 46. { 47. cout<<"一个根为: x0: "< 48. cout<<"且f(x0) = 0"< 49. return x3; 50. } 51. if(foofun(x1)*foofun(x3)>0) 52. { 53. x1=x3; 54. } 55. else 56. { 57. x2 = x3; 58. } 59. } 60. cout<<"f(a) * f(b) >0"; 61. } 62./*二分法定义**/ 63. 64./************简单迭代法************************/ 65.// code : start here 66.float iter_foofun(float x) 67.{ 68. float x1,x2; 69. x1 = x; 70. x2 = foofun(x1); 71. while(abs(x1-x2)>=e) 72. { 73. x1 = x2; 74. x2 = foofun(x1); 75. } 76. return x2; 77. 78.} 79./*简单迭代法**/ 80./***********Newton法解方程*********************/ 81.double Dif_foofun(double x0) 82.{ 83. float y; 84. y = cos(x0); 85. return y; 86.} 87. 88.double Newton_foo(double x0) 89.{ 90. double x, xx,f,f_dif; 91. x = x0; 92. f =foofun(x); 93. f_dif=Dif_foofun(x); 94. xx = x-f/f_dif; 95. while((fabs(x-xx))>(1*10e-6)) 96. { 97. x = xx; 98. f = foofun(x); 99. f_dif = Dif_foofun(x); 100. xx = x -f/f_dif; 101. } 102. cout<<"方程的一个根的解为: "< 103. cout< 104. 105.} 106./***********Newton法解方程end******************/ 107. 108./************弦截法定义(begin************************/ 109.double calEquationRoot(double x1,double x2) 110.{ 111. double x,y,y1; 112. y1=foofun(x1); 113. do 114. { 115. x=getCrossPoint(x1,x2);//调用求交点函数 x坐标 116. y=foofun(x);//求y坐标 117. if(y*y1 > 0) 118. { 119. y1 = y; 120. x1 = x; 121. } 122. else 123. { 124. x2=x; 125. } 126. 127. }while (fabs(y)>=0.00001);//fabs 求浮点数的 绝对值 128. return x; 129.} 130./************弦截法定义end************************/ 131. 132. 133. 134. 135.void help() 136.{ 137. //cout<<" Define what you want do! /n"; 138. cout<<"*****Created by hsw******/n"; 139. cout<<"-------------------------/n"; 140. cout<<" *1.二分法 **/n"; 141. cout<<" *2.简单迭代法 **/n"; 142. cout<<" *3.Newton法 **/n"; 143. cout<<" *4.弦截法 **/n"; 144. cout<<" *0.退出 **/n"; 145. cout<<"-------------------------/n"; 146.} 147.void seek() 148.{ 149. int flag; 150. cout<<"请选择你要进行的操作: "; 151. cin>>flag; 152. while(0! =flag) 153. { 154. switch(flag) 155. { 156. case 1: //二分法" 157. { 158. cout<<"你选择的是: 二分法"< 159. cin.get(); 160. double a,b,f; 161. cout<<"请输入区间的上界a: "< 162. cin>>a; 163. cout<<"请输入区间的下界b: "< 164.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 解法