数值计算方法课程设计123_第1页
数值计算方法课程设计123_第2页
数值计算方法课程设计123_第3页
数值计算方法课程设计123_第4页
数值计算方法课程设计123_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 数值计算方法课程设计姓名 学号 班级 实验要求1 应用自己熟悉的算法语言编写程序,使之尽可能具有通用性。2 上机前充分准备,复习有关算法,写出计算步骤,反复检查,调试程序。(注:在练习本上写,不上交)3 完成计算后写出实验报告,内容包括:所用的算法语言,cpu时间,算法步骤叙述,变量说明,程序清单,输出计算结果,结构分析和小结等。(注:具体题目具体分析,并不是所有的题目的实验报告都包含上述内容!)4 至少需要选择5道必做题目。其余的也可以选择,如果多选,可酌情加分!5 独立完成,如有雷同,一律判为零分!6 上机期间不允许做其他任何与课程设计无关的事情,否则被发现一次扣10分,被发现三次判为零

2、分!上机实习题目1 编写秦九韶算法程序,并用该程序计算多项式在的值。public class qinjiushao public double result; public double x=-2;/定义一个未知数x public double b; public double c; public int i; public string abc; public void calculate() / abc=x5+3*x3-2*x+6;多项式,可以截取字符串获取系数 double a=2,0,-3,3,-4;/多项式的系数 double b=new doublea.length; double

3、 c=new doubleb.length; for(i=0;ia.length;i+) if(i=0) ci=bi=ai; else bi=bi-1*x+ai; ci=ci-1*x+bi-1*x+ai; int j=a.length-1; system.out.println(结果值为:f(+x+)=+ca.length-2); public static void main(string agrs) qinjiushao qjs=new qinjiushao(); qjs.calculate(); /jframe jframe=new jframe(); /jframe.settitle(

4、求结果); /jframe.setsize(400,400); /jframe.setvisible(true); 2 用选列主元高斯消去法解线性方程组#include#include#define n 4 void maxij(double (*table)n+1,int m);void zeros(double (*table)n+1,int m);double solution(double (*table)n+1,double *a,int n);main() double tablenn+1=-3,-1,0,0,1,-1,2,-1,0,0,0,-1,2,-1,0,0,-1,2,0;

5、double an; int i,j,m,n; for(m=0;m=0;n-) if(tablenn!=0) an=solution(table,a,n); else an=0; for(i=0;in;p-) sum+=tablenp*ap; result=(tablenn-sum)/tablenn; return result;void zeros(double (*table)n+1,int m) double zeroing; int i,j; for(i=m+1;in;i+) if(tableim!=0) zeroing=-1*tableim/tablemm; tableim=0; f

6、or(j=m+1;j=n;j+) tableij+=tablemj*zeroing; void maxij(double (*table)n+1,int m) double exchange; int i,j,line=m; for(i=m;in;i+) if(abs(tablelinem)abs(tableim) line=i; for(i=m;i=n;i+) exchange=tablemi; tablemi=tablelinei; tablelinei=exchange; 运行结果:x1=-0.266667,x2=-0.2,x3=-0.133333,x4=-0.06666673 分别用平

7、方根法和改进平方根法解线性方程组平方根法解线性方程组axb#includemath.h #includestdio.hmain() int i,j,k; int n=3; float m,a33,b3,x3,l33,y3; printf(input matrix numbers of a:n); for(i=0;in;i+) for(j=0;jn;j+) scanf(%f,&aij); printf(n); printf(input numbers of b:n); for(i=0;in;i+) scanf(%f,&bi); printf(n); l00=sqrt(a00); for(i=1;

8、in;i+) li0=ai0/l00; l0i=li0; for(j=1;jn;j+) m=0.0; for(k=0;kj;k+) m+=ljk*ljk; ljj=sqrt(ajj-m); for(i=j+1;in;i+) m=0.0; for(k=0;kj;k+) m+=lik*ljk; lij=(aij-m)/ljj; lji=lij; y0=b0/l00; for(i=1;in;i+) m=0.0; for(k=0;k=0;i-) m=0.0; for(k=i+1;kn;k+) m+=lki*xk; xi=(yi-m)/lii; for(i=0;in;i+) printf(x(%d)=%

9、fn,i,xi); 结果用c语言实现改进平方根法, 程序代码如下:#include stdlib.h#include stdio.h#include conio.h#include string.h#include math.h#define n 100float table(int n,float ann,float bn) int i,j;printf(please input the matrix a by row!n);for(i=0;in;i+)printf(row %d:,i);for(j=0;jn;j+)scanf(%f,&aij);printf(please input the

10、 array b:);for(i=0;in;i+)scanf(%f,&bi); printf(nthe matrix a and array b:n);for(i=0;in;i+)for(j=0;jn;j+)printf(%10.4f,aij); printf(%10.4f,bi); printf(n);return 0;float decomposition(int n,float ann,float lnn,float dnn) int i,j,k;float tnn,tmp1,tmp2; for(i=0;in;i+) for(j=0;jn;j+) if(i!=j) dij=0; if(i

11、j) tij=0; lij=0; if(i=j) lij=1; d00=a00; for(i=1;in;i+) for(j=0;ji;j+) tmp1=0; for(k=0;kj;k+) tmp1+=tik*ljk; tij=aij-tmp1; lij=tij/djj; tmp2=0; for(k=0;ki;k+) tmp2+=tik*lik; dii=aii-tmp2; printf(nafter cholesky triangular decomposition, the matrix l:n);for(i=0;in;i+) for(j=0;j=i;j+) printf(%8.4f,lij

12、); if(i=j) printf(n);printf(nand the matrix d:n); for(i=0;in;i+)for(j=0;j=i;j+) if(i!=j) for(k=0;k8;k+) printf( ); if(i=j) printf(%8.4fn,dij);return 0;float solve(int n,float lnn,float dnn,float bn) int i,j,k;float yn,xn,tmp1,tmp2;y0=b0; for(i=1;in;i+) tmp1=0; for(k=0;ki;k+) tmp1+=lik*yk; yi=bi-tmp1

13、; 4考虑阶三对角方程组 ,(1) 用选列主元高斯消去法求解,(2) 编写追赶法程序并求解,#include#includeint n;float *a,*b,*c,*d,*p,*q,*x;void print1() printf(设3对角方程组的形式如下:n); printf(b1*x1+c1*x2=d1n); printf(a2*x1+b2*x2+c2*x3=d2n); printf(ta3*x2+b3*x3+c3*x4=d3n); printf(tt.n); printf(ttt.n); printf(ttttan-1*xn-2+bn-1*xn-1+cn-1*xn=dn-1n); pri

14、ntf(tttttan*xn-1+bn*xn=dnn);void get_array() a=(float *)malloc(n+1)*sizeof(float); b=(float *)malloc(n+1)*sizeof(float); c=(float *)malloc(n+1)*sizeof(float); d=(float *)malloc(n+1)*sizeof(float); q=(float *)malloc(n+1)*sizeof(float); p=(float *)malloc(n+1)*sizeof(float); x=(float *)malloc(n+1)*size

15、of(float);void get_num() int i; printf(请输入系数a2-a%dn,n); for(i=2;i=n;i+) scanf(%f,&ai); a1=0; printf(请输入系数b1-b%dn,n); for(i=1;i=n;i+) scanf(%f,&bi); printf(请输入系数c1-c%dn,n-1); for(i=1;i=n-1;i+) scanf(%f,&ci); printf(请输入系数d1-d%dn,n); for(i=1;i=n;i+) scanf(%f,&di);void work() int i=0,k; float t; a1=cn=0

16、; p1=d1/b1; q1=c1/b1; /初始化 for(k=2;k=1;k-) xk=pk-qk*xk+1; /回代求解int main() /freopen(in.txt,r,stdin); int i=0; print1(); printf(请输入方程阶数n); scanf(%d,&n); get_array(); get_num(); work(); for(i=1;i0&x*x=1) result=x*math.log(math.sqrt(x*x-1)+x)-math.sqrt(x*x-1)-0.5*x; else system.out.println(您输入的值不合法); re

17、turn result; public void judge() erfenfa eff=new erfenfa(); double c=eff.getresult(a); double d=eff.getresult(b); i+; if(i=5) if(c*d0)b=(a+b)/2;judge();elsea=(a+b)/2;judge(); else system.out.println(不合法,请重新取值); /* public int getlenth(double e)/此方法用来判断精度 double dd=new double(e); string s=dd.tostring(

18、).substring(dd.tostring().indexof(.)+1); int length=s.length(); return length; */ public static void main(string args) erfenfa eff=new erfenfa(); eff.judge();newton迭代法x=6;y=5;while abs(y-x)=0.0001x=(y*log(y2-1)1/2+y)-(y2-1)1/2)/0.5; y=x;endxx=6;y=2;while abs(y-x)=0.0001x=(y*log(y2-1)1/2+y)-(y2-1)1/2

19、)/0.5; y=x;endxx=6;y=0;while abs(y-x)=0.0001x=(y*log(y2-1)1/2+y)-(y2-1)1/2)/0.5; y=x;endxx=2;y=-3;while abs(y-x)=0.0001x=(y*log(y2-1)1/2+y)-(y2-1)1/2)/0.5; y=x;endxx = 4.3321x = 2.0111x = 1x = -8elapsed_time = 0.17206求解下列非线性方程组在原点附近的根:matlab首先建立一个m文件 我取的名字叫 syfs0000function y=syfs0000(x)y=9*x(1)2+36

20、*x(2)2+4*x(3)2-36;x(1)2-2*x(2)2-20*x(3);16*x(1)-x(1)3-2*x(2)2-16*x(3)2;end然后在command window输入fsolve(syfs0000,0 0 0)得到ans=0.1342 0.9972 -0.09857分别写出解线性方程组收敛的jacobi迭代格式,gauss-seidel迭代格式,sor迭代格式。收敛的jacobi迭代格式#include#includeint main(void) double a33 = 5,2,1, -1,4,2, 2,-3,10 ; double b3 = -12,20,3; doub

21、le x3 = 0; /第k+1次迭代的结果 double xx3 = 0; /第k次迭代的结果 int size = 3; int max = 43; /最大迭代次数 double residual = 0.0; / double sum = 0.0; double dis = 0.0; double dif = 1.0; /相邻迭代的结果差 double eps = 1.0e-3; /迭代精度 for(int k=1;(keps);k+) dif = 0.0; printf(n第%d次迭代的结果:n,k); for(int i=0;isize;i+) for(int j=0;jsize;j

22、+) if(i!=j) sum +=aij*xxj; xi = (bi-sum)/aii; sum = 0.0; residual=0.0; /计算相邻迭代的结果差 for(int m=0;mresidual) residual=dis; dif=residual; /打印第k次的结果 for(i=0;isize;i+) printf(%12.8f ,xi); xxi=xi; printf(n与上次计算结果的距离(2范数):%12.8f n,dif); printf(n迭代计算的结果为:n); for(k=0;k=tol x0=x; x=g*x0+d1; n=n+1;endn然后在matlab

23、命令主窗口输入a=5,2,1;-1,4,2;2,-3,10;b=-12,20,3;x= gauss_seidel (a,b)得n =11x =-4.00000013381170 2.99999992601601 2.00000000456714sor迭代格式%-逐次超松弛迭代法-%-successive over-reaxation iteration methodclear;clc;a=5,2,1;-1,4,2;2,-3,10;b=-12,20,3;n=length(b); %解向量的维数fprintf(库函数计算结果:);x=inv(a)*b %库函数计算结果x=zeros(n,1);%迭

24、代初始值%-(a=d-e-f)-d=diag(diag(a);e=-tril(a,-1);%下三角f=-triu(a,1);%上三角w=1.1; %松弛因子,一般0w2b=inv(d-w*e)*(1-w)*d+w*f;g=w*inv(d-w*e)*b;eps=0.00001;%相邻解的距离小于该数时,结束迭代%-开始迭代-for k=1:43最大迭代次数为43 fprintf(第%d次迭代:,k); y=b*x+g; if abs(x-y)eps break; end x=yendx运行得 结果为x = -4.00000000000000 3.00000000000000 2.000000000000008用romberg积分计算积分时,要求结果的误差限为。#includestdlib.h#includemath.h#includeiostreamusing namespace std;double function( double x)return x=0?1:sin(x)/x;int print_romberg(double a,double b,double e) int k=1; double h=b-a;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论