资源描述:
《matlab使用(解N元方程组).doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、.试着用C语言编程解N元方程组#include#defineM10floatfdel(float*p,intn){inti;floatsum=0;for(i=0;isum+=*(p+i);sum/=n;return(fabs(sum));}voidchu(float*p){inti;for(i=0;i*(p+i)=999;return;}voidprint(float*p,intn){inti;for(i=0;iprintf("x%d=%f",i+1,*(p+i));return;}/**voidscan(float**p,intn){inti,j;for(i
2、=0;ifor(j=0;j{printf("a%d%d=",i+1,j+1);scanf("%f",*(p+i)+j);}return;}**/voidden(float*a,float*b,intn){inti;for(i=0;i*(a+i)=*(b+i);return;}voidjie(float*p0,floata[M][M],float*p,float*b,intn){floatsum=0;inti,j;for(i=0;i{for(j=0;j{if(i!=j)sum=sum+a[i][j]*p0[j];else{n=a[i][j];continue;}
3、}..*(p+i)=*(b+i)-sum/n;}}main(){floatx0[M],xi[M][M],b[M],x[M];inti,j,n;chu(x0);chu(b);chu(x);for(i=0;i{printf("x0=%f",x0[i]);printf("b=%f",b[i]);printf("x=%f",x[i]);}for(i=0;ifor(j=0;jxi[i][j]=0;printf("shuruwuizhishugeshun=");scanf("%d",&n);printf("shurufangchengzugegexishua[i][j]=
4、");for(i=0;ifor(j=0;j{printf("a%d%d=",i+1,j+1);scanf("%f",&xi[i][j]);}printf("x[1][1]=%f",xi[1][1]);for(i=0;iprint(*(xi+i),n);for(i=0;iprintf("abs=%f",fdel(*(xi+i),n));}#include double f(double x){ double y; y=2*x*x*x-9*x*x+12*x-3; return(y);}int main(){ double
5、t,a=0,b=1,tmp; t=(a+b)/2; while((f(b)-f(a))>1e-8) {.. t=(a+b)/2; tmp=f(t); if(tmp==0) break; else if(tmp<0) a=t; else b=t; } printf("该方程在(0,1)之间的根是%.8f,f(%.8f)=%.8f",t,t,f(t)); return 0;}牛顿迭代法(Ne
6、wton'smethod)又称为牛顿-拉夫逊方法(Newton-Raphsonmethod),它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。多数方程不存在求根公式,因此求精确根非常困难,甚至不可能,从而寻找方程的近似根就显得特别重要。方法使用函数f(x)的泰勒级数的前面几项来寻找方程f(x)=0的根。牛顿迭代法是求方程根的重要方法之一,其最大优点是在方程f(x)=0的单根附近具有平方收敛,而且该法还可以用来求方程的重根、复根。另外该方法广泛用于计算机编程中。设r是f(x)=0的根,选取x0作为r初始近似值,过点(x0,f(x0))做曲线y=
7、f(x)的切线L,L的方程为y=f(x0)+f'(x0)(x-x0),求出L与x轴交点的横坐标x1=x0-f(x0)/f'(x0),称x1为r的一次近似值。过点(x1,f(x1))做曲线y=f(x)的切线,并求该切线与x轴交点的横坐标x2=x1-f(x1)/f'(x1),称x2为r的二次近似值。重复以上过程,得r的近似值序列,其中x(n+1)=x(n)-f(x(n))/f'(x(n)),称为r的n+1次近似值,上式称为牛顿迭代公式。解非线性方程f(x)=0的牛顿法是把非线性方程线性化的一种近似方法。把f(x)在x0点附近展开成泰勒级数f(x)=f(x0)+(x
8、-x0)f'(x0)+(x-x0)^2