数值计算方法课程设计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、课外作业和资料阅读将习题和讨论学习与利用参考书和资料通过自学进行主动学习及实践结合起来,培养学生自己阅读和学习的能力,调动学生的积极因素。

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

《数值计算方法》课程设计报告-15页精选文档

《数值计算方法》课程设计报告-15页精选文档

《数据分析方法》课 程 实 验 报 告1.实验内容(1)掌握回归分析的思想和计算步骤;(2) 编写程序完成回归分析的计算,包括后续的显著性检验、残差分析、Box-Cox 变换等内容。

2. 模型建立与求解(数据结构与算法描述)3.实验数据与实验结果解:根据所建立的模型在MATLAB 中输入程序(程序见附录)得到以下结果: (1)回归方程为:123.45260.49600.0092Y X X ∧=++说明该化妆品的消量和该城市人群收入情况关系不大,轻微影响,与使用该化妆品的人数有关。

2σ的无偏估计:2 4.7403σ= (2)方差分析表如下表: 方差来源自由度平方和 均方 F 值p回归(R ) 2 538452692256795 2.28误差(E ) 12 56.883 4.703 总和(T ) 1453902从分析表中可以看出:F 值远大于p 的值。

所以回归关系显著。

复相关20.9989R =,所以回归效果显著。

解:根据所建立的模型,在MATLAB 中输入程序(程序见附录)得到如下结果: (1)回归方程为:1257.9877 4.70820.3393Y X X ∧=-++在MTLAB 中计算学生化残差(见程序清单二),所得到的学生化残差r 的值由残差可知得到的r 的值在(-1,1)的概率为0.645,在(-1.5,1.5)的概率为0.871,在(-2,2)之间的概率为0.968.而服从正态分布的随机变量取值在(-1,1)之间的概率为0.68,在(-1.5,1.5)之间的概率为0.87,在(-2.2)之间的概率为0.95,所以相差较大,所以残差分析不合理,需要对数据变换。

取λ=0.6进行Box-Cox 变换()ln ,01,0Y Y Y λλλλλ=⎧⎪=⎨-≠⎪⎩ 在MATLAB 中输入程序(见程序代码清单二)取0.6λ=,所以得到r 的值(r 的值见附录二)其值在(-1,1)之间的个数大约为20/31=0.65,大致符合正态分布,所以重新拟合为:0-11.7736β=1 1.1478β=20.0969β=拟合函数为:12-11.7736 1.14780.0969Y X X ∧=++ 通过F 值,R 值可以检验到,回归效果显著(3)某医院为了了解病人对医院工作的满意程度Y 和病人的年龄1X ,病情的严重程度2X 和病人的忧虑程度3X 之间的关系,随机调查了该医院的23位病人,得数据如下表:(1) 拟合线性回归模型0112233Y X X X ββββε=++++,通过残差分析与考察模型及有关误差分布正态性假定的合理性;(2) 若(1)中模型合理,分别在2()()i R p α,()p ii C ,()p iii PRESS 准则下选择最优回归方程,各准则下的选择结果是否一致?(3) 对0.10E D αα==,用逐步回归法选择最优回归方程,其结果和(2)中的数否一致?(4) 对选择的最优回归方程作残差分析,与(1)中的相应结果比较,有何变化? 习题2.6解:(1)回归参数的β的最小二乘估计为:1()T T X X X Y β∧-=。

最小二乘法的数据拟合

最小二乘法的数据拟合

四川理工学院《数值计算方法》课程设计题目:用最小二乘法实现数据拟合专业:数学与应用数学班级:2013级2班姓名:李宁、李鑫、骆丹、冯莉娟目录:一、摘要............................ 错误!未定义书签。

二、应用计算方法的基本原理.......... 错误!未定义书签。

1.最小二乘法线性拟合............... 错误!未定义书签。

1.1算法描述........................ 错误!未定义书签。

1.2误差估计 (3)2.最小二乘法非线性拟合 (3)三、例题的计算结果 (4)1. 最小二乘法线性拟合 (4)2.最小二乘法非线性拟合 (5)四、总结及心得体会 (7)五、参考文献........................ 错误!未定义书签。

六、附录程序 (8)一、摘要本文主要依据最小二乘法对任意一组数据进行线性拟合和非线性拟合。

因为在实际生活中,我们在工厂、车间、工作室等地方将遇见很多数据,这些数据可能有关系,及线性关系,正比关系,一些简单和复杂的关系。

但是更多的数据是杂乱无章的。

对于这些无规律的数据,我们得出对我们有利的结论。

然而分析数据有是我们这个时代发展的必不可少的研究,所以只有将数据转化成为我们需要的形式,才能进一步分析。

将数据转化为必要的形式的一种重要的方式则是最小二乘法中的数据拟合。

但是在拟合的时候,有些非线性的数据需要我们进行变量代换。

在本文中就举出了一个非线性拟合的例子,通过此例子来演示如何把非线性拟合转化为线性拟合求解。

本文中还有重要的模块是用matlab编写程序,在使用c语言调用子程序时,我们只需要建立大M文件,而我们所工作的区间就是主程序。

我们可以初步绘制出散点图,观察散点图的趋势来确定用什么拟合。

用最小二乘法拟合数据大概分为两类:线性拟合和非线性拟合。

一般先测量数据在直角坐标平面上描出散点图,看一看散点同哪类曲线图形接近,然后选用相近的线性或非线性的曲线去拟合数据,非线性的曲线再通过适当的变量替换转化为线性拟合问题,进而用matlab编写程序求出拟合函数表达式。

数值计算方法课程设计讲解

数值计算方法课程设计讲解

重庆邮电大学数理学院《数值计算方法》课程设计题目:_________小行星轨道问题____________组员:___1191301、徐鑫、2013213051__________ _ 1191301、闵子剑、2013213019__________指导教师:_________尹龙军_________________完成日期:______2014年12月28日_____________重庆邮电大学数理学院制目录一.课程设计目的 (3)二.课程设计题目 (3)三.理论知识和算法 (3)四.计算过程及计算结果截屏 (6)五.求解结果的分析和结论 (9)六.课程设计的心得与体会 (9)附录 (10)一、课程设计目的1)掌握线性方程组的求解。

2)掌握列主元、全主元高斯-约当消元法求方程的解。

3)利用编程实现列主元、全主元高斯-约当消元法的求解。

4)会使用Matlab 软件。

5)比较并分析这两种方法的区别。

二、课程设计及内容(题目)一个天文学家要确定一颗小行星绕太阳运行的轨道,他在轨道平面内建立以太阳为原点的直角坐标系,在五个不同的点对小行星作了五次观察,测得轨道上五个点的坐标数据(单位:万公里)如下表所由开普勒第一定律知,小行星轨道为一椭圆,椭圆的一般方程可表示为:012225423221=+++++y a x a y a xy a x a现需要建立椭圆的方程以供研究。

(1)分别将五个点的数据代入椭圆一般方程中,写出五个待定系数满足的等式,整理后写出线性方程组AX = b以及方程组的系数矩阵和右端项b ;(2)用列主元、全主元高斯-约当消元法求方程的解。

比较列主元、全主元高斯-约当消元法求方程的解优缺点及分析其误差。

三、问题的分析(含涉及的理论知识、算法等)1、在(1)问中,由Kepler (开普勒)第一定律知,小行星轨道为一椭圆.现需要建立椭圆的方程以供研究(注:椭圆的一般方程可表示为012225423221=+++++y a x a y a xy a x a .问题分析与建立模型 天文学家确定小行星运动的轨道时,他的依据是轨道上五个点的坐标数据:(x 1, y 1), (x 2, y 2), (x 3, y 3), (x 4, y 4), (x 5, y 5). 由Kepler 第一定律知,小行星轨道为一椭圆.而椭圆属于二次曲线,二次曲线的一般方程为012225423221=+++++y a x a y a xy a x a .为了确定方程中的五个待定系数,将五个点的坐标分别代入上面的方程,得⎪⎪⎪⎩⎪⎪⎪⎨⎧-=++++-=++++-=++++-=++++-=++++.1222122212221222122255542535522514544243442241353423333223125242232222211514213112211y a x a y a y x a x a ,y a x a y a y x a x a ,y a x a y a y x a x a ,y a x a y a y x a x a ,y a x a y a y x a x a这是一个包含五个未知数的线性方程组,写成矩阵⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡-----=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡11111222222222222222543215525552544244424332333232222222211211121a a a a a y x y y x x y x y y x x y x y y x x y x y y x x y x y y x x 再利用Matlab 计算出系数矩阵A 。

数值计算方法课程设计(C语言)

数值计算方法课程设计(C语言)

数值计算方法课程设计(C语言)数值计算方法课程设计姓名学号成绩课程实际报告实验一:秦九韶算法题目用选列主元高斯消去法解线性方程组⎪⎪⎩⎪⎪⎨⎧=+-=-+-=-+-=--02 02 0 21 34343232121x x x x x x x x x x算法语言:利用c 语言的知识编写该算法程序算法步骤叙述:秦九昭算法的基思路是v[0]=a[0]*x+a[1] v[i]=v[i-1]*x+a[i+1];利用秦九昭算法计算多项式函数。

程序清单:#include <stdio .h >void main(){float a[5],x,sum;int i;printf("presase input the value of x=");scanf("%f",&x);for (i =5;i >=0;i --){printf("please input the value of a%d=",i);scanf("%f",&a[i]);}sum=a[5];for(i=5;i>=1;i--){sum=sum*x+a[i-1];}printf("f(x)=%f/n",sum); }输出结果计算:实验总结:通过运用C 语言,解决了秦九韶算法手写的复杂。

为以后的雪地打下基础。

实验二:用选列主元高斯消去法解线性方程组题目用选列主元高斯消去法解线性方程组⎪⎪⎩⎪⎪⎨⎧=+-=-+-=-+-=--02 02 0 21 34343232121x x x x x x x x x x算法步骤叙述第一步消元——在增广矩阵(A,b )第一列中找到绝对值最大的元素,将其所在行与第一行交换,再对(A,b )做初等行变换使原方程组的第一列元素除了第一行的全变为0;第二步消元——在增广矩阵(A,b )中第二列中(从第二行开始)找到绝对值最大的元素,将其所在行与第二行交换,再对(A,b )做初等行变换使原方程组的第二列元素除了第一和第二行的全变为0;第三步消元——在增广矩阵(A,b )中第三列中(从第三行开始)找到绝对值最大的元素,将其所在行与第三行交换,再对(A,b )做初等行变换使原方程组的第三列第四行元素为0;第四,按x4-x3-x2-x1的顺序回代求解出方程组的解,x[n]=b[n]/a[n][n],x[i]=(b[i]-Σa[i][j]x[j])/a[i][i],i=n-1,…,2,1 程序清单:#include<iostream>#include<math>#define N 4static double A[N][N] = {-3,-1,0,0,-1,2,-1,0,0,-1,2,-1,0,0,-1,2};static double B[N]={1,0,0,0};static double X[N];int i,j,k;void main(){for(k = 0; k < N-1 ;k++){int index = k;for(i = k; i< N ;i++){if(fabs(A[index][k]) < fabs(A[i][k])){index = i;}}double temp;for( i = k ; i < N ;i++ ){temp = A[index][i];A[index][i] = A[k][i];A[k][i] = temp;}temp = B[index];B[index] = B[k];B[k] = temp;for(i = k+1; i<N; i++){double T = A[i][k]/A[k][k];B[i] = B[i] - T * B[k];for ( j = k+1 ; j < N ; j++ ){A[i][j] = A[i][j] - T * A[k][j];}}}X[N-1] = B[N-1]/A[N-1][N-1];for (i = N-2; i >=0 ; i--){double Temp = 0;for (int j = i+1; j<N ;j++)Temp = Temp + A[i][j] * X[j];X[i] = (B[i] - Temp) /A[i][i];}cout << "线性方程组的解(X1,X2,X3......Xn )为:"<<endl;for( i = 0; i < N ;i++){cout << X[i] <<" ";}} 实验总结:通过c++语言的编写过程掌握高斯消元法及选列主元元素的技术,掌握了简单的c++程序编辑语言编写算法程序实验五:二分法与牛顿法题目用二分法和Newton 迭代法求下列方程的正根:要求结果的误差限为6105.0-⨯,05.01)1ln(22=---+-x x x x x1.二分法算法语言:C 语言算法思路:算法思路先给定区间[a,b],要求f(a)与f(b)是异号,保证区间内与x 轴有交点,求x=(a+b)/2,求f(x),检查f(x)与f(a)是否同号,如果是同号,把x 当成新的a ,否则把x 当成新的b ,得到新的区间,重复求a 和b 的中点的值,判断与f(a)是否同号,不断循环下去,直到达到精度为止。

数值计算原理课程设计

数值计算原理课程设计

数值计算原理课程设计一、课程设计目标本次课程设计主要目标是巩固和提高学生在数值计算原理方面的基础,让学生能够熟练掌握一些常见的数值计算方法,并能够通过编写代码来完成相关计算任务。

课程设计的重点在于让学生通过实践来加深对数值计算方法的理解和掌握。

二、课程设计内容本次课程设计内容包括以下几个部分:1. 插值法插值法是一种常见的数值计算方法,它的作用是根据给定的数据点,推导出通过这些数据点的函数的近似解。

本次课程设计中,学生需要实现拉格朗日插值法和牛顿插值法,并通过编写代码来完成对一组数据点的插值计算。

2. 数值积分法数值积分法主要是用来求解复杂函数的积分问题,通过将函数划分成多个小区间,然后对这些小区间进行近似计算,最终得到整个函数的积分值。

本次课程设计中,学生需要实现梯形积分法和辛普森积分法,并通过编写代码来完成对一组函数的积分计算。

3. 方程求根法方程求根法主要是用来求解方程的根,其基本思想是通过迭代逼近,不断逼近方程的根。

本次课程设计中,学生需要实现牛顿迭代法和二分法,并通过编写代码来完成对一个方程的根的求解。

4. 常微分方程数值解法常微分方程数值解法主要是用来求解一类常见的微分方程问题。

通过将微分方程转化成离散的形式,然后通过数值计算方法得到其近似解。

本次课程设计中,学生需要实现欧拉法和龙格库塔法,并通过编写代码来完成对一个常微分方程的数值解计算。

三、课程设计流程具体课程设计流程如下:1. 熟悉数值计算原理基础知识在课程设计开始前,教师应该通过一些课堂讲解,让学生熟悉插值法、数值积分法、方程求根法和常微分方程数值解法等相关知识。

2. 完成课程设计报告学生需要根据要求,完成对插值法、数值积分法、方程求根法和常微分方程数值解法的理论讲解以及实现过程和代码展示的课程设计报告。

3. 完成代码实现学生需要根据报告的要求,通过编写代码,实现插值法、数值积分法、方程求根法和常微分方程数值解法的计算任务。

4. 提交课程设计报告和代码学生需要按照要求,将课程设计报告和代码提交给教师进行评审和点评。

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

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

数值计算方法第二版课程设计一、需求分析本次课程设计主要涉及以下内容:•迭代法求解方程组•插值和逼近•数值微积分在实现上述内容的过程中,需要掌握以下技能:•Python编程基础•矩阵运算基础•熟悉常用的数值计算库,如numpy等二、迭代法求解方程组对于一般的非线性方程组,不存在通式解,因此需要借助迭代法求解。

常用的迭代法有以下两种:1. 不动点迭代法对于方程组$$ \\begin{cases} x_1=f_1(x_1,x_2,\\cdots,x_n)\\\\x_2=f_2(x_1,x_2,\\cdots,x_n)\\\\ \\quad \\quad\\cdots \\\\x_n=f_n(x_1,x_2,\\cdots,x_n) \\end{cases} $$其中,每个x i的迭代公式为$$x_i^{(k+1)}=f_i(x_1^{(k)},x_2^{(k)},\\cdots,x_n^{(k)}),i=1,2,\\cdo ts,n$$我们可以将其改写成形如下面的形式$$ \\begin{cases} x_1=\\varphi_1(x_1,x_2,\\cdots,x_n)\\\\x_2=\\varphi_2(x_1,x_2,\\cdots,x_n)\\\\ \\quad \\quad\\cdots \\\\ x_n=\\varphi_n(x_1,x_2,\\cdots,x_n) \\end{cases} $$其中,每个x i的迭代公式为$$x_i^{(k+1)}=\\varphi_i(x_1^{(k)},x_2^{(k)},\\cdots,x_n^{(k)}),i=1, 2,\\cdots,n$$如果$\\varphi(x)$在某个点的导数小于1,则可以保证以这个点为初值迭代,最终一定会收敛于解。

不动点迭代法最大的优点在于,其收敛速度较快。

2. 牛顿迭代法牛顿迭代法是一种使用一阶或二阶泰勒展开的迭代方法,其思想在于通过不断迭代,将一个非线性方程组转化为一个线性方程组。

数值计算方法与算法第二版课程设计

数值计算方法与算法第二版课程设计

数值计算方法与算法第二版课程设计1. 课程设计背景数值计算方法与算法是计算数学的重要分支之一,通过对各种数学问题进行数值计算,可以得到更精确的数值结果。

因此,数值计算方法与算法成为了计算机科学与技术、数学等专业的基础必修课程。

本次课程设计旨在通过实践操作,加深对数值计算方法与算法知识的理解与掌握。

2. 课程设计内容本次课程设计主要包括以下内容:2.1 程序设计编写一个计算机程序,实现以下数值计算方法与算法:•雅各比迭代法求线性方程组的解;•牛顿插值法求函数插值;•梯形公式求定积分;•拉格朗日插值法求函数插值;•龙格-库塔法求一阶常微分方程组的初值问题。

每种方法需要在程序中实现,并通过样例验证其正确性。

2.2 实验报告根据程序设计过程及实验结果编写实验报告。

实验报告需要包括以下内容:2.2.1 雅各比迭代法•雅各比迭代法的原理及求解步骤;•在程序中如何实现雅各比迭代法;•使用样例验证的结果及分析。

2.2.2 牛顿插值法•牛顿插值法的原理及求解步骤;•在程序中如何实现牛顿插值法;•使用样例验证的结果及分析。

2.2.3 梯形公式•梯形公式的原理及求解步骤;•在程序中如何实现梯形公式;•使用样例验证的结果及分析。

2.2.4 拉格朗日插值法•拉格朗日插值法的原理及求解步骤;•在程序中如何实现拉格朗日插值法;•使用样例验证的结果及分析。

2.2.5 龙格-库塔法•龙格-库塔法的原理及求解步骤;•在程序中如何实现龙格-库塔法;•使用样例验证的结果及分析。

2.3 实验总结在实验报告的最后进行总结,主要包括以下内容:•通过本次课程设计,你对数值计算方法与算法有哪些新的认识和理解;•你在程序设计及实验过程中遇到的困难和解决方案;•你认为还需要改进的地方。

3. 课程设计要求•本次课程设计属于个人作业,每个同学需要独立完成;•在规定的时间内提交代码及实验报告(提交时间由任课老师具体安排);•代码需要在标准编程环境下完成(例如Visual Studio、Code::Blocks等),且代码中要有相应的注释;•实验报告需要使用LaTeX编写,并且需要提交LaTeX源文件及PDF文件两份。

数字计算教案课程设计与计算技巧

数字计算教案课程设计与计算技巧

数字计算教案课程设计与计算技巧1.引言数字计算是现代社会中不可或缺的技能之一,它对个人和社会的发展都起着重要作用。

为了提高学生的数字计算能力,我们需要设计一个教案,旨在教授学生数字计算技巧并帮助他们掌握有效的计算方法。

本文将探讨数字计算教案的设计以及一些重要的计算技巧。

2.教案设计2.1 教学目标- 培养学生的数字计算技巧和运算思维能力。

- 帮助学生掌握基本的数值计算方法和技巧。

- 提升学生在实际生活和学习中的计算能力。

2.2 教学内容- 四则运算的基本概念和技巧。

- 大数的精确计算方法。

- 分数和小数的计算技巧。

- 百分数的计算和应用。

2.3 教学方法- 结合实例进行讲解,激发学生对数字计算的兴趣。

- 提供实际问题和练习题,锻炼学生的计算能力。

- 引导学生通过思考和合作完成计算任务。

3.计算技巧3.1 四则运算四则运算是数字计算的基础,学生需要掌握加法、减法、乘法和除法的运算规则和方法。

在教学中可以通过练习题和实际应用来加深学生的印象和理解,例如提供购物清单,让学生计算购买商品的总价。

3.2 大数计算大数计算是对超过普通计算器显示范围的数字进行准确计算的技巧。

学生需要学会如何对大数进行分段计算,并注意精确保留有效数字。

可以设计一些实例让学生进行大数计算练习,例如计算地球到月亮的距离和太阳到地球的距离。

3.3 分数和小数的计算分数和小数是数字计算中常见的数值形式,学生需要熟练掌握它们的转化和计算方法。

引入实际案例,如食谱上的配方或购物时的打折折扣等,可以帮助学生理解和应用分数和小数的计算。

3.4 百分数的计算和应用百分数在实际生活中广泛应用于折扣、利率、增长率等概念。

学生需要学会计算百分数的加减乘除,以及如何将百分数转换为小数和分数。

通过实际问题的演示,可以提高学生对百分数的理解和应用能力。

4.教学评估为了检验学生对数字计算技巧的掌握情况,可以设计一些考核活动,如小测验或实际应用任务。

通过这些评估活动,可以评价学生的计算能力和解决问题的能力,并根据评估结果调整教学策略和方法。

数值方法C++描述课程设计

数值方法C++描述课程设计

数值方法C++描述课程设计一、课程设计简介本次课程设计是一次数值方法的实践课程,旨在让学生深入了解数值方法在实际运用中的应用,同时提高学生的编程能力。

本次课程设计采用C++语言实现,要求学生掌握C++编程语言的基本语法和常用的数值计算库。

二、课程设计要求1.设计一个计算器,实现一些常用的数学运算,如加、减、乘、除、乘方、开方、三角函数等。

2.实现一些常用的数值计算方法,如线性方程组求解、矩阵运算、数据插值和函数拟合等。

3.设计一个简单的求解微分方程的程序,观察数值解和精确解之间的误差。

三、课程设计基本知识点为了帮助学生更好地完成课程设计,本文将简单介绍一些课程设计需要涉及的基本知识点。

1. C++语言基础C++是一门面向对象的编程语言,其具有高效、灵活、可移植性强、功能强大等特点。

在本次课程设计中,学生需要掌握C++中的基本语法、面向对象编程、常用的数据结构和算法等知识。

2. 数值计算库为了方便实现数值计算,C++中有许多可供选择的数值计算库,如GSL、Boost 和Eigen等。

学生可以根据自己的需求选择相应的库进行学习和使用。

3. 数值计算方法数值方法是用数值计算的方法来解决实际问题的一类方法。

在本次课程设计中,主要涉及到线性方程组求解、矩阵运算、数据插值和函数拟合等数值计算方法。

学生需要掌握这些方法的原理和实现方式,并根据具体的题目要求进行实现。

4. 求解微分方程微分方程是一个重要的数学分支,它描述了自然界中许多现象的变化规律。

在本次课程设计中,学生需要学习基本的求解微分方程的方法,并根据具体的题目求解微分方程,并观察数值解和精确解之间的误差。

四、课程设计实现过程1. 设计一个计算器设计一个计算器,实现一些常用的数学运算,如加、减、乘、除、乘方、开方、三角函数等。

这个计算器可以接受用户输入的表达式,并输出结果。

在实现这个计算器的过程中,可以使用C++标准库中的头文件中的数学函数,或者使用其他数值计算库中的相关函数。

  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) 比较两种方法的计算时间和精度。

相关文档
最新文档