数值计算方法课程设计123

合集下载

数值计算方法第2版课程设计

数值计算方法第2版课程设计

数值计算方法第2版课程设计一、设计背景数值计算方法是数学专业本科生的重要课程之一,也是计算机、物理、工程等专业学生的必修课之一。

本课程设计旨在通过实践,加深学生对于数值计算方法的理解、掌握该方向的求解方法与技巧,提高学生对数学知识的运用能力。

二、设计目的本课程设计的目的在于:1.加深对数值计算方法的理解;2.掌握数值计算方法相关算法的求解方法;3.提高计算机编程能力和应用数学能力。

三、设计内容1. 多项式插值多项式插值是一种常用的数值计算方法,用于求解由一系列离散数据点构成的函数图象。

本课程设计要求学生掌握牛顿插值法和Lagrange插值法的求解过程,并使用Matlab等编程语言实现。

2. 最小二乘拟合最小二乘拟合是一种广泛应用于数据拟合和参数估计的方法。

本课程设计要求学生了解最小二乘拟合的基本原理,并使用Matlab等编程语言实现。

另外,要求学生将所实现的代码应用于实际数据进行拟合,并给出结果的分析和解释。

3. 数值积分数值积分是一种重要的数值计算方法,应用广泛。

本课程设计要求学生了解常见的数值积分方法,如梯形公式、Simpson公式和Gauss公式等,并使用Matlab等编程语言实现。

4. 常微分方程求解常微分方程是一个广泛应用的数学领域,有许多数值方法可以求解。

本课程设计要求学生了解欧拉方法、梯形法、四阶龙格-库塔法等常见的数值求解方法,并使用Matlab等编程语言实现。

四、评估方法本课程设计将采取以下评估方法:1.课堂讨论和答辩,对学生对各个算法求解的理解和实现情况进行评价。

2.最终成果报告,包括所实现的代码及其在实际数据中的应用结果和分析。

五、参考文献[1] 高立. 数值计算方法及其MATLAB实现[M]. 北京: 北京航空航天大学出版社, 2015.[2] 姜启源. 数值计算方法教程[M]. 北京: 清华大学出版社, 2017.[3] 模拟计算方法与仿真实验[M]. 北京: 高等教育出版社, 2014.。

数值计算基础课程设计

数值计算基础课程设计

数值计算基础课程设计一、引言数值计算是常见的计算机应用领域之一,是计算机科学的重要分支之一。

数值计算基础课程是计算机科学专业本科生的必修课程,通过本次课程设计,可以帮助学生深入理解数值计算基础知识,提高数值计算的实际解决问题的能力。

本文主要介绍了数值计算基础课程设计的内容和要求。

希望对有相关实践需求的学生或教师有所帮助。

二、课程设计内容2.1 算法实现本次课程设计要求学生自行设计并实现以下算法:•二分法求函数零点•牛顿迭代法求函数零点•插值多项式法求函数近似值2.2 算法实验学生需要对自行设计实现的算法进行实验验证。

以求x^3 - 3x + 1 = 0在[0, 1]内的根为例,验证二分法求解函数零点的可行性,并与牛顿迭代法作比较。

学生还需要对插值多项式法进行实验。

通过把给定的一组x和对应的y值拟合成一个三次多项式来求出1.5处的近似值,并与函数实际值进行比较。

2.3 实验结果分析学生需要对以上实验的结果进行分析,比较各方法的优劣,讨论其适用范围与局限性,并能够发现其实用或改进的价值。

三、课程设计要求3.1 编码与注释学生需要使用C或C++语言实现以上算法,要求编写规范、清晰、易读的代码,并辅以必要的注释。

注释包括但不限于函数定义、参数说明、代码逻辑、变量含义及功能的描述等。

3.2 结果准确学生需要保证程序正确无误,并输出正确的实验结果。

结果应当包括:•每个算法的具体实现•实验数据的原始样本•实验结果的数据及图表•实验过程中的思路、观察、发现以及分析结果的论述笔记3.3 小组合作学生可以自由选择组队进行课程实践,每个小组最多不超过3人。

学生需要充分发挥小组合作优势,相互学习、相互借鉴、相互协作,完成课程设计。

3.4 前置知识学生需要具备以下前置知识:•熟练掌握C/C++编程语言•具备数值计算的基本概念,如导数、积分、方程求解、矩阵计算等•具备线性代数、微积分基础知识的学习经历。

四、总结数值计算基础课程是计算机科学专业的入门课程之一,其理论和实践均具有重要意义。

数值分析方法课程设计

数值分析方法课程设计

数值分析方法课程设计背景介绍数值分析是一门研究求解各种数学问题的有效数值计算方法的学科,其应用广泛,如科学计算、工程设计和金融计算等领域。

在数值分析中,许多方法依赖于计算机的计算能力。

此外,数值分析还需要对数学理论和计算机科学两方面的知识有较深的理解。

本课程设计旨在通过实践,帮助学生深入了解数值分析方法及其应用,并提高学生的计算机编程能力。

课程设计目标•熟练掌握数值分析中的基本算法和方法,如插值法、数值积分等•能够将所学算法应用于实际问题,并编写可靠的程序解决问题•加深对计算机编程的理解和掌握,增强编程实践和创新能力•提高对数值分析和计算机科学交叉领域的理解课程内容第一部分:基本算法和方法1.数值微积分基本概念和原理2.插值法及其在实际中的应用3.数值积分的基本方法和理论基础4.常微分方程常用数值解法第二部分:实践应用与编程实现1.利用插值法和数值积分求解实际问题2.实现数值微积分和常微分方程的求解程序3.利用现有的数值分析软件解决实际问题,如 MATLAB 和 Python 等课程设计方案1.向学生介绍数值分析基本算法和方法,并讲解其理论基础和实际应用。

2.向学生提供一些实际问题,引导学生根据所学算法和方法进行求解。

3.给予学生一定的编程实践机会,让他们能够将所学算法实现为程序,并运用到具体的问题中。

4.通过课程作业、仿真实验等形式对学生进行考核和评价,确保学生能够有效掌握所学知识和能力。

评价标准1.学生掌握数值分析基本算法和方法的程度2.学生在实际问题中应用所学算法的能力3.学生编程实践和创新能力的水平4.学生对数值分析和计算机科学交叉领域的理解总结本课程设计旨在培养学生的数值分析和计算机编程实践,通过课程作业和编程实践等形式将理论知识与实际问题相结合,提高学生的实践应用能力。

同时,本课程设计也为学生未来的研究和工作提供了一定的基础。

数值计算课程设计报告(插值法)

数值计算课程设计报告(插值法)

数值计算方法课程设计报告课程设计名称:数值计算方法课程设计题目:插值算法年级专业:信计1302班组员姓名学号:高育坤**********王冬妮1309064044韩建1309064046李婧1309064047 ***师:***完成时间:2015年6月17日插值算法一、问题提出插值法是实用的数值方法,是函数逼近的重要方法。

在生产和科学实验中,自变量x与因变量y的函数y = f(x)的关系式有时不能直接写出表达式,而只能得到函数在若干个点的函数值或导数值。

当要求知道观测点之外的函数值时,需要估计函数值在该点的值。

如何根据观测点的值,构造一个比较简单的函数y=φ(x),使函数在观测点的值等于已知的数值或导数值,进而用简单函数y=φ(x)在点x处的值来估计未知函数y=f(x)在x点的值。

寻找这样的函数φ(x),办法是很多的。

φ(x)可以是一个代数多项式,或是三角多项式,也可以是有理分式;φ(x)可以是任意光滑(任意阶导数连续)的函数或是分段函数;函数类的不同,自然地有不同的逼近效果。

二、背景分析在许多实际问题及科学研究中,因素之间往往存在着函数关系,然而,这种关系经常很难有明显的解析表达,通常只是由观察与测试得到一些离散数值。

有时,即使给出了解析表达式,却由于表达式过于复杂,不仅使用不便,而且不易于进行计算与理论分析。

解决这类问题的方法有两种:一种是插值法插值法,另一种是一拟合法。

插值法是一种古老的数学方法,它来自生产实践,早在一千多年前,我国科学家在研究历法上就应用了线性插值与二次插值,但它的基本理论却是在微积分产生之后才逐渐完善的,其应用也日益增多,特别是在计算机软件中,许多库函数,如 ,cos,sin ex 等的计算实际上归结于它的逼近函数的计算。

逼近函数一般为只含有算术运算的简单函数,如多项式、有理分式(即多项式的商)。

在工程实际问题当中,我们也经常会碰到诸如此类的函数值计算问题。

被计算的函数有时不容易直接计算,如表达式过于复杂或者只能通过某种手段获取该函数在某些点处的函数值信息或者导数值信息等。

数值计算方法和算法课程设计

数值计算方法和算法课程设计

数值计算方法和算法课程设计一、简介数值计算方法和算法课程是计算机科学与技术专业中重要的课程之一,其内容主要包含了数值计算方法和基本算法的理论、思想、原理和应用,培养了我们在计算机运算中提高算法效率和准确度的能力。

本文档是数值计算方法和算法课程设计的撰写指南,旨在帮助大家完成课程设计的撰写,以完成课程的要求。

二、数值计算方法数值计算方法是对数值问题进行数学解法的研究。

数值计算方法涉及的问题包括:求解方程、插值和逼近、数值积分和数值微分、常微分方程、偏微分方程等。

在数值计算方法中,我们需要了解一些常见的算法,例如:二分法、牛顿迭代法、高斯-塞德尔迭代法、龙格-库塔法等。

课程设计要求学生能够对各种数值方法进行学习、比较、分析和综合使用,完成一定的数值计算问题。

三、算法设计算法设计是在具体的问题基础上,根据规则和原则选择合适的计算流程和方法,得到满足计算要求的算法过程。

计算机算法是在计算机程序设计过程中所采用的一些指导模式,其目的在于使计算机能够依据事先给定的任务说明和数据,精细地指导其运算。

算法设计需要学生具备深厚的数学功底和良好的编程能力,同时,还需要学生掌握常见的算法设计原则和技巧。

四、课程设计要求本门课程设计要求学生独立完成一个数值计算问题的解法的完整过程。

具体要求:1.选择适合的数值计算问题并设计算法实现;2.实现程序并进行测试;3.通过测试数据的分析和效果评价,进行算法设计的改进;4.撰写设计报告并提交。

五、设计报告内容设计报告应该包括以下内容:1.问题的阐述与分析,明确所需要解决的数值计算问题,并说明具体的解法;2.算法实现流程,详细说明算法中所使用的思想、原理和过程;3.程序编写内容,对程序进行详细的讲解和分析,并附上程序代码;4.程序测试过程,对测试数据和效果进行分析和说明,并展示输出结果;5.算法改进,对算法的不足之处和改进方向进行分析;6.总结,对设计过程中的感受和体会进行总结并对未来方向进行展望和思考。

数值计算方法课程设计123

数值计算方法课程设计123

数值计算方法课程设计姓名学号班级实验要求1.应用自己熟悉的算法语言编写程序,使之尽可能具有通用性。

2.上机前充分准备,复习有关算法,写出计算步骤,反复检查,调试程序。

(注:在练习本上写,不上交)3.完成计算后写出实验报告,内容包括:所用的算法语言,CPU 时间,算法步骤叙述,变量说明,程序清单,输出计算结果,结构分析和小结等。

(注:具体题目具体分析,并不是所有的题目的实验报告都包含上述内容!)4.至少需要选择5道必做题目。

其余的也可以选择,如果多选,可酌情加分!5.独立完成,如有雷同,一律判为零分!6.上机期间不允许做其他任何与课程设计无关的事情,否则被发现一次扣10分,被发现三次判为零分!上机实习题目1. 编写秦九韶算法程序,并用该程序计算多项式623)(35+-+=x x x x f 在1.3 1.2, ,1.1=x 的值。

public class Qinjiushao {public double result;public double x=-2;//定义一个未知数xpublic double[] b;public double[] c;public int i;public String abc;public void calculate(){// abc="x^5+3*x^3-2*x+6";多项式,可以截取字符串获取系数double[] a={2,0,-3,3,-4};//多项式的系数double[] b=new double[a.length];double[] c=new double[b.length];for(i=0;i<a.length;i++){if(i==0){c[i]=b[i]=a[i];}else{b[i]=b[i-1]*x+a[i];c[i]=c[i-1]*x+b[i-1]*x+a[i];}}int j=a.length-1;System.out.println("结果值为:f("+x+")="+c[a.length-2]);}public static void main(String[] agrs){Qinjiushao qjs=new Qinjiushao();qjs.calculate();//JFrame jframe=new JFrame();//jframe.setTitle("求结果");//jframe.setSize(400,400);//jframe.setVisible(true);}}2. 用选列主元高斯消去法解线性方程组⎪⎪⎩⎪⎪⎨⎧=+-=-+-=-+-=--022 0 21 34343232121x x x x x x x x x x #include<stdio.h>#include<math.h>#define N 4void 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 table[N][N+1]={{-3,-1,0,0,1},{-1,2,-1,0,0},{0,-1,2,-1},{0,0,-1,2,0}}; double A[N];int i,j,m,n;for(m=0;m<N;m++){maxij(table,m);zeros(table,m);}for(n=N-1;n>=0;n--){if(table[n][n]!=0)A[n]=solution(table,A,n);elseA[n]=0;}for(i=0;i<N;i++)printf("x%d=%g\n",i+1,A[i]);}double solution(double (*table)[N+1],double *A,int n){double sum=0,result;int p;for(p=N-1;p>n;p--)sum+=table[n][p]*A[p];result=(table[n][N]-sum)/table[n][n];return result;}void zeros(double (*table)[N+1],int m){double zeroing;int i,j;for(i=m+1;i<N;i++)if(table[i][m]!=0){zeroing=-1*table[i][m]/table[m][m];table[i][m]=0;for(j=m+1;j<=N;j++)table[i][j]+=table[m][j]*zeroing;}}void maxij(double (*table)[N+1],int m){double exchange;int i,j,line=m;for(i=m;i<N;i++)if(abs(table[line][m])<abs(table[i][m]))line=i;for(i=m;i<=N;i++){exchange=table[m][i];table[m][i]=table[line][i];table[line][i]=exchange;}}运行结果:x1=-0.266667,x2=-0.2,x3=-0.133333,x4=-0.06666673. 分别用平方根法和改进平方根法解线性方程组⎪⎩⎪⎨⎧=++=++-=+-631242321321321x x x x x x x x x平方根法解线性方程组Ax =b#include"math.h"#include"stdio.h"main(){int i,j,k;int n=3;float m,a[3][3],b[3],x[3],l[3][3],y[3];printf("input matrix numbers of a:\n");for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%f",&a[i][j]);printf("\n");printf("input numbers of b:\n");for(i=0;i<n;i++)scanf("%f",&b[i]);printf("\n");l[0][0]=sqrt(a[0][0]);for(i=1;i<n;i++){l[i][0]=a[i][0]/l[0][0];l[0][i]=l[i][0];}for(j=1;j<n;j++){m=0.0;for(k=0;k<j;k++){m+=l[j][k]*l[j][k];l[j][j]=sqrt(a[j][j]-m);}for(i=j+1;i<n;i++){m=0.0;for(k=0;k<j;k++){ m+=l[i][k]*l[j][k];l[i][j]=(a[i][j]-m)/l[j][j];l[j][i]=l[i][j];}}}y[0]=b[0]/l[0][0];for(i=1;i<n;i++){m=0.0;for(k=0;k<i;k++){m+=l[i][k]*y[k];y[i]=(b[i]-m)/l[i][i];}}x[n-1]=y[n-1]/l[n-1][n-1]; for(i=n-2;i>=0;i--){m=0.0;for(k=i+1;k<n;k++){m+=l[k][i]*x[k];x[i]=(y[i]-m)/l[i][i];}}for(i=0;i<n;i++)printf("x(%d)=%f\n",i,x[i]); }结果用C语言实现改进平方根法,程序代码如下:#include "stdlib.h"#include "stdio.h"#include "conio.h"#include "string.h"#include "math.h"#define N 100float Table(int n,float a[N][N],float b[N]){int i,j;printf("Please input the matrix A by row!\n");for(i=0;i<n;i++){printf("Row %d:",i);for(j=0;j<n;j++)scanf("%f",&a[i][j]);}printf("Please input the array b:");for(i=0;i<n;i++)scanf("%f",&b[i]);printf("\nThe matrix A and array b:\n");for(i=0;i<n;i++){for(j=0;j<n;j++)printf("%10.4f",a[i][j]);printf("%10.4f",b[i]);printf("\n");}return 0;}float decomposition(int n,float a[N][N],float l[N][N],float d[N][N]) {int i,j,k;float t[N][N],tmp1,tmp2;for(i=0;i<n;i++)for(j=0;j<n;j++){if(i!=j) d[i][j]=0;if(i<j){t[i][j]=0;l[i][j]=0;}if(i==j) l[i][j]=1;}d[0][0]=a[0][0];for(i=1;i<n;i++)for(j=0;j<i;j++){tmp1=0;for(k=0;k<j;k++)tmp1+=t[i][k]*l[j][k];t[i][j]=a[i][j]-tmp1;l[i][j]=t[i][j]/d[j][j];tmp2=0;for(k=0;k<i;k++)tmp2+=t[i][k]*l[i][k];d[i][i]=a[i][i]-tmp2;}printf("\nAfter Cholesky triangular decomposition, the matrix L:\n");for(i=0;i<n;i++)for(j=0;j<=i;j++){printf("%8.4f",l[i][j]);if(i==j) printf("\n");}printf("\nAnd the matrix D:\n");for(i=0;i<n;i++)for(j=0;j<=i;j++){if(i!=j)for(k=0;k<8;k++)printf(" ");if(i==j) printf("%8.4f\n",d[i][j]);}return 0;}float solve(int n,float l[N][N],float d[N][N],float b[N]) {int i,j,k;float y[N],x[N],tmp1,tmp2;y[0]=b[0]; for(i=1;i<n;i++){tmp1=0;for(k=0;k<i;k++)tmp1+=l[i][k]*y[k]; y[i]=b[i]-tmp1; }4.考虑n 阶三对角方程组⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧⎪⎪⎪⎪⎭⎪⎪⎪⎪⎬⎫=⎪⎪⎪⎪⎭⎪⎪⎪⎪⎬⎫⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧3443 2 1 1 2 11 2 1 1 2 x ,,300=n(1) 用选列主元高斯消去法求解,(2) 编写追赶法程序并求解,(3) 比较两种方法的计算时间和精度。

数值计算方法第三版教学设计

数值计算方法第三版教学设计

数值计算方法第三版教学设计前言数值计算方法是基础课程中的一门重要课程,对于理工科学生来说具有十分重要的意义。

本篇文档将对数值计算方法第三版的教学设计进行详细阐述,旨在帮助教师更好地开展教学工作。

教学目标本课程的教学目标包括以下几点:1.了解数值计算的基本原理及其应用领域;2.掌握数值计算方法的基本概念和原理;3.能够运用数值计算方法解决实际问题;4.培养学生分析问题、解决问题的能力。

教学内容本课程的主要内容包括以下几个方面:1.数值计算的基本概念和方法;2.插值与逼近;3.数值微积分;4.常微分方程的数值解法;5.偏微分方程的数值解法;6.随机数与随机过程。

注:本课程的教学重点将放在数值微积分和常微分方程的数值解法上。

教学方法本课程将采取以下教学方法:1.课堂讲授:教师通过讲授来呈现课程内容;2.上机实验:学生通过实验来巩固所学知识;3.课堂互动:通过课堂讨论、练习等互动方式,激发学生的学习兴趣;4.课程设计:设计小型项目,让学生运用所学知识来解决实际问题。

教学评价本课程的教学评价将采用以下方式:1.写作业:学生需要完成每个章节的作业;2.上机实验报告:学生需要针对每个实验编写实验报告;3.期末考试:期末考试将占总成绩的70%;4.课程设计:课程设计将占总成绩的30%。

教学进度本课程教学进度如下:章节教学内容教学进度1 数值计算基本概念和方法2周2 插值与逼近2周3 数值微积分3周4 常微分方程的数值解法4周5 偏微分方程的数值解法2周6 随机数与随机过程2周实验上机实验6周章节教学内容教学进度课程设计设计小型项目4周总结本篇文档详细介绍了数值计算方法第三版的教学设计,其中包括教学目标、教学内容、教学方法、教学评价以及教学进度等方面。

相信有了本文档的指导,教师们将能够更好地开展授课工作,使学生们能够真正掌握数值计算方法这门重要课程。

数值计算方法教学大纲

数值计算方法教学大纲

数值计算方法教学大纲第一部分:使用说明一、课程编号:10322016二、课程性质与特点:数值计算方法是理工科本科或大专各专业的选修课程。

本课程主要介绍计算机上常用的数值计算方法的基本原理及计算过程,包括非线性方程求根,线性方程组的直接法和迭代法,多项式插值逼近,最小二乘拟合,数值微分和数值积分等内容。

学习和掌握计算机上常用的数值计算方法已成为现代科学教育的重要内容。

三、在专业教学计划中的地位和作用:本课程为高等学校非师范专业学生的一门选修课,是为适应数学教育改革和新形势的发展而开设的一门新课程。

主要培养学生基本的数值计算思想及常用数值方法使用,强调学生的学习知识与计算机的结合能力的培养。

四、教学目的:数值计算方法是物理学的新的非常重要的分支,它与理论物理和实验物理一起构成现代物理学的整体。

本课程作为物理系本科四年级的课程是非常重要的。

通过该课程的学习,使学生掌握到计算物理学中常用的计算方法,并紧密结合物理学理论,在计算机上进行数值实验,从而培养学生通过数值计算解决物理问题的能力,增强用程序设计语言进行编程的能力,培养学生的独立工作能力。

五、学时与学分:本课程授课45学时,利用课余时间指导学生上机实验10学时,3学分,每周3学时。

六、教学方法:1、课堂讲授重点讲述数值计算的基本概念,基本方法,介绍数值计算的数学和工程应用,对重点和难点详细分析和深入讨论,讲清解决问题的思路和关键方法,并布置一定的课外作业,强化训练,加强理论与实践的结合。

2、上机编程为加深学生对课程的认识,课程包含10学时的上机实验,通过上机实验,学生自己编写程序,进行数值计算。

培养学生自主学习的能力,使学生通过实践活动掌握综合运用所学的知识独立解决实际物理、数学数值计算基本问题的能力。

3、课外作业和资料阅读将习题和讨论学习与利用参考书和资料通过自学进行主动学习及实践结合起来,培养学生自己阅读和学习的能力,调动学生的积极因素。

七、考核方式:考查课程。

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

数值计算方法课程设计学号班级实验要求1.应用自己熟悉的算法语言编写程序,使之尽可能具有通用性。

2.上机前充分准备,复习有关算法,写出计算步骤,反复检查,调试程序。

(注:在练习本上写,不上交)3.完成计算后写出实验报告,容包括:所用的算法语言,CPU时间,算法步骤叙述,变量说明,程序清单,输出计算结果,结构分析和小结等。

(注:具体题目具体分析,并不是所有的题目的实验报告都包含上述容!)4.至少需要选择5道必做题目。

其余的也可以选择,如果多选,可酌情加分!5.独立完成,如有雷同,一律判为零分!6.上机期间不允许做其他任何与课程设计无关的事情,否则被发现一次扣10分,被发现三次判为零分!上机实习题目1. 编写九韶算法程序,并用该程序计算多项式623)(35+-+=x x x x f 在1.3 1.2, ,1.1=x 的值。

public class Qinjiushao {public double result;public double x=-2;//定义一个未知数xpublic double[] b;public double[] c;public int i;public String abc;public void calculate(){// abc="x^5+3*x^3-2*x+6";多项式,可以截取字符串获取系数double[] a={2,0,-3,3,-4};//多项式的系数double[] b=new double[a.length];double[] c=new double[b.length];for(i=0;i<a.length;i++){if(i==0){c[i]=b[i]=a[i];}else{b[i]=b[i-1]*x+a[i];c[i]=c[i-1]*x+b[i-1]*x+a[i];}}int j=a.length-1;System.out.println("结果值为:f("+x+")="+c[a.length-2]);}public static void main(String[] agrs){Qinjiushao qjs=new Qinjiushao();qjs.calculate();//JFrame jframe=new JFrame();//jframe.setTitle("求结果");//jframe.setSize(400,400);//jframe.setVisible(true);}}2. 用选列主元高斯消去法解线性方程组⎪⎪⎩⎪⎪⎨⎧=+-=-+-=-+-=--022 0 21 34343232121x x x x x x x x x x #include<stdio.h>#include<math.h>#define N 4void 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 table[N][N+1]={{-3,-1,0,0,1},{-1,2,-1,0,0},{0,-1,2,-1},{0,0,-1,2,0}}; double A[N];int i,j,m,n;for(m=0;m<N;m++){maxij(table,m);zeros(table,m);}for(n=N-1;n>=0;n--){if(table[n][n]!=0)A[n]=solution(table,A,n);elseA[n]=0;}for(i=0;i<N;i++)printf("x%d=%g\n",i+1,A[i]);}double solution(double (*table)[N+1],double *A,int n){double sum=0,result;int p;for(p=N-1;p>n;p--)sum+=table[n][p]*A[p];result=(table[n][N]-sum)/table[n][n];return result;}void zeros(double (*table)[N+1],int m){double zeroing;int i,j;for(i=m+1;i<N;i++)if(table[i][m]!=0){zeroing=-1*table[i][m]/table[m][m];table[i][m]=0;for(j=m+1;j<=N;j++)table[i][j]+=table[m][j]*zeroing;}}void maxij(double (*table)[N+1],int m){double exchange;int i,j,line=m;for(i=m;i<N;i++)if(abs(table[line][m])<abs(table[i][m]))line=i;for(i=m;i<=N;i++){exchange=table[m][i];table[m][i]=table[line][i];table[line][i]=exchange;}}运行结果:x1=-0.266667,x2=-0.2,x3=-0.133333,x4=-0.06666673. 分别用平方根法和改进平方根法解线性方程组⎪⎩⎪⎨⎧=++=++-=+-631242321321321x x x x x x x x x平方根法解线性方程组Ax =b#include"math.h"#include"stdio.h"main(){int i,j,k;int n=3;float m,a[3][3],b[3],x[3],l[3][3],y[3];printf("input matrix numbers of a:\n");for(i=0;i<n;i++)for(j=0;j<n;j++)scanf("%f",&a[i][j]);printf("\n");printf("input numbers of b:\n");for(i=0;i<n;i++)scanf("%f",&b[i]);printf("\n");l[0][0]=sqrt(a[0][0]);for(i=1;i<n;i++){l[i][0]=a[i][0]/l[0][0];l[0][i]=l[i][0];}for(j=1;j<n;j++){m=0.0;for(k=0;k<j;k++){m+=l[j][k]*l[j][k];l[j][j]=sqrt(a[j][j]-m);}for(i=j+1;i<n;i++){m=0.0;for(k=0;k<j;k++){ m+=l[i][k]*l[j][k];l[i][j]=(a[i][j]-m)/l[j][j];l[j][i]=l[i][j];}}}y[0]=b[0]/l[0][0];for(i=1;i<n;i++){m=0.0;for(k=0;k<i;k++){m+=l[i][k]*y[k];y[i]=(b[i]-m)/l[i][i];}}x[n-1]=y[n-1]/l[n-1][n-1]; for(i=n-2;i>=0;i--){m=0.0;for(k=i+1;k<n;k++){m+=l[k][i]*x[k];x[i]=(y[i]-m)/l[i][i];}}for(i=0;i<n;i++)printf("x(%d)=%f\n",i,x[i]); }结果用C语言实现改进平方根法,程序代码如下:#include "stdlib.h"#include "stdio.h"#include "conio.h"#include "string.h"#include "math.h"#define N 100float Table(int n,float a[N][N],float b[N]){int i,j;printf("Please input the matrix A by row!\n");for(i=0;i<n;i++){printf("Row %d:",i);for(j=0;j<n;j++)scanf("%f",&a[i][j]);}printf("Please input the array b:");for(i=0;i<n;i++)scanf("%f",&b[i]);printf("\nThe matrix A and array b:\n");for(i=0;i<n;i++){for(j=0;j<n;j++)printf("%10.4f",a[i][j]);printf("%10.4f",b[i]);printf("\n");}return 0;}float decomposition(int n,float a[N][N],float l[N][N],float d[N][N]) {int i,j,k;float t[N][N],tmp1,tmp2;for(i=0;i<n;i++)for(j=0;j<n;j++){if(i!=j) d[i][j]=0;if(i<j){t[i][j]=0;l[i][j]=0;}if(i==j) l[i][j]=1;}d[0][0]=a[0][0];for(i=1;i<n;i++)for(j=0;j<i;j++){tmp1=0;for(k=0;k<j;k++)tmp1+=t[i][k]*l[j][k];t[i][j]=a[i][j]-tmp1;l[i][j]=t[i][j]/d[j][j];tmp2=0;for(k=0;k<i;k++)tmp2+=t[i][k]*l[i][k];d[i][i]=a[i][i]-tmp2;}printf("\nAfter Cholesky triangular decomposition, the matrix L:\n");for(i=0;i<n;i++)for(j=0;j<=i;j++){printf("%8.4f",l[i][j]);if(i==j) printf("\n");}printf("\nAnd the matrix D:\n");for(i=0;i<n;i++)for(j=0;j<=i;j++){if(i!=j)for(k=0;k<8;k++)printf(" ");if(i==j) printf("%8.4f\n",d[i][j]);}return 0;}float solve(int n,float l[N][N],float d[N][N],float b[N]){int i,j,k;float y[N],x[N],tmp1,tmp2;y[0]=b[0];for(i=1;i<n;i++){tmp1=0;for(k=0;k<i;k++)tmp1+=l[i][k]*y[k]; y[i]=b[i]-tmp1;}4.考虑n 阶三对角方程组⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧⎪⎪⎪⎪⎭⎪⎪⎪⎪⎬⎫=⎪⎪⎪⎪⎭⎪⎪⎪⎪⎬⎫⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧3443 2 1 1 2 11 2 1 1 2 x ,,300=n (1) 用选列主元高斯消去法求解,(2) 编写追赶法程序并求解,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)*sizeof(float));}void get_num(){int i;printf("请输入系数a[2]-a[%d]\n",n);for(i=2;i<=n;i++)scanf("%f",&a[i]);a[1]=0;printf("请输入系数b[1]-b[%d]\n",n);for(i=1;i<=n;i++)scanf("%f",&b[i]);printf("请输入系数c[1]-c[%d]\n",n-1);for(i=1;i<=n-1;i++)scanf("%f",&c[i]);printf("请输入系数d[1]-d[%d]\n",n);for(i=1;i<=n;i++)scanf("%f",&d[i]);}void work()int i=0,k;float t;a[1]=c[n]=0;p[1]=d[1]/b[1];q[1]=c[1]/b[1];//初始化for(k=2;k<=n;k++){t=b[k]-a[k]*q[k-1];p[k]=(d[k]-a[k]*p[k-1])/t;q[k]=c[k]/t;}//对原三对角方程组进行顺序消元,且每步都吧主元素系数化为1x[n]=p[n];for(k=n-1;k>=1;k--)x[k]=p[k]-q[k]*x[k+1];//回代求解}int main(){//freopen("in.txt","r",stdin);int i=0;print1();printf("请输入方程阶数\n");scanf("%d",&n);get_array();(3) 比较两种方法的计算时间和精度。

相关文档
最新文档