牛顿下山法实验报告

合集下载

牛顿下山法的下山因子

牛顿下山法的下山因子

牛顿下山法的下山因子牛顿下山法,这名字听起来就像是从山上滑下来一样,带着一股子风风火火的劲儿。

想象一下,牛顿这个大老爷子,坐在山顶上,突然想到:“要不我试试下山?”然后,他就发现了个大秘密:不管我们走得多高,总有一天得下来,而这个过程能用个聪明的公式来描述。

牛顿的这个方法,其实就是告诉我们如何在复杂的数学问题里,找到最简单的解决办法。

哎,这不就是生活中的智慧嘛,咱们遇到难题时,先从简单的地方入手,慢慢来,稳扎稳打。

在数学的世界里,牛顿下山法其实是个优化的方法。

说白了,就是帮我们找到一个最优解,就像是找到了最短的上山路,嘿嘿,心里可舒服了。

这方法特别像滑雪,咱们从坡顶滑下去,越滑越快,心里还想着:“这下可真是飞起来了!”每次到达一个新地方,都会评估一下:“这个坡好不好?这条路走得顺不顺?”当我们用这个方法时,牛顿其实就是在告诉我们:咱们得时刻关注自己的进度,适时调整方向,才能到达终点。

想象一下,咱们在山路上走,踩着石头,走着走着,突然觉得这条路不太对,左拐、右拐,这感觉就像是牛顿下山法中的“下山因子”一样。

什么是下山因子?就像是你在滑雪的时候,适当加点儿力道,调整好重心,才能稳稳当当地滑下去。

太大了可能摔个狗啃泥,太小了又滑不动。

就像咱们平常做决定,不能太激进,也不能犹豫不决,得找个平衡点。

有趣的是,牛顿的这套理论其实不仅仅局限于数学,生活中也能找到它的影子。

你想啊,每当咱们碰到问题,试图去解决时,就像是在下山。

每一步都得小心翼翼,看看这条路对不对,心里想着:“这步走得稳不稳,下一步该怎么走?”这就是牛顿下山法的智慧所在,活用在日常生活中,能让我们少走很多弯路,事半功倍。

想象一下,周末和朋友出去爬山,刚开始兴致勃勃,但中途有点累了,这时你就得学会运用“下山因子”,换个节奏,稍微休息一下,找个树荫坐坐,喝口水,待会儿再继续。

生活中也是如此,工作压力大了,得学会调节,不然就像是爬坡爬到一半喘不过气来,连最喜欢的歌都唱不出来。

实验三 牛顿下山法

实验三 牛顿下山法

实验3 牛顿下山法
姓名: 学号: 班级: 指导教师: 报告日期:2010-5-16
一、 实验目的:
1、 掌握牛顿下山法求解方程根的推导原理。

2、 理解牛顿下山法的具体算法与相应程序的编写。

二、 实验内容:
采用牛顿下山法求方程2x 3
-5x-17=0在2附近的一个根。

三、 实验实现:
1、 算法: )()(1x x x x k k k k f f u ,-=+
下山因子从u=1开始,逐次将u 减半进行试算,直到能使下降条件 | f(x k+1) |<| f(x k) | 成立为止。

再将得到的x 0= x k+1,运用牛顿迭代法 )()(0001x x x x f f ,-= ,求的方程根。

2、 流程图如下:
3程序如下:
4、运行结果:
四、实验体会:
(1)、加深了对MATLAB软件,特别是while语句的应用。

(2)、采用牛顿下山法求方程的根时可以有效的防止迭代发散,同时加快了收敛速度。

实验一 牛顿下山法

实验一 牛顿下山法

实验一 牛顿下山法姓名: 学号: 班级: 报告日期:一、 实验目的:1、 掌握牛顿下山法求解方程根的推导原理。

2、 理解牛顿下山法的具体算法与相应程序的编写。

二、 实验内容:采用牛顿下山法求方程2x 3-5x-17=0在2附近的一个根。

三、 实验实现: 1、 算法:1()()k k k k f x x x f x λ+=-'下山因子从1λ=开始,逐次将λ减半进行试算,直到能使下降条件1()()k k f x f x +<成立为止。

再将得到的1k x +循环求得方程根近似值。

2、程序代码如下:被调函数①: function y=ndxs(x) y=2*x^3-5*x-17; 被调函数②: function y=ndxs0(x) y=6*x^2-5; 主程序: x=2; i=1;u=1;while i<=100;y=x-u*ndxs(x)/ndxs0(x);if abs(y-x)>10^-6;x=y;u=u/2;else breakendi=i+1;endfprintf('\n%s%.5f\t%s%d\t%s%f','x=',x,'i=',i,'u=',u)3、运行结果:四、实验体会:编程题,可自由选择自己熟悉的语言编写,数学软件也可, 但使用数学软件时不允许使用和作业功能相同的函数,如使用MATLAB 编程做实验二(三角分解)时不得使用lu 函数或类似功能函数。

Newton 下山发是一种局部收敛方法,通常要求初始近似0x 在解*x 附近才保证迭代序列收敛。

为扩大收敛范围,使对任意0x 迭代序列收敛,通常可引入参数,并将Newton 迭代改为:1'(),0,1,()k k k kk f x x x k f x λ+=-=其中01,k λ<≤成为下山因子。

通常可选择k λ使1()(),k k f x f x +<计算时可取111,,,24kλ= 直到满足要求为止。

牛顿法的实现实验报告

牛顿法的实现实验报告

《机器学习》课程实验报告实验:牛顿法的实现姓名:彭文婷专业:生物技术学号:20132123012015年5月5日一、 实验内容1. 构建有效迭代公式求1020x e x +-=的解。

2. 利用牛顿法求上述方程的解。

二、 实验结果及分析1.迭代公式为X=(2-e x )/10由于e^x 大于0,则2-10x 大于0,则x 小于0.2X 小于0时,0小于e^x 小于1, 2-10x 大于2因此【0,0.2】为有根区间取初始值X 0=0X1=0.1X2=0.089482908X3=0.090639136X4=0.090512617X5=0.090526468X6=0.090524952X7=0.090525118X8=0.090525019因为X8-X7≤10-6所以X=0.0905250192.牛顿法函数为f (x) = e x +10x-2一阶导数为f ’(x )= e x +10Xn+1 = Xn-f(Xn)/f ’(Xn) = Xn-(e Xn +10Xn-2)/(e Xn +10)初始值X0=0X1=0.090909091X2=0.090525108X3=0.090525101因为X3-X2≤10-6所以X=0.090525101分析:迭代法关键在于选取收敛的迭代公式和选取适当的初始值,而牛顿法更为优化,收敛速度快。

但二者都只能得出局部最优解。

三.实验总结通过练习对迭代法和牛顿法有了更深刻的理解,原本使用计算器算的,但输入过于繁琐,后来在Excel中编辑公式计算简便了很多,但要实现计算机自动计算程还是十分困难,在以后的学习中应尽快掌握C语言编程技能。

非线性方程实根的加速法

非线性方程实根的加速法

山东师范大学数学科学学院实验报告实验课程:非线性方程(组)的解法实验项目:非线性方程实根的加速法姓名郭新国学号:200708020244 班级:二班专业:信计指导教师:朱爱玲完成日期:2010-6-20实验目的:掌握解非线性方程实根的简单迭代法的加速法、牛顿法加速法(下山法)与重根求解方法的上机编程运算.实验内容:问题分析和算法设计问题:1. 1. 用加权法加速技术求方程x = e-x在0.5附近的一个根.问题分析:假设g(x)=exp(-x),加权加速方法为迭代 x(k+1) = g(x(k)),修正 x(k+1) = (x(k+1)-L*x(k))/(1-L),其中L=dg/dx|(x_star),x_star = 0.5迭代4次就可以使得精度达到1e-4.主要程序代码:#include <iostream>#include <cmath>#include <iomanip>using namespace std;int main(){int k;double x,xk,L,G,err;double g(double x);double dg(double x);k = 0;xk = 0.5;L = dg(xk);G = 1 - L;err = 1;while(err > 0.0001){x = g(xk); // 迭代x = (x - L*xk) / G; // 修正err = fabs(x - xk);xk = x;k++;}cout << "K-th iteration: " << k << endl;cout << "err= " << setprecision(12) << err << endl;cout << "x= " << setprecision(12) << x << endl;cout << "g(x)= " << setprecision(12) << g(x) << endl;return 0;}double g(double x){return (exp(-x));}double dg(double x){return (-exp(-x));}运行结果和总结运行结果:2.用埃特金迭代法求方程x2=x3-1在x0=1.5附近的根./*问题2 用Aitken Method迭代法求方程x^2=x^3-1在x0=1.5附近的根. (根所在的区间为[1,2])方程等价于 x = (x^2+1)^(1/3),简单迭代法适用其上Aitken Method:x(k+3) = x(k) - (x(k+1)-x(k))^2/(x(k+2)-2x(k+1)+x(k)),首两项可用简单迭代法给出*/#include <iostream>#include <cmath>#include <iomanip>using namespace std;int main(){int k;double x,xk0,xk1,xk2,err;double f(double x);k = 0;xk0 = 1.5;xk1 = f(xk0);xk2 = f(xk1);err = 1.0;while(err > 0.00001){// 迭代序列 xk0,xk1,xk2,x...x = xk0 - pow((xk1 - xk0),2)/(xk2 - 2*xk1 + xk0);xk0 = xk1;xk1 = xk2;xk2 = x;err = fabs(xk2 - xk1);k++;}cout << "K-th iteration: " << k << endl;cout << "err= " << setprecision(12) << err << endl;cout << "x= " << setprecision(12) << x << endl;cout << "f(x)= " << setprecision(12) << f(x) << endl;return 0;}double f(double x){return cbrt(pow(x,2) + 1.0); // cbrt 立方根函数}运行结果:3.用Steffenson算法求方程x3–x – 1=0在(1,1.5)内的根 ./*问题3 用Steffenson算法求方程x^3 –x – 1=0在(1,1.5)内的根Steffenson Method:yk = f(x(k)), zk = f(yk), x(k+1) = x(k) - (yk - x(k))^2/(zk - 2yk + x(k));*/#include <iostream>#include <cmath>#include <iomanip>using namespace std;int main(){int k;double x,xk,yk,zk,err;double f(double x);k = 0;xk = 1.5;yk = f(xk);zk = f(yk);err = 1.0;while(err > 0.0001){// 迭代序列 xk,x...x = xk - pow((yk - xk),2)/(zk - 2*yk + xk);yk = f(x);zk = f(yk);err = fabs(x - xk);xk = x;k++;}cout << "K-th iteration: " << k << endl;cout << "err= " << setprecision(12) << err << endl;cout << "x= " << setprecision(12) << x << endl;cout << "f(x)= " << setprecision(12) << f(x) << endl;return 0;}double f(double x){return (pow(x,3) - 1.0);}运算结果:4. 分别用牛顿法与牛顿加速法(下山法)法求方程013=--x x 在5.1=x 附近的一个根./*问题4 分别用牛顿法与牛顿加速法(下山法)法求方程x^3 –x – 1=0在1.5附近的一个根f(x) = x^3 - x - 1仅考虑牛顿加速法(下山法):x(k+1) = x(k) - tk * f(x(k))/f '(x(k))初值选为0.6*/#include <iostream>#include <cmath>#include <iomanip>using namespace std;int main(){int k;double x,xk,fxk,t,direction,err;double f(double x);double df(double x);k = 0;xk = 0.6;err = 1.0;while(err > 0.000001){// 迭代序列 xk,x...t = 1.0;fxk = f(xk);direction = fxk/df(xk);while ( true ){x = xk - t*direction;if (fabs(f(x)) < fabs(fxk))break;else{t = t/2.0;continue;}}err = fabs(x - xk);xk = x;k++;// 每步迭代过程cout << "K-th iteration: " << k << endl;cout << "t = " << t << endl;cout << "err= " << setprecision(12) << err << endl;cout << "x= " << setprecision(12) << x << endl;cout << "f(x)= " << setprecision(12) << f(x) << endl;cout << endl;}return 0;}double f(double x){return (pow(x,3) - x - 1.0);}double df(double x){return (3.0*pow(x,2) - 1.0);}运算结果:5. 已知2=x 是方程044)(24=+-=x x x f 的二重根,用牛顿切线法和重根修正公式求解./*问题5. 已知x=sqrt(2)是方程f(x)=x^4-4*x^2+4=0 的二重根,用牛顿切线法和重根修正公式求解 仅考虑重根修正公式:x(k+1) = x(k) - m*f(x(k))/f ' (x(k)), m 为根的重数*/#include <iostream>#include <cmath>#include <iomanip>using namespace std;int main(){int k;double x,xk,m,err;double f(double x);double df(double x);k = 0;m = 2.0;xk = 1.5;err = 1.0;while (err > 0.0001){// 迭代序列 xk,x...x = xk - m*f(xk)/df(xk);err = fabs(x - xk);xk = x;k++;}cout << "K-th iteration: " << k << endl;cout << "err= " << setprecision(12) << err << endl;cout << "x= " << setprecision(12) << x << endl;cout << "f(x)= " << setprecision(12) << f(x) << endl; return 0;}double f(double x){return (pow(x,4) - 4.0*pow(x,2) + 4.0);}double df(double x){return (4.0*pow(x,3) - 8.0*x);}运算结果:指导教师意见。

合工大计算方法实验报告

合工大计算方法实验报告

《计算方法》试验报告班级:学号:姓名:实验一、牛顿下山法1 实验目的(1)熟悉非线性方程求根简单迭代法,牛顿迭代及牛顿下山法 (2)能编程实现简单迭代法,牛顿迭代及牛顿下山法 (3)认识选择迭代格式的重要性 (4) 对迭代速度建立感性的认识;分析实验结果体会初值对迭代的影响2 实验内容(1)用牛顿下山法解方程013=--x x (初值为0.6)输入:初值,误差限,迭代最大次数,下山最大次数输出:近似根各步下山因子(2)设方程f(x)=x 3- 3x –1=0 有三个实根 x *1=1.8793 , x *2=-0.34727 ,x *3=-1.53209现采用下面六种不同计算格式,求 f(x)=0的根 x *1 或x *2 x = 213xx +; x = 313-x ;x = 313+x ; x = 312-x ;x = x13+;x = x - ()1133123---x x x输入:初值,误差限,迭代最大次数输出:近似根、实际迭代次数 3 算法基本原理求非线性方程组的解是科学计算常遇到的问题,有很多实际背景.各种算法层出不穷,其中迭代是主流算法。

只有建立有效的迭代格式,迭代数列才可以收敛于所求的根。

因此设计算法之前,对于一般迭代进行收敛性的判断是至关重要的。

牛顿法也叫切线法,是迭代算法中典型方法,只要初值选取适当,在单根附近,牛顿法收敛速度很快,初值对于牛顿迭代 至关重要。

当初值选取不当可以采用牛顿下山算法进行纠正。

一般迭代:)(1k k x x φ=+ 0)()(=⇔=x f x x φ 牛顿公式:)()(1k k k k x f x f x x '-=+ 牛顿下山公式:)()(1k k k k x f x f x x '-=+λ图3.1一般迭代算法流程图 下山因子 ,,,,322121211=λ 下山条件|)(||)(|1k k x f x f <+4 算法描述一般迭代算法见流程图牛顿下山算法见流程图:5、代码:#include <iostream>#include <fstream>#include <cmath>using namespace std;class srrt{private:int n;double *a, *xr, *xi;图3.2牛顿下山算法流程图⇐⇐⇐⇐srrt (int nn){n = nn;a = new double[n+1]; //动态分配内存xr = new double[n];xi = new double[n];}void input (); //由文件读入代数方程系数void srrt_root (); //执行牛顿下山法void output (); //输出根到文件并显示~srrt (){ delete [] a, xr, xi; }};void srrt::input () //由文件读入代数方程系数{int i;char str1[20];cout <<"\n输入文件名: ";cin >>str1;ifstream fin (str1);if (!fin){ cout <<"\n不能打开这个文件" <<str1 <<endl; exit(1); } for (i=n; i>=0; i--) fin >>a[i]; //读入代数方程系数fin.close ();}void srrt::srrt_root () //执行牛顿下山法{int m,i,jt,k,is,it;double t,x,y,x1,y1,dx,dy,p,q,w,dd,dc,c;double g,u,v,pq,g1,u1,v1;m=n;while ((m>0)&&(fabs(a[m])+1.0==1.0)) m=m-1;if (m<=0){cout <<"\n程序工作失败!" <<endl;return;}for (i=0; i<=m; i++) a[i]=a[i]/a[m];for (i=0; i<=m/2; i++){w=a[i]; a[i]=a[m-i]; a[m-i]=w;k=m; is=0; w=1.0;jt=1;while (jt==1){pq=fabs(a[k]);while (pq<1.0e-12){xr[k-1]=0.0; xi[k-1]=0.0; k=k-1;if (k==1){xr[0]=-a[1]*w/a[0]; xi[0]=0.0;return;}pq=fabs(a[k]);}q=log(pq); q=q/(1.0*k); q=exp(q);p=q; w=w*p;for (i=1; i<=k; i++){ a[i]=a[i]/q; q=q*p; }x=0.0001; x1=x; y=0.2; y1=y; dx=1.0;g=1.0e+37;l40:u=a[0]; v=0.0;for (i=1; i<=k; i++){p=u*x1; q=v*y1;pq=(u+v)*(x1+y1);u=p-q+a[i]; v=pq-p-q;}g1=u*u+v*v;if (g1>=g){if (is!=0){it=1;if (it==0){is=1;dd=sqrt(dx*dx+dy*dy);if (dd>1.0) dd=1.0;dc=6.28/(4.5*k); c=0.0;}while(1==1){c=c+dc;dx=dd*cos(c); dy=dd*sin(c);x1=x+dx; y1=y+dy;if (c<=6.29) { it=0; break; }dd=dd/1.67;if (dd<=1.0e-07) { it=1; break; }c=0.0;}if (it==0) goto l40;}else{it=1;while (it==1){t=t/1.67; it=0;x1=x-t*dx;y1=y-t*dy;if (k>=50){p=sqrt(x1*x1+y1*y1);q=exp(85.0/k);if (p>=q) it=1;}}if (t>=1.0e-03) goto l40;if (g>1.0e-18){it=0;if (it==0){is=1;dd=sqrt(dx*dx+dy*dy);if (dd>1.0) dd=1.0;dc=6.28/(4.5*k); c=0.0;}while(1==1){c=c+dc;dx=dd*cos(c); dy=dd*sin(c);x1=x+dx; y1=y+dy;if (c<=6.29) { it=0; break; }dd=dd/1.67;if (dd<=1.0e-07) { it=1; break; }c=0.0;}if (it==0) goto l40;}}if (fabs(y)<=1.0e-06){ p=-x; y=0.0; q=0.0; }else{p=-2.0*x; q=x*x+y*y;xr[k-1]=x*w;xi[k-1]=-y*w;k=k-1;}for (i=1; i<=k; i++){a[i]=a[i]-a[i-1]*p;a[i+1]=a[i+1]-a[i-1]*q;}xr[k-1]=x*w; xi[k-1]=y*w;k=k-1;if (k==1){ xr[0]=-a[1]*w/a[0]; xi[0]=0.0; }}else{g=g1; x=x1; y=y1; is=0;if (g<=1.0e-22){if (fabs(y)<=1.0e-06){ p=-x; y=0.0; q=0.0; }else{p=-2.0*x; q=x*x+y*y;xr[k-1]=x*w;xi[k-1]=-y*w;k=k-1;}for (i=1; i<=k; i++){a[i]=a[i]-a[i-1]*p;a[i+1]=a[i+1]-a[i-1]*q;}xr[k-1]=x*w; xi[k-1]=y*w;k=k-1;if (k==1){ xr[0]=-a[1]*w/a[0]; xi[0]=0.0; }}else{u1=k*a[0]; v1=0.0;for (i=2; i<=k; i++){p=u1*x; q=v1*y; pq=(u1+v1)*(x+y);u1=p-q+(k-i+1)*a[i-1];v1=pq-p-q;}p=u1*u1+v1*v1;if (p<=1.0e-20){it=0;if (it==0){is=1;dd=sqrt(dx*dx+dy*dy);if (dd>1.0) dd=1.0;dc=6.28/(4.5*k); c=0.0;}while(1==1){c=c+dc;dx=dd*cos(c); dy=dd*sin(c);x1=x+dx; y1=y+dy;if (c<=6.29) { it=0; break; }dd=dd/1.67;if (dd<=1.0e-07) { it=1; break; }c=0.0;}if (it==0) goto l40;if (fabs(y)<=1.0e-06){ p=-x; y=0.0; q=0.0; }else{p=-2.0*x; q=x*x+y*y;xr[k-1]=x*w;xi[k-1]=-y*w;k=k-1;}for (i=1; i<=k; i++){a[i]=a[i]-a[i-1]*p;a[i+1]=a[i+1]-a[i-1]*q;}xr[k-1]=x*w; xi[k-1]=y*w;k=k-1;if (k==1){ xr[0]=-a[1]*w/a[0]; xi[0]=0.0; }}else{dx=(u*u1+v*v1)/p;dy=(u1*v-v1*u)/p;t=1.0+4.0/k;it=1;while (it==1){t=t/1.67; it=0;x1=x-t*dx;y1=y-t*dy;if (k>=50){p=sqrt(x1*x1+y1*y1);q=exp(85.0/k);if (p>=q) it=1;}}if (t>=1.0e-03) goto l40;if (g>1.0e-18){it=0;if (it==0){is=1;dd=sqrt(dx*dx+dy*dy);if (dd>1.0) dd=1.0;dc=6.28/(4.5*k); c=0.0;}while(1==1){c=c+dc;dx=dd*cos(c); dy=dd*sin(c);x1=x+dx; y1=y+dy;if (c<=6.29) { it=0; break; }dd=dd/1.67;if (dd<=1.0e-07) { it=1; break; }c=0.0;}if (it==0) goto l40;}if (fabs(y)<=1.0e-06){ p=-x; y=0.0; q=0.0; }else{p=-2.0*x; q=x*x+y*y;xr[k-1]=x*w;xi[k-1]=-y*w;k=k-1;}for (i=1; i<=k; i++){a[i]=a[i]-a[i-1]*p;a[i+1]=a[i+1]-a[i-1]*q;}xr[k-1]=x*w; xi[k-1]=y*w;k=k-1;if (k==1){ xr[0]=-a[1]*w/a[0]; xi[0]=0.0; }}}}if (k==1) jt=0;else jt=1;}}void srrt::output () //输出根到文件并显示{int k;char str2[20];cout <<"\n输出文件名: ";cin >>str2;ofstream fout (str2);if (!fout){ cout <<"\n不能打开这个文件" <<str2 <<endl; exit(1); } for (k=0; k<n; k++){fout <<xr[k] <<" " <<xi[k] <<endl;cout <<xr[k] <<" +j " <<xi[k] <<endl;}fout.close ();}void main () //主函数{srrt root(6);root.input (); //由文件读入代数方程系数root.srrt_root (); //执行牛顿下山法root.output (); //输出根到文件并显示}6、输入输出输出结果如下:7、分析体会牛顿下山法作为计算方法课程中重要的知识点,在看书学习时较易大致理解其思路,但上级编写代码时却是有难度的。

135-7-4牛顿下山法、弦截法、解非线性方程组的牛顿法

135-7-4牛顿下山法、弦截法、解非线性方程组的牛顿法

4. -1.

Clear[x]
5. 0.
FindRoot[f[x]==0,{x,0.1I}]
-0.170616
{x -> -0.5 + 0.866025 I}
f ( x) x2 x 1 的图形
程 序 设 计
典型例题
典型例题
例1
用弦截法解方程
f ( x) x 3 7.7x 2 19.2x 15.3的根,取x0 1.5, x1 4
为了叙述方便,以解二阶非线性方程组为例演示解题方法和步骤
非 线
设二



组:gf((xx,,
y) y)
0 0
性 方 程

成向量

式 :F
(w)
f (x, g( x,
yy)),

中w
x y
组 的 牛
将f ( x, y),g( x, y)在( x0 , y0 )附近作二元泰勒展开, 并取其线性部分,得到方程组:
x
f
( x1 , x
y1 )
y
f
(x1 , y
y1 )
f
( x1 ,
y1 )
x
g( x1 , x
y1
)
y
g( x1 , y
y1
)
g(
x1 ,
y1
)

f f
程 组 的 牛

J
x g
x
y g
y ( x1 , y1 )
当 J 0时,解出x, y
顿 解 法
迭 代:
w2
w1
x y
记作
x2 y2
依 此 类 推 可 得 : w k 1

验证牛顿运动实验报告

验证牛顿运动实验报告

验证牛顿运动实验报告1. 实验目的本实验的目的是验证牛顿第一、第二和第三定律。

通过对物体的运动进行观察、测量和分析,以达到理解和验证这些定律的目的。

2. 实验器材- 弹簧测力计- 砝码组- 平衡杆- 支架- 纸张- 笔3. 实验原理3.1 牛顿第一定律牛顿第一定律,也称为惯性定律,指出当物体受到合外力的作用时,将产生加速度。

即F = m ×a,其中F 表示合外力,m 表示物体的质量,a 表示物体所获得的加速度。

3.2 牛顿第二定律牛顿第二定律与物体的加速度和施力之间的关系密切相关。

其表达式为F = ma,其中F 表示合外力,m 表示物体的质量,a 表示物体所获得的加速度。

3.3 牛顿第三定律牛顿第三定律即作用力与反作用力相等,方向相反。

当物体受到外力作用时,物体对外界也会产生等大反向的力。

4. 实验步骤1. 将支架搭建好,并将平衡杆固定在支架上。

2. 使用弹簧测力计将砝码组悬挂在平衡杆的一端。

3. 在纸张上绘制一个坐标系,并记录时间与位置的关系。

4. 初始时,将平衡杆放在平衡位置上,记录物体的初始位置。

5. 将平衡杆从平衡位置释放,并记录物体的运动过程中的位置变化和时间变化。

6. 根据记录的数据,绘制出物体的运动曲线,并分析曲线的特点。

5. 数据分析根据实验记录的数据,我们计算出物体在不同时间点的加速度,并与施加在物体上的合外力进行对比。

经过计算和分析,我们得到如下结论:1. 物体在受力作用下的加速度与所施加的合外力成正比。

2. 物体的质量与加速度呈反比关系。

3. 物体所受外力与物体施加在外界的反作用力相等,且方向相反。

这些结论验证了牛顿的运动定律,特别是牛顿第二定律与第三定律。

6. 实验结论通过对牛顿运动实验的观察和分析,我们得出以下结论:1. 牛顿第一定律是物体在无外力作用下保持静止或匀速直线运动的定律。

2. 牛顿第二定律描述了物体受到外力作用时的加速度与施力之间的关系。

3. 牛顿第三定律指出任何作用力都伴随着等大反作用力,方向相反。

牛顿下山法

牛顿下山法
3
又因
( x*)
f ( x*) , f ( x*)
故由(2.9)可得
lim xk 1 x * f ( x*) . k ( x x*) 2 2 f ( x*) k
(4.3)
例7 解
用牛顿法解方程
xex 1 0.
(4.4)
这里牛顿公式为
xk 1 xk e x k xk , 1 xk
于是方程 f ( x) 0 可近似地表示为
f ( xk ) f ( xk )( x xk ) 0.
Hale Waihona Puke (4.1)这是个线性方程,记其根为 xk 1 ,则 xk 1的计算公式为
1
xk 1 xk
f ( xk ) f ( xk )
( k 0,1, ),
(4.2)
这就是牛顿(Newton)法. 牛顿法的几何解释. 方程 f ( x) 0 的根 x * 可解释为曲线 y f ( x) 与 x 轴 的交点的横坐标(图7-3). 设 xk 是根 x *的某个近似值, 过曲线 y f ( x) 上横坐标为 xk 的点 Pk 引切线,并将该切线与 x 轴的交点的横坐标 xk 1 作为 x * 的新的近似值. 图7-3
2
注意到切线方程为
y f ( xk ) f ( xk )( x xk ).
这样求得的值 xk 1 必满足(4.1),从而就是牛顿公式(4.2) 的计算结果. 由于这种几何背景,牛顿法亦称切线法. 牛顿法(4.2)的收敛性,可直接由定理4得到,对(4.2) 其迭代函数为
( x) x
步骤4
6
7.4.2
牛顿法应用举例
x 2 C 0,
对于给定的正数 C ,应用牛顿法解二次方程

计算方法实验五牛顿法,牛顿下山法,切线法,二分法

计算方法实验五牛顿法,牛顿下山法,切线法,二分法

计算机实现数值积分 实验目的:非线性方程求解 实验内容:1.二分法的 Matlab 实现; 2.牛顿法的 Matlab 实现; 3.牛顿下山法、割线法、艾特金加速法、重根 迭代法、非线性方程组牛顿法中任选其一。 实验要求:1.每种算法要求达到给定的精度,输出近似 解结果及所需迭代次数; 2. P.239、171,或自选题目; 3.每个算法至少实验一个题目。
Therefore,the root is x=1.3571,iteration number is k=2.
6.在 MATLAB 工作窗口输入程序 [k,xk,yk,piancha,xdpiancha]=newtonqx(1,1e-8, 1e-8,100) 7.运行结果 y =16 y =26 y =0.3350 ans =1.0000 1.3846 0.3350 0.6154 0.4444 y =0.3350 y =18.5207 y =-0.0481
-0.0481
0.0181
0.0132
0.0072
0.0026
0.0019
-0.0011
0.0004
0.0003
0.0002
0.0001
0.0000
-0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
-0.0000
0.0000
0.0000
0.0000
0.0000
0.0000
-0.0000
Therefore,the root is x=1.3688,iteration number is k=7.
pare the number of computations for finding the root of

计算方法实验报告(附代码)

计算方法实验报告(附代码)

实验一 牛顿下山法实验说明:求非线性方程组的解是科学计算常遇到的问题,有很多实际背景.各种算法层出不穷,其中迭代是主流算法。

只有建立有效的迭代格式,迭代数列才可以收敛于所求的根。

因此设计算法之前,对于一般迭代进行收敛性的判断是至关重要的。

牛顿法也叫切线法,是迭代算法中典型方法,只要初值选取适当,在单根附近,牛顿法收敛速度很快,初值对于牛顿迭代 至关重要。

当初值选取不当可以采用牛顿下山算法进行纠正。

牛顿下山公式:)()(1k k k k x f x f x x '-=+λ下山因子 ,,,,322121211=λ下山条件|)(||)(|1k k x f x f <+实验代码:#include<iostream> #include<iomanip> #include<cmath>using namespace std;double newton_downhill(double x0,double x1); //牛顿下山法函数,返回下山成功后的修正初值double Y; //定义下山因子Y double k; //k为下山因子Y允许的最小值double dfun(double x){return 3*x*x-1;} //dfun()计算f(x)的导数值double fun1(double x){return x*x*x-x-1;} //fun1()计算f(x)的函数值double fun2(double x) {return x-fun1(x)/dfun(x);} //fun2()计算迭代值int N; //N记录迭代次数double e; //e表示要求的精度int main(){double x0,x1;cout<<"请输入初值x0:";cin>>x0;cout<<"请输入要求的精度:";cin>>e;N=1;if(dfun(x0)==0){cout<<"f'(x0)=0,无法进行牛顿迭代!"<<endl;}x1=fun2(x0);cout<<"x0"<<setw(18)<<"x1"<<setw(18)<<"e"<<setw(25)<<"f(x1)-f(x0)"<<endl;cout<<setiosflags(ios::fixed)<<setprecision(6)<<x0<<" "<<x1<<" "<<fabs(x1-x0)<<" "<<fabs(fun1(x1))-fabs(fun1(x0))<<endl;if(fabs(fun1(x1))>=fabs(fun1(x0))){ //初值不满足要求时,转入牛顿下山法x1=newton_downhill(x0,x1);} //牛顿下山法结束后,转入牛顿迭代法进行计算while(fabs(x1-x0)>=e){ //当精度不满足要求时N=N+1;x0=x1;if(dfun(x0)==0){cout<<"迭代途中f'(x0)=0,无法进行牛顿迭代!"<<endl;} x1=fun2(x0);cout<<setiosflags(ios::fixed)<<setprecision(6)<<x0<<" "<<x1<<" "<<fabs(x1-x0)<<endl;}cout<<"迭代值为:"<<setiosflags(ios::fixed)<<setprecision(6)<<x1<<'\n';cout<<"迭代次数为:"<<N<<endl;return 0;}double newton_downhill(double x0,double x1){Y=1;cout<<"转入牛顿下山法,请输入下山因子允许的最小值:";cin>>k;while(fabs(fun1(x1))>=fabs(fun1(x0))){if(Y>k){Y=Y/2;}else {cout<<"下山失败!";exit(0);}x1=x0-Y*fun1(x0)/dfun(x0);}//下山成功则cout<<"下山成功!Y="<<Y<<",转入牛顿迭代法计算!"<<endl;return x1;}实验结果:图4.1G-S 迭代算法流程图实验二 高斯-塞德尔迭代法实验说明:线性方程组大致分迭代法和直接法。

合工大计算方法实验报告

合工大计算方法实验报告

输出:近似根、实际迭代次数
3 算法基本原理
x
3
有三个实根
f(x)=0 的根
3x 1 ;
3 x2 1
x
求非线性方程组的解是科学计算常遇到的问题,有很多实际背景.各种算法层出不穷, 其中迭代是主流算法。只有建立有效的迭代格式,迭代数列才可以收敛于所求的根。因此 设计算法之前,对于一般迭代进行收敛性的判断是至关重要的。牛顿法也叫切线法,是迭 代算法中典型方法,只要初值选取适当,在单根附近,牛顿法收敛速度很快,初值对于牛 顿迭代 至关重要。当初值选取不当可以采用牛顿下山算法进行纠正。
一般迭代: xk 1 ( xk ) x ( x) f ( x) 0
牛顿公式: xk1
牛顿下山公式: xk1
xk

xk
f (xk ) f ( xk )

f (xk ) f ( xk )
对全部高中资料试卷电气设备,在安装过程中以及安装结束后进行高中资料试卷调整试验;通电检查所有设备高中资料电试力卷保相护互装作置用调与试相技互术关,系电通,力1根保过据护管生高线产中0不工资仅艺料可高试以中卷解资配决料置吊试技顶卷术层要是配求指置,机不对组规电在范气进高设行中备继资进电料行保试空护卷载高问与中题带资2负料2,荷试而下卷且高总可中体保资配障料置2试时32卷,3各调需类控要管试在路验最习;大题对限到设度位备内。进来在行确管调保路整机敷使组设其高过在中程正资1常料中工试,况卷要下安加与全强过,看度并25工且52作尽22下可护都能1关可地于以缩管正小路常故高工障中作高资;中料对资试于料卷继试连电卷接保破管护坏口进范处行围理整,高核或中对者资定对料值某试,些卷审异弯核常扁与高度校中固对资定图料盒纸试位,卷置编工.写况保复进护杂行层设自防备动腐与处跨装理接置,地高尤线中其弯资要曲料避半试免径卷错标调误高试高等方中,案资要,料求编试技5写、卷术重电保交要气护底设设装。备备置管4高调、动线中试电作敷资高气,设料中课并技3试资件且、术卷料中拒管试试调绝路包验卷试动敷含方技作设线案术,技槽以来术、及避管系免架统不等启必多动要项方高方案中式;资,对料为整试解套卷决启突高动然中过停语程机文中。电高因气中此课资,件料电中试力管卷高壁电中薄气资、设料接备试口进卷不行保严调护等试装问工置题作调,并试合且技理进术利行,用过要管关求线运电敷行力设高保技中护术资装。料置线试做缆卷到敷技准设术确原指灵则导活:。。在对对分于于线调差盒试动处过保,程护当中装不高置同中高电资中压料资回试料路卷试交技卷叉术调时问试,题技应,术采作是用为指金调发属试电隔人机板员一进,变行需压隔要器开在组处事在理前发;掌生同握内一图部线纸故槽资障内料时,、,强设需电备要回制进路造行须厂外同家部时出电切具源断高高习中中题资资电料料源试试,卷卷线试切缆验除敷报从设告而完与采毕相用,关高要技中进术资行资料检料试查,卷和并主检且要测了保处解护理现装。场置设。备高中资料试卷布置情况与有关高中资料试卷电气系统接线等情况,然后根据规范与规程规定,制定设备调试高中资料试卷方案。

牛顿运动定律实验报告

牛顿运动定律实验报告

牛顿运动定律实验报告实验目的通过实验观察,验证牛顿运动定律中的三个基本原理:质量对物体的惯性、力对物体的加速度产生影响、力与加速度的关系。

实验器材1.物体2.力计3.平衡器4.加速度计5.计时器实验步骤1.将物体放置在平衡器上,并记录物体的质量。

2.在物体上施加不同大小的力,并利用力计测量施加的力的大小。

3.记录施加力后物体的加速度,利用加速度计进行测量。

4.将实验结果记录下来,并进行数据分析。

实验结果施加力(N)物体质量(kg)加速度(m/s^2)1 0.5 22 0.5 43 0.5 6数据分析根据实验结果可得到以下结论:1.第一个牛顿定律的验证:当不施加力时,物体保持静止或匀速直线运动。

实验中,当没有施加力时,物体的加速度为零,符合第一个定律。

2.第二个牛顿定律的验证:力与物体的加速度成正比,与物体质量成反比。

实验中,当施加的力增大时,物体的加速度也增大,而物体的质量不变。

符合第二个定律。

3.第三个牛顿定律的验证:物体对施加力产生一个大小相等、方向相反的反力。

在实验中,当施加力时,物体对施加力产生一个反向的力。

符合第三个定律。

结论通过本实验,我们成功验证了牛顿运动定律中的三个基本原理。

这些原理揭示了力、质量和加速度之间的关系,为我们理解物体运动提供了基础。

通过实验记录和数据分析,我们可以得出结论:质量对物体的惯性产生影响,力对物体的加速度产生影响,并且力与加速度成正比。

总结通过本次实验,我们深入学习了牛顿运动定律,并通过实验验证了这些定律的有效性。

实验过程中我们使用了力计、平衡器和加速度计等实验器材,通过测量施加在物体上的力以及物体的质量和加速度,我们成功验证了牛顿运动定律的三个基本原理。

这些结果对我们深入理解物体的运动规律和力学原理非常重要,并为我们今后的学习和研究提供了基础。

关于牛顿力学实验报告

关于牛顿力学实验报告

一、实验目的1. 理解并验证牛顿第一定律、第二定律和第三定律。

2. 掌握实验操作技能,提高实验分析能力。

3. 加深对经典力学理论的理解。

二、实验原理1. 牛顿第一定律:物体在不受外力作用时,保持静止状态或匀速直线运动状态。

2. 牛顿第二定律:物体的加速度与所受合外力成正比,与物体质量成反比,加速度方向与合外力方向相同。

公式:F=ma。

3. 牛顿第三定律:作用力与反作用力大小相等、方向相反,作用在同一直线上。

三、实验器材1. 气垫导轨2. 滑块3. 秒表4. 弹簧秤5. 钳子6. 刻度尺7. 计算器四、实验步骤1. 牛顿第一定律验证:(1)将滑块放置在气垫导轨上,记录滑块在无外力作用下的运动状态。

(2)在滑块上施加水平推力,观察滑块的运动状态。

(3)分析实验数据,验证牛顿第一定律。

2. 牛顿第二定律验证:(1)将滑块放置在气垫导轨上,用弹簧秤测出滑块的质量。

(2)在滑块上施加水平推力,用秒表测量滑块的加速度。

(3)计算滑块所受合外力,验证牛顿第二定律。

3. 牛顿第三定律验证:(1)将两个滑块分别放置在气垫导轨上,用钳子将它们连接在一起。

(2)在其中一个滑块上施加水平推力,观察两个滑块的运动状态。

(3)分析实验数据,验证牛顿第三定律。

五、实验数据与分析1. 牛顿第一定律验证:实验数据:滑块在无外力作用下的运动状态为匀速直线运动。

分析:实验结果与牛顿第一定律相符。

2. 牛顿第二定律验证:实验数据:滑块质量m=0.2kg,加速度a=0.5m/s²,合外力F=ma=0.2kg×0.5m/s²=0.1N。

分析:实验结果与牛顿第二定律相符。

3. 牛顿第三定律验证:实验数据:两个滑块在水平推力作用下同时向相反方向运动。

分析:实验结果与牛顿第三定律相符。

六、实验结论1. 通过实验验证了牛顿第一定律、第二定律和第三定律的正确性。

2. 提高了实验操作技能,加深了对经典力学理论的理解。

3. 了解了实验误差产生的原因,为以后实验提供了借鉴。

数值分析-牛顿法 实验报告

数值分析-牛顿法 实验报告

数值分析实验报告
1. 牛顿法
1.C++实验代码:
#include<iostream>
#include<math.h>
using namespace std;
double fun(double x)
{
double y=x*(x+1)*(x+1)-1;
return y;
}
double daoshu(double x)
{
double y=(x+1)*(3*x+1);
return y;
}
double jisuan(double x)
{
double y;
y=x-fun(x)/daoshu(x);
if (fabs(y-x)<=0.00005)//浮点数的绝对值
{
return y;
}
else return jisuan(y);
}
void main ()
{
cout<<"在误差范围内的函数值为:"<<jisuan(0.4)<<endl;
system("pause");
}
2.实验结果:
3.实验中碰到的问题:
有了前一次的经验,大致的格式能够掌握了,大致的做法也差不多,所以做题的速度也快了些。

期中碰到的最大问题是如何算导数,没想出来算法,就直接把算式写在了daoshu这个函数里了,但是如果是自己通过输入的函数,这个求导就是一个很大的难点。

在这个程序中我总体通过几个函数的相互调用,以及递归方法,完成了这个牛顿法的计算。

牛顿下山法实验报告

牛顿下山法实验报告

实验一:牛顿下山法一:上机题目使牛顿下山法求解方程的解,已知方程为:013=--x x二:牛顿下山法运行步骤1对原方程求导,得到导函数。

2已知迭代公式,输入x0,求解x1.3 对x1,x0,代入原函数判断其大小关系,根据下山条件继续求解4 判断所求是否满足精确度。

5 最终输入x0,x1。

三:程序流程图四:源程序代码#include "stdio.h"float f(float x){ float f;f=x*x*x-x-1;return f;};float g(float x){ float g;g=3*x*x-1;return g;};main(){float a,b,c,d;c=1;printf("请输入初值:"); scanf("%f",&a);for(int i=0;i<100;i++) {b=a-c*f(a)/g(a);if(f(b)*f(b)>=f(a)*f(a)) {c=0.5*c;a=b;}elsea=b;}printf("%f",b);}五:运行结果实验二:高斯—赛德尔算法一:上机题目使用高斯—法解线性方程组二:高斯—赛德尔算法定义由雅可比迭代法可知,在计算x k+1的过程中,采用的都是上一迭代步的结果x k。

考察其计算过程,显然在计算新分量x i k+1时,已经计算得到了新的分量,。

有理由认为新计算出来的分量可能比上次迭代得到的分量有所改善。

希望充分利用新计算出来的分量以提高迭代解法的效率,这就是高斯-赛德尔迭代法(简称G-S迭代法)对(64)式进行改变可以得到G-S迭代法的分量形式G-S迭代法的分量形式亦可表示为也可写成矩阵形式。

方程组的系数A在(58)式基础上还可进一步分解,若将A0继续分解为一个下三角阵A0L和一个上三角阵A0U。

三:程序代码#include "stdio.h"float max(float x,float y,float z){float max;max=x;if(y>max)max=y;if(z>max)max=z;return max;}void main(){float x[3],a[3],c[3];int i;printf("请输入初值:");for(i=0;i<3;i++)scanf("%f",&x[i]);do{for(int k=0;k<3;k++)a[k]=x[k];x[0]=-0.4*x[1]-0.2*x[2]-2.4;x[1]=0.25*x[0]-0.5*x[2]+5;x[2]=-0.2*x[0]+0.3*x[1]+0.3;for(int j=0;j<3;j++)c[j]=(x[j]-a[j])*(x[j]-a[j]);}while(max(c[0],c[1],c[2])>0.0001); printf("%f\n",x[0]);printf("%f\n",x[1]);printf("%f\n",x[2]);四:运行结果。

数值计算方法实验报告

数值计算方法实验报告
#include<stdio.h>
#include<math.h>
double f(double x)
{
double s;
s=x*x*x/3-x;
return fabs(s);
}
void main()
{double x=-0.99,y;
int k=0;
printf("%d ,%lf\n",k,x);
{if(r>=x[i]&&r<=x[i+1])
{s=m[i]*pow(x[i+1]-r,3)/6*h[i]+m[i+1]*pow(r-x[i],3)/6*h[i]+(y[i]-m[i]*pow(h[i],2)/6)*(x[i+1]-r)/h[i]+(y[i+1]-m[i+1]*pow(h[i],2)/6)*(r-x[i])/h[i];
28.65
39.62
50.65
5.28794
9.4
13.84
20.2
24.9
28.44
31.1
k
7
8
9
10
11
12
78
104.6
156.6
208.6
260.7
312.5
35
36.5
36.6
34.6
31.6
31.0
k
13
14
15
16
17
18
364.4
416.3
468
494
507
520
20.9
14.8
7.8
do
{y=x;

牛顿定律的应用实验报告

牛顿定律的应用实验报告

一、实验目的1. 通过实验验证牛顿第一定律、第二定律和第三定律;2. 理解牛顿定律在现实生活中的应用;3. 培养学生观察、分析、解决问题的能力。

二、实验原理牛顿定律是经典物理学中的基本定律,主要包括牛顿第一定律、第二定律和第三定律。

以下是各定律的简要介绍:1. 牛顿第一定律(惯性定律):物体在没有外力作用时,将保持静止或匀速直线运动状态。

2. 牛顿第二定律(运动定律):物体的加速度与作用力成正比,与物体的质量成反比,加速度的方向与作用力的方向相同。

3. 牛顿第三定律(作用与反作用定律):两个物体之间的作用力和反作用力大小相等、方向相反,作用在同一直线上。

三、实验器材1. 水平轨道;2. 弹簧测力计;3. 小车;4. 质量已知的小球;5. 秒表;6. 计算器;7. 笔和纸。

四、实验步骤1. 实验一:验证牛顿第一定律(1)将小车放在水平轨道上,记录小车在无外力作用下的运动情况。

(2)轻轻推小车,使其在水平轨道上做匀速直线运动,记录小车的速度。

(3)分析实验数据,验证牛顿第一定律。

2. 实验二:验证牛顿第二定律(1)将小车放在水平轨道上,用弹簧测力计拉小车,记录拉力F和对应的加速度a。

(2)改变小车质量m,重复实验步骤,记录不同质量下的拉力F和加速度a。

(3)分析实验数据,验证牛顿第二定律。

3. 实验三:验证牛顿第三定律(1)将小球放在水平轨道上,记录小球在无外力作用下的运动情况。

(2)用弹簧测力计分别测量小球受到的作用力和反作用力,记录大小和方向。

(3)分析实验数据,验证牛顿第三定律。

五、实验结果与分析1. 实验一:根据实验数据,当小车在无外力作用下,其运动状态保持不变,验证了牛顿第一定律。

2. 实验二:根据实验数据,小车所受的拉力F与加速度a成正比,且加速度a与质量m成反比,验证了牛顿第二定律。

3. 实验三:根据实验数据,小球受到的作用力和反作用力大小相等、方向相反,验证了牛顿第三定律。

六、结论1. 牛顿第一定律、第二定律和第三定律在实验中得到验证,证明了牛顿定律的正确性。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一:牛顿下山法
一:上机题目
使牛顿下山法求解方程的解,已知方程为:013=--x x
二:牛顿下山法运行步骤
1对原方程求导,得到导函数。

2已知迭代公式,输入x0,求解x1.
3 对x1,x0,代入原函数判断其大小关系,根据下山条件继续求解
4 判断所求是否满足精确度。

5 最终输入x0,x1。

三:程序流程图
四:源程序代码
#include "stdio.h"
float f(float x)
{ float f;
f=x*x*x-x-1;
return f;
};
float g(float x)
{ float g;
g=3*x*x-1;
return g;
};
main()
{float a,b,c,d;
c=1;
printf("请输入初值:"); scanf("%f",&a);
for(int i=0;i<100;i++) {b=a-c*f(a)/g(a);
if(f(b)*f(b)>=f(a)*f(a)) {c=0.5*c;
a=b;
}
else
a=b;
}
printf("%f",b);
}
五:运行结果
实验二:高斯—赛德尔算法
一:上机题目
使用高斯—法解线性方程组
二:高斯—赛德尔算法定义
由雅可比迭代法可知,在计算x k+1的过程中,采用的都是上一迭代步的结果x k。

考察其计算过程,显然在计算新分量x i k+1时,已经计算得到了新的分量,。

有理由认为新计算出来的分量可能比上次迭代得到的分量有所
改善。

希望充分利用新计算出来的分量以提高迭代解法的效率,这就是高斯-赛德尔迭代法(简称G-S迭代法)
对(64)式进行改变可以得到G-S迭代法的分量形式
G-S迭代法的分量形式亦可表示为
也可写成矩阵形式。

方程组的系数A在(58)式基础上还可进一步分解,若将A0继续分解为一个下三角阵A0L和一个上三角阵A0U。

三:程序代码
#include "stdio.h"
float max(float x,float y,float z)
{
float max;
max=x;
if(y>max)
max=y;
if(z>max)
max=z;
return max;
}
void main()
{
float x[3],a[3],c[3];
int i;
printf("请输入初值:");
for(i=0;i<3;i++)
scanf("%f",&x[i]);
do{
for(int k=0;k<3;k++)
a[k]=x[k];
x[0]=-0.4*x[1]-0.2*x[2]-2.4;
x[1]=0.25*x[0]-0.5*x[2]+5;
x[2]=-0.2*x[0]+0.3*x[1]+0.3;
for(int j=0;j<3;j++)
c[j]=(x[j]-a[j])*(x[j]-a[j]);
}while(max(c[0],c[1],c[2])>0.0001); printf("%f\n",x[0]);
printf("%f\n",x[1]);
printf("%f\n",x[2]);
四:运行结果。

相关文档
最新文档