数学实验上机实验报告
- 格式:pdf
- 大小:850.99 KB
- 文档页数:24
数值分析上机实习报告学号:姓名:专业:联系电话:任课教师:序 (3)一、必做题 (4)1、问题一 (4)1.1 问题重述 (4)1.2 实验方法介绍 (4)1.3 实验结果 (5)2、问题二 (7)2.1 问题重述 (7)2.2 实验原理 (7)雅各比算法:将系数矩阵A分解为:A=L+U+D,则推到的最后迭代公式为: (8)2.3 实验结果 (8)二、选做题 (10)3、问题三 (10)3.1 问题重述 (10)3.2 实验原理 (10)3.3 实验结果 (11)总结 (11)序伴随着计算机技术的飞速发展,所有的学科都走向定量化和准确化,从而产生了一系列的计算性的学科分支,而数值计算方法就是解决计算问题的桥梁和工具。
数值计算方法,是一种研究并解决数学问题的数值近似解方法,是在计算机上使用的解数学问题的方法。
为了提高计算能力,需要结合计算能力与计算效率,因此,用来解决数值计算的软件因为高效率的计算凸显的十分重要。
数值方法是用来解决数值问题的计算公式,而数值方法的有效性需要根据其方法本身的好坏以及数值本身的好坏来综合判断。
数值计算方法计算的结果大多数都是近似值,但是理论的严密性又要求我们不仅要掌握将基本的算法,还要了解必要的误差分析,以验证计算结果的可靠性。
数值计算一般涉及的计算对象是微积分,线性代数,常微分方程中的数学问题,从而对应解决实际中的工程技术问题。
在借助MA TLAB、JA V A、C++ 和VB软件解决数学模型求解过程中,可以极大的提高计算效率。
本实验采用的是MATLAB软件来解决数值计算问题。
MA TLAB是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境,其对解决矩阵运算、绘制函数/数据图像等有非常高的效率。
本文采用MATLAB对多项式拟合、雅雅格比法与高斯-赛德尔迭代法求解方程组迭代求解,对Runge-Kutta 4阶算法进行编程,并通过实例求解验证了其可行性,使用不同方法对计算进行比较,得出不同方法的收敛性与迭代次数的多少,比较各种方法的精确度和解的收敛速度。
离散数学上机实验报告————————————————————————————————作者:————————————————————————————————日期:ﻩ《离散数学》实验报告姓名:学号:班级:ﻬ实验一连结词逻辑运算一.实验目的实现二元合取、析取、蕴涵和等价表达式的计算。
熟悉连接词逻辑运算规则,利用程序语言实现逻辑这几种逻辑运算。
二.实验内容从键盘输入两个命题变元P和Q的真值,求它们的合取、析取、蕴涵和等价四种运算的真值。
要求对输入内容进行分析,如果不符合0、1条件需要重新输入,程序有良好的输入输出界面。
三.实验环境使用Microsoft Visual C++6.0为编程软件,采用称C/C++语言为编程语言实现。
四.实验过程1.算法分析:合取:p,q都为1的时候为1,其他为0析取:p,q都为0的时候为0,其他为1蕴含:p为1,q为0时为0,其他为1等价:p,q同真同假2.程序代码:#include<stdio.h>intmain(){ﻩint P,Q,a,b,c,d,p,q;printf(" P的值");for(P=0;P<2;P++)ﻩ{ﻩfor(Q=0;Q<2;Q++)ﻩﻩprintf("\t%d",P);ﻩ}printf("\n Q的值");for(P=0;P<2;P++)ﻩ{ﻩﻩfor(Q=0;Q<2;Q++)ﻩprintf("\t%d",Q);ﻩ}printf("\n 非P的值");for(P=0;P<2;P++){ﻩfor(Q=0;Q<2;Q++)ﻩ{ﻩﻩif(P==0)/*判断非P的值*/ﻩﻩﻩp=1;ﻩﻩelseﻩﻩp=0;ﻩﻩﻩprintf("\t%d",p);ﻩ}ﻩ}ﻩprintf("\n 非Q的值");ﻩfor(P=0;P<2;P++)ﻩ{ﻩfor(Q=0;Q<2;Q++)ﻩﻩ{ﻩﻩif(Q==1)/*判断非Q的值*/ﻩﻩﻩq=0;ﻩelseﻩﻩq=1;ﻩprintf("\t%d",q);}ﻩ}ﻩprintf("\n P与Q的值");for(P=0;P<2;P++)ﻩ{ﻩfor(Q=0;Q<2;Q++)ﻩ{ﻩﻩﻩif(Q==0||P==0)/*判断P与Q的值*/ﻩa=0;ﻩﻩelseﻩﻩa=1;ﻩprintf("\t%d",a);ﻩ}ﻩ}ﻩprintf("\n P或Q的值");ﻩfor(P=0;P<2;P++)ﻩ{for(Q=0;Q<2;Q++)ﻩﻩ{ﻩif(Q==1||P==1)/*判断P或Q的值*/ ﻩﻩﻩb=1;ﻩelseﻩﻩb=0;ﻩprintf("\t%d",b);}ﻩ}ﻩprintf("\nP蕴含Q的值");ﻩfor(P=0;P<2;P++)ﻩ{ﻩfor(Q=0;Q<2;Q++)ﻩﻩ{ﻩﻩif(P==1&&Q==0)/*判断P蕴含Q的值*/ﻩﻩc=0;ﻩﻩelseﻩc=1;printf("\t%d",c);}}printf("\nP等价Q的值");for(P=0;P<2;P++)ﻩ{ﻩﻩfor(Q=0;Q<2;Q++)ﻩ{ﻩﻩif(P==Q)/*判断P等价Q的值*/ ﻩd=1;ﻩﻩelseﻩﻩd=0;ﻩﻩprintf("\t%d",d);}ﻩ}printf("\n");return 0;}3.实验数据及结果分析:实验二关系的复合运算及逆运算一.实验目的熟悉关系的复合运算和逆运算,编程实现关系复合运算和逆运算算法。
数值分析第一次上机练习实验报告一、实验目的本次实验旨在通过上机练习,加深对数值分析方法的理解,并掌握实际应用中的数值计算方法。
二、实验内容1. 数值计算的基本概念和方法在本次实验中,我们首先回顾了数值计算的基本概念和方法。
数值计算是一种通过计算机进行数值近似的方法,其包括近似解的计算、误差分析和稳定性分析等内容。
2. 方程求解的数值方法接下来,我们学习了方程求解的数值方法。
方程求解是数值分析中非常重要的一部分,其目的是找到方程的实数或复数解。
我们学习了二分法、牛顿法和割线法等常用的数值求解方法,并对它们的原理和步骤进行了理论学习。
3. 插值和拟合插值和拟合是数值分析中常用的数值逼近方法。
在本次实验中,我们学习了插值和拟合的基本原理,并介绍了常见的插值方法,如拉格朗日插值和牛顿插值。
我们还学习了最小二乘拟合方法,如线性拟合和多项式拟合方法。
4. 数值积分和数值微分数值积分和数值微分是数值分析中的两个重要内容。
在本次实验中,我们学习了数值积分和数值微分的基本原理,并介绍了常用的数值积分方法,如梯形法和辛卜生公式。
我们还学习了数值微分的数值方法,如差商法和牛顿插值法。
5. 常微分方程的数值解法常微分方程是物理和工程问题中常见的数学模型,在本次实验中,我们学习了常微分方程的数值解法,包括欧拉法和四阶龙格-库塔法。
我们学习了这些方法的步骤和原理,并通过具体的实例进行了演示。
三、实验结果及分析通过本次实验,我们深入理解了数值分析的基本原理和方法。
我们通过实际操作,掌握了方程求解、插值和拟合、数值积分和数值微分以及常微分方程的数值解法等数值计算方法。
实验结果表明,在使用数值计算方法时,我们要注意误差的控制和结果的稳定性。
根据实验结果,我们可以对计算结果进行误差分析,并选择适当的数值方法和参数来提高计算的精度和稳定性。
此外,在实际应用中,我们还需要根据具体问题的特点和条件选择合适的数值方法和算法。
四、实验总结通过本次实验,我们对数值分析的基本原理和方法有了更加深入的了解。
实验题目:线性代数求解方程组一、实验目的1. 理解线性代数中方程组的求解方法。
2. 掌握利用计算机求解线性方程组的算法。
3. 熟悉数学软件(如MATLAB、Python等)在数学问题中的应用。
二、实验内容本次实验主要利用数学软件求解线性方程组。
线性方程组是线性代数中的一个基本问题,其求解方法有很多种,如高斯消元法、矩阵求逆法等。
本实验以高斯消元法为例,利用MATLAB软件求解线性方程组。
三、实验步骤1. 编写高斯消元法算法程序。
2. 输入方程组的系数矩阵和常数项。
3. 调用程序求解方程组。
4. 输出解向量。
四、实验代码及分析1. 高斯消元法算法程序```matlabfunction x = gaussElimination(A, b)[n, m] = size(A);assert(n == m, 'The matrix A must be square.');assert(n == length(b), 'The length of b must be equal to the number of rows in A.');% 初始化解向量x = zeros(n, 1);% 高斯消元for i = 1:n-1% 寻找最大元素[~, maxIdx] = max(abs(A(i:n, i)));maxIdx = maxIdx + i - 1;% 交换行A([i, maxIdx], :) = A([maxIdx, i], :);b([i, maxIdx]) = b([maxIdx, i]);% 消元for j = i+1:nfactor = A(j, i) / A(i, i);A(j, i:n) = A(j, i:n) - factor A(i, i:n); b(j) = b(j) - factor b(i);endend% 回代求解for i = n:-1:1x(i) = (b(i) - A(i, i+1:n) x(i+1:n)) / A(i, i); endend```2. 输入方程组的系数矩阵和常数项```matlabA = [2, 1, -1; 1, 2, 1; -1, 1, 2];b = [8; 5; 2];```3. 调用程序求解方程组```matlabx = gaussElimination(A, b);```4. 输出解向量```matlabdisp('解向量为:');disp(x);```五、实验结果与分析实验结果:```解向量为:2-13```实验分析:通过高斯消元法,我们成功求解了给定的线性方程组。
攀枝花学院实验报告实验课程:Visual C#.NET程序设计教程实验项目:上机实验5 实验日期:系:数计学院成绩:一、实验目的1、区分静态类与非静态类,掌握静态字段、静态方法和静态构造函数的定义方法。
2、理解类的继承性与多态性,掌握其应用方法。
3、理解抽象类、接口的概念,掌握抽象类与接口的定义及使用方法。
4、理解分部类和命名空间的概念,掌握分部类和命名空间的使用方法。
二、实验要求1.熟悉Visual 的基本操作方法。
2.认真阅读本章相关内容,尤其是案例。
3.实验前进行程序设计,完成源程序的编写任务。
4.反复操作,直到不需要参考教材、能熟练操作为止。
三、实验步骤1、设计一个Windows应用程序,在该程序中首先构造一个学生基本类,再分别构造小学生、中学生、大学生等派生类,当输入相关数据,单击不同的按钮(小学生、中学生、大学生)将分别创建不同的学生对象,并输入当前的学生总人数、该学生的姓名、学生类型和平均成绩。
具体要求如下:(1)每个学生都有的字段为:姓名、年龄。
(2)小学生的字段还有语文、数学,用来表示这两科的成绩。
(3)中学生在此基础上多了英语成绩。
(4)大学生只有必修课和选修课两项成绩。
(5)学生类具有方法来统计自己的总成绩,并输出。
(6)通过静态成员自动记录学生总人数。
(7)成员初始化能通过构造函数完成。
源程序如下:using System;using ;using ;using ;using ;using ;using Test3_1{public partial class Form1 : Form{public Form1(){InitializeComponent();}public abstract class Student{protected string name;protected int age;protected static int number;public Student(string name, int age){= name;= age;number++;}public string Name { get { return name; } }public virtual string type{get { return"学生"; }}public abstract double total();public abstract double Average();public string getInto(){string result = ("总人数:{0},姓名:{1},{2},{3}岁", number, Name, type, age);if (type == "小学生")result += (",平均成绩为{0:N2}:\n", total() / 2);else if(type=="中学生")result += (",平均成绩为{0:N2}:\n", total() / 3);elseresult += (",总学分为{0:N2}:\n", total());return result;}}public class Pupil : Student{protected double chinese;protected double math;public Pupil(string name, int age, double chinese, double math): base(name, age){= chinese;= math;}public override string type{get{return"小学生";}}public override double total(){return chinese + math;}}public class Middle : Student{protected double chinese;protected double math;protected double english;public Middle(string name, int age, double chinese, double math,double english) : base(name, age){= chinese;= math;= english;}public override string type{get{return"中学生";}}public override double total(){return chinese + math+english;}}public class University : Student{protected double majors;protected double elective;public University(string name, int age, double majors, double elective): base(name, age){= majors ;= elective;}public override string type{get{return"大学生";}}public override double total(){return majors+elective;}}private void btpupil_Click(object sender, EventArgs e){int age = ;double chinese = ;double math = ;Pupil p = new Pupil, age, chinese, math);+= ();}private void btMiddle_Click(object sender, EventArgs e){int age = ;double chinese = ;double math = ;double english = ;Middle p = new Middle, age, chinese, math,english);+= ();}private void btUniversity_Click(object sender, EventArgs e) {int age = ;double chinese = ;double math = ;University u = new University, age, chinese, math);+= ();}}}运行结果如图所示:2、完善上机实验4-3设计的银行帐户管理系统,增加一个VIP账户的管理。
数学实验报告实验一Matlab的使用1.上机实验各种数据输入方法:程序语句:a=[1 2 3;4 5 6 ;7,8,9] 程序语句:linspace(1,10,5) 等等…………计算结果:a = 计算结果:ans =1 2 34 5 6 1.0000 3.2500 5.5000 7.7500 10.00007 8 92.(1) (a)方法:(b) 方法:程序语句:程序语句:a=[-3 5 0 8;1 -8 2 -1;0 -5 9 3;-7 0 -4 5]; a=[-3 5 0 8;1 -8 2 -1;0 -5 9 3;-7 0 -4 5];b=[0;2;-1;6]; b=[0;2;-1;6];inv(a)*b a\b计算结果:计算结果:ans = ans =-0.6386 -0.6386-0.4210 -0.4210-0.3529 -0.35290.0237 0.0237(2) 4个矩阵的生成语句:矩阵a 的生成语句:e=eye(3,3); a=[e r;o s]r=rand(3,2); 验证语句:o=zeros(2,3); a^2s=diag([1,2]);%此为一个任取的2X2 矩阵b=[e r+r*s; o s^2]计算结果相同:ans =1.0000 0 0 1.9003 1.45790 1.0000 0 0.4623 2.67390 0 1.0000 1.2137 2.28630 0 0 1.0000 00 0 0 0 4.00003.生成多项式的语句:poly ([2,-3,1+2i,1-2i,0,-6])计算结果:ans = 1 5 -9 -1 72 -180 0 计算x=0.8,-x=-1.2 之值的指令与结果:指令:polyval([1,5,-9,-1,72,-180,0],0.8) 结果:ans= -100.2179指令:polyval([1,5,-9,-1,72,-180,0],-1.2) 结果:ans= 293.29004.求a的指令与结果:指令:a=compan([1,0,-6,3,-8])结果:a =0 6 -3 81 0 0 00 1 0 00 0 1 0求a的特征值的指令与结果:roots(p)的指令与结果为:指令:eig(a) 指令:roots([1,0,-6,3,-8])结果:结果:ans = ans =-2.8374 -2.83742.4692 2.46920.1841 + 1.0526i 0.1841 + 1.0526i0.1841 - 1.0526i 0.1841 - 1.0526i结论:利用友元阵函数a=company(p) 和eig(a) 可以与roots(p)有相同的作用,结果相同。
成都信息工程大学《数学建模与数学实验》上机实验报告专业信息与计算科学班级姓名学号实验日期成绩等级教师评阅日期[问题描述]下表给出了某一海域以码为单位的直角坐标Oxy 上一点(x,y)(水面一点)以英尺为单位的水深z,水深数据是在低潮时测得的,船的吃水深为5英尺,问在矩形区域(75,200)x (-50,150)里那些地方船要避免进入。
[模型]设水面一点的坐标为(x,y,z),用基点和插值函数在矩形区域(75,200)*(-50,150)内做二维插值、三次插值,然后在作出等高线图。
[求解方法]使用matlab求解:M文件:water.mx=[129 140 103.5 88 185.5 195 105.5 157.5 107.5 77 81 162 162 117.5];y=[7.5 141.5 23 147 22.5 137.5 85.5 -6.5 -81 3 56.5 -66.584 -33.5];z=[-4 -8 -6 -8 -6 -8 -8 -9 -9 -8 -8 -9 -4 -9];cx = 75:0.5:200;cy = -50:0.5:150;[cx,cy]=meshgrid(cx,cy);作出曲面图:代码如下:>> water>> cz=griddata(x,y,z,cx,cy,'cubic');>> meshz(cx,cy,cz)>> xlabel('X'),ylabel('Y'),zlabel('Z')>>作出等高线图:代码如下:>> water>> cz=griddata(x,y,z,cx,cy,'cubic');>> figure(2)>> contour(cx,cy,cz,[-5,-5],'r')>> hold on>> plot(x,y,'*')>> xlabel('X'),ylabel('Y')[结果]插值结果等值图:[结果分析及结论]根据等值图可看出:红色区域为危险区域,所以船只要避免进入。
实验报告一题目:非线性方程求解摘要:非线性方程的解析解通常很难给出,因此线性方程的数值解法就尤为重要。
本实验采用两种常见的求解方法二分法和Newton法及改进的Newton法。
前言:(目的和意义)掌握二分法与Newton法的基本原理和应用。
数学原理:对于一个非线性方程的数值解法很多。
在此介绍两种最常见的方法:二分法和Newton 法。
对于二分法,其数学实质就是说对于给定的待求解的方程f(x),其在[a,b]上连续,f(a)f(b)<0,且f(x)在[a,b]内仅有一个实根x*,取区间中点c,若,则c恰为其根,否则根据f(a)f(c)<0是否成立判断根在区间[a,c]和[c,b]中的哪一个,从而得出新区间,仍称为[a,b]。
重复运行计算,直至满足精度为止。
这就是二分法的计算思想。
Newton法通常预先要给出一个猜测初值x0,然后根据其迭代公式产生逼近解x*的迭代数列{x k},这就是Newton法的思想。
当x0接近x*时收敛很快,但是当x0选择不好时,可能会发散,因此初值的选取很重要。
另外,若将该迭代公式改进为其中r为要求的方程的根的重数,这就是改进的Newton法,当求解已知重数的方程的根时,在同种条件下其收敛速度要比Newton法快的多。
程序设计:本实验采用Matlab的M文件编写。
其中待求解的方程写成function的方式,如下function y=f(x);y=-x*x-sin(x);写成如上形式即可,下面给出主程序。
二分法源程序:clear%%%给定求解区间b=1.5;a=0;%%%误差R=1;k=0;%迭代次数初值while (R>5e-6) ;c=(a+b)/2;if f12(a)*f12(c)>0;a=c;elseb=c;endR=b-a;%求出误差k=k+1;endx=c%给出解Newton法及改进的Newton法源程序:clear%%%% 输入函数f=input('请输入需要求解函数>>','s')%%%求解f(x)的导数df=diff(f);%%%改进常数或重根数miu=2;%%%初始值x0x0=input('input initial value x0>>');k=0;%迭代次数max=100;%最大迭代次数R=eval(subs(f,'x0','x'));%求解f(x0),以确定初值x0时否就是解while (abs(R)>1e-8)x1=x0-miu*eval(subs(f,'x0','x'))/eval(subs(df,'x0','x'));R=x1-x0;x0=x1;k=k+1;if (eval(subs(f,'x0','x'))<1e-10);breakendif k>max;%如果迭代次数大于给定值,认为迭代不收敛,重新输入初值ss=input('maybe result is error,choose a new x0,y/n?>>','s');if strcmp(ss,'y')x0=input('input initial value x0>>');k=0;elsebreakendendendk;%给出迭代次数x=x0;%给出解结果分析和讨论:1.用二分法计算方程在[1,2]内的根。
数学实验报告关于素数的探讨一、实验目的如果一个大于1的自然数只能被1及它本身整除,则该数称为素数。
我们可以很快判断一个很小的自然数是否为素数,但如果判断一个大的自然数就有些困难,本实验就是通过数学工具及数学方法来解决一些有关素数的问题,让我们更加了解素数及其分布规律。
需要解决的实验如下:1,如何判断1234567是否为素数2,生成素数表(500以内)3,探讨素数的分布规律二、问题求解方法由素数的定义可知如果一个数不能被大于1小于它本身的所有数整除,则可判断该数为素数,根据这种思想可以用C语言编程来判断1234567是否为素数;每一个合数都可以分解为若干个素数的乘积,如果想生成500以内的素数表,可以将2到500的数列中依次划去所有2的倍数,接着划去3的倍数,再划去5的倍数······这样一直进行下去就可以得到500以内的素数。
也可以用不超过√N考虑到500不是很大,可以先手工编写500以内的素数表,然后分别用c 语言和Mathematic程序生成素数表,并总结素数的分布规律。
三、程序设计流程1,判断1234567是否为素数的c语言程序:#include<stdio.h>void main(){int a=1234567,b=2;while(a%b!=0)b++;if(b<a)printf("no\n");else printf("yes\n");}2,用试除法生成500以内素数表的Mathematic程序DivPrime[n_Integer]:=500Module[{t={},i,j,temp,divided},For[i=2,i≤500,i++,j=1;divided=False;While[Prime[j]≤Sqrt[i]&&(!divided),temp=Prime[j];divided=(Mod[i,temp] 0);j=j+1];If[!divided,AppendTo[t,i]]];t]3,生成500以内素数表的c语言程序#include<stdio.h>void main(){int a=3,b=2,c;for(a=3;a<500;a++){for(b=2;b<=a;b++)if(a%b==0) break;if(b==a)printf("%d\n",a);}}四、上机实验结果的分析与结论通过上机运行上述程序可以判断1234567不为素数,并且将用程序生成的素数表与手工编写的素数表对比后得知一致,500以内素数表如下:{2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83 ,89,97,101,103,107,109,113,127,131,137,139,149,151,157,163,167,17 3,179,181,191,193,197,199,211,223,227,229,233,239,241,251,257,263 ,269,271,277,281,283,293,307,311,313,317,331,337,347,349,353,359, 367,373,379,383,389,397,401,409,419,421,431,433,439,443,449,457,4 61,463,467,479,487,491,499}这样就解决问题1和2,接下来观察并总结素数的规律.我们先利用以下程序计算出π(10), π(100), π(500), π(1000), π(2000), π(3000), π(5000)的值。
matlab上机实验报告pptMATLAB上机实验报告摘要:本实验报告利用MATLAB软件进行了一系列实验,包括数据处理、图像处理、信号处理等内容。
通过实验,我们掌握了MATLAB软件的基本操作和应用技巧,提高了数据分析和处理的能力。
1. 实验背景MATLAB是一种用于数学计算、数据分析和可视化的高级技术计算语言和交互式环境。
它是工程师和科学家们进行算法开发、数据分析、数据可视化和数值计算的首选工具。
本次实验旨在通过实际操作,掌握MATLAB的基本操作和应用技巧。
2. 实验内容本次实验主要包括以下内容:(1)数据处理:利用MATLAB对一组实验数据进行处理,包括数据的导入、清洗、分析和可视化。
(2)图像处理:利用MATLAB对一幅图像进行处理,包括图像的读取、处理和保存。
(3)信号处理:利用MATLAB对一组信号进行处理,包括信号的生成、滤波和频谱分析。
3. 实验过程(1)数据处理:首先,我们利用MATLAB将实验数据导入到工作空间中,然后对数据进行清洗和分析,最后利用MATLAB绘制出数据的可视化图表。
(2)图像处理:我们利用MATLAB读取一幅图像,并对图像进行处理,比如调整图像的亮度、对比度等参数,最后保存处理后的图像。
(3)信号处理:我们利用MATLAB生成一组信号,并对信号进行滤波处理,然后利用MATLAB进行信号的频谱分析。
4. 实验结果通过本次实验,我们成功地利用MATLAB对实验数据进行了处理和分析,得到了清晰的数据可视化图表;对一幅图像进行了处理,并保存了处理后的图像;对一组信号进行了滤波处理,并进行了频谱分析。
实验结果表明,MATLAB是一款功能强大、灵活多样的工程计算软件,能够满足工程师和科学家们的各种需求。
5. 实验结论本次实验通过MATLAB软件的实际操作,使我们掌握了MATLAB的基本操作和应用技巧,提高了我们的数据分析和处理能力。
同时,也加深了我们对MATLAB软件的理解和认识,为今后的工程计算和科学研究打下了坚实的基础。
数值计算方法上机实验报告实验目的:复习和巩固数值计算方法的基本数学模型,全面掌握运用计算机进行数值计算的具体过程及相关问题。
利用计算机语言独立编写、调试数值计算方法程序,培养学生利用计算机和所学理论知识分析解决实际问题的能力。
上机练习任务:利用计算机基本C 语言编写并调试一系列数值方法计算通用程序,并能正确计算给定题目,掌握调试技能。
掌握文件使用编程技能,如文件的各类操作,数据格式设计、通用程序运行过程中文件输入输出运行方式设计等。
一、各算法的算法原理及计算机程序框图1. 列主元高斯消去法算法原理:高斯消去法是利用现行方程组初等变换中的一种变换,即用一个不为零的数乘一个方程后加只另一个方程,使方程组变成同解的上三角方程组,然后再自下而上对上三角方程组求解。
列选住院是当高斯消元到第k 步时,从k 列的kk a 以下(包括kk a )的各元素中选出绝对值最大的,然后通过行交换将其交换到kk a 的位置上。
交换系数矩阵中的两行(包括常数项),只相当于两个方程的位置交换了,因此,列选主元不影响求解的结果。
●源程序:#define N 200#include "stdio.h"#include "math.h"FILE *fp1,*fp2;void LZ(){int n,i,j,k=0,l;double d,t,t1;static double x[N],a[N][N];fp1=fopen("a1.txt","r");fp2=fopen("b1.txt","w");fscanf(fp1,"%d",&n);for(i=0;i<n;++i)for(j=0;j<=n;++j){fscanf(fp1,"%lf",&a[i][j]);}{d=a[k][k];l=k;i=k+1;do{if(fabs(a[i][k])>fabs(d)) /*选主元*/{d=a[i][k];l=i;}i++;}while(i<n);if(d==0){printf("\n输入矩阵有误!\n");}else{ /*换行*/if(l!=k){for(j=k;j<=n;j++){t=a[l][j];a[l][j]=a[k][j];a[k][j]=t;}}}for(j=k+1;j<=n;j++) /*正消*/ a[k][j]/=a[k][k];for(i=k+1;i<n;i++)for(j=k+1;j<=n;j++)a[i][j]-=a[i][k]*a[k][j];k++;}while(k<n);if(k!=0){for(i=n-1;i>=0;i--) /*回代*/ {t1=0;for(j=i+1;j<n;j++)t1+=a[i][j]*x[j];x[i]=a[i][n]-t1;}for(i=0;i<n;i++)fprintf(fp2,"\n 方程组的根为x[%d]=%lf",i+1,x[i]); fclose(fp1); fclose(fp2); }main() { LZ(); }● 具体算例及求解结果:用列选主元法求解下列线性方程组⎪⎩⎪⎨⎧=++=++=-+28x x 23x 2232832321321321x x x x x x 输入3 输出结果:方程组的根为x[1]=6.0000001 2 -3 8 方程组的根为x[2]=4.000000 2 1 3 22 方程组的根为x[3]=2.000000 3 2 1 28● 输入变量、输出变量说明:输入变量:ij a 系数矩阵元素,i b 常向量元素 输出变量:12,,n b b b 解向量元素2. 杜里特尔分解法解线性方程● 算法原理:求解线性方程组Ax b =时,当对A 进行杜里特尔分解,则等价于求解LUx b =,这时可归结为利用递推计算相继求解两个三角形(系数矩阵为三角矩阵)方程组,用顺代,由Ly b =求出y ,再利用回带,由Ux y =求出x 。
引言概述:高等数学数学实验报告(二)旨在对高等数学的相关实验进行探究与研究。
本次实验报告共分为五个大点,每个大点讨论了不同的实验内容。
在每个大点下,我们进一步细分了五到九个小点,对实验过程、数据收集、数据分析等进行了详细描述。
通过本次实验,我们可以更好地理解高等数学的概念和应用。
正文内容:一、微分方程实验1.利用欧拉法求解微分方程a.介绍欧拉法的原理和步骤b.详细阐述欧拉法在实际问题中的应用c.给出具体的实例,展示欧拉法的计算步骤2.应用微分方程建立模型求解实际问题a.介绍微分方程模型的建立方法b.给出一个具体的实际问题,使用微分方程建立模型c.详细阐述模型求解步骤和结果分析3.使用MATLAB求解微分方程a.MATLAB求解微分方程的基本语法和函数b.给出一个具体的微分方程问题,在MATLAB中进行求解c.分析结果的准确性和稳定性二、级数实验1.了解级数的概念和性质a.简要介绍级数的定义和基本概念b.阐述级数收敛和发散的判别法c.讨论级数的性质和重要定理2.使用级数展开函数a.介绍级数展开函数的原理和步骤b.给出一个函数,使用级数展开进行近似计算c.分析级数近似计算的精确度和效果3.级数的收敛性与运算a.讨论级数收敛性的判别法b.介绍级数的运算性质和求和法则c.给出具体的例题,进行级数的运算和求和三、多元函数极值与最值实验1.多元函数的极值点求解a.介绍多元函数的极值点的定义和求解方法b.给出一个多元函数的实例,详细阐述求解过程c.分析极值点对应的函数值和意义2.多元函数的条件极值与最值a.讨论多元函数的条件极值的判定法b.给出一个具体的多元函数,求解其条件极值和最值c.分析条件极值和最值对应的函数值和意义3.利用MATLAB进行多元函数极值与最值的计算a.MATLAB求解多元函数极值与最值的基本语法和函数b.给出一个多元函数的具体问题,在MATLAB中进行求解c.分析结果的准确性和可行性四、曲线积分与曲面积分实验1.曲线积分的计算方法与应用a.介绍曲线积分的定义和计算方法b.给出一个具体的曲线积分问题,详细阐述计算过程c.分析曲线积分结果的几何意义2.曲线积分的应用举例a.讨论曲线积分在实际问题中的应用b.给出一个实际问题,使用曲线积分进行求解c.分析曲线积分结果的实际意义和应用价值3.曲面积分的计算方法与应用a.介绍曲面积分的定义和计算方法b.给出一个具体的曲面积分问题,详细阐述计算过程c.分析曲面积分结果的几何意义五、空间解析几何实验1.空间曲线的参数方程表示与性质a.介绍空间曲线的参数方程表示和性质b.给出一个具体的空间曲线,转化为参数方程表示c.分析参数方程对应的几何意义和性质2.平面与空间直线的位置关系a.讨论平面与空间直线的位置关系的判定方法b.给出一个具体的平面与空间直线的问题,判定其位置关系c.分析位置关系对应的几何意义和应用实例3.空间直线与平面的夹角和距离计算a.介绍空间直线与平面的夹角和距离的计算方法b.给出一个具体的空间直线和平面,计算其夹角和距离c.分析夹角和距离计算结果的几何意义总结:通过本次高等数学数学实验报告(二),我们深入了解了微分方程、级数、多元函数极值与最值、曲线积分、曲面积分以及空间解析几何的相关概念和应用。
离散数学上机实验报告离散数学实验报告:建
立关系矩阵实验
__大学离散数学实验报告建立关系矩阵实验姓名:____
专业:
软件工程班级:
3 学号:
1325116025 日期:
20__.10月7日 1、摘要:建立关系矩阵实验的目的是理解并掌握关系的矩阵表示方法、为用序偶集合表示的关系建立相应的关系矩阵。
学会用所学过的程序设计语言编程,解决关系矩阵的自动建立问题。
实验的内容是用二维数组或向量存储关系矩阵,根据输入的用序偶集合表示的关系,建立相应的关系矩阵。
用建立二维数组的方法构造关系矩阵。
分别输入两个用序偶集合表示的关系作为实验数据,然后建立两个数组之间的关系,得到一个关系矩阵。
关系矩阵一开始初始化为0,建立成功的关系体现为1。
最后得到一个完整的矩阵。
一.导言 2、 1) 问题的描述。
实验的目标是如何为用序偶集合表示的关系建立相应的关系矩阵,解决关系矩阵的自动建立问题。
2) 拟采用的方法用建立二维数组的方法来解决建立关系矩阵。
首先建立两个数组分别代表行和列,然后建立一个新的二维数组,将其初始化为零,集合之间的关系对应真值表,所以在这个二维数组中两个集合的关系就被表示为1,然后就相应地建立了两个集合的关系矩阵。
二.实验过程 1) 算法思想流程 1.申请两个字符型数组用来储存集合元素。
2.建立二维数组然后初始化为0.
3.判断关系是否存在,存在则赋值为1。
4输入数值然后输出关系矩阵。
2)程序流程图开始 P=0 switch P=0
P=’a’&&j=’a’&&j=’a’||j。
《数学建模实验报告》Lingo软件的上机实践应用简单的线性规划与灵敏度分析学号:班级:姓名:日期:2010—7—21数学与计算科学学院一、实验目的:通过对数学建模课的学习,熟悉了matlab和lingo等数学软件的简单应用,了解了用lingo软件解线性规划的算法及灵敏性分析。
此次lingo上机实验又使我更好地理解了lingo程序的输入格式及其使用,增加了操作连贯性,初步掌握了lingo软件的基本用法,会使用lingo计算线性规划题,掌握类似题目的程序设计及数据分析。
二、实验题目(P55课后习题5):某工厂生产A、2A两种型号的产品都必须经过零件装配和检验两道工序,1如果每天可用于零件装配的工时只有100h,可用于检验的工时只有120h,各型号产品每件需占用各工序时数和可获得的利润如下表所示:(1)试写出此问题的数学模型,并求出最优化生产方案.(2)对产品A的利润进行灵敏度分析1(3)对装配工序的工时进行灵敏度分析(4)如果工厂试制了A型产品,每件3A产品需装配工时4h,检验工时2h,可获3利润5元,那么该产品是否应投入生产?三、题目分析:总体分析:要解答此题,就要运用已知条件编写出一个线性规划的Lingo 程序,对运行结果进行分析得到所要数据;当然第四问也可另编程序解答.四、 实验过程:(1)符号说明设生产1x 件1A 产品,生产2x 件2A 产品.(2)建立模型目标函数:maxz=61x +42x 约束条件:1) 装配时间:21x +32x <=100 2) 检验时间:41x +22x <=120 3) 非负约束:1x ,2x >=0所以模型为: maxz=61x +42xs.t 。
⎪⎩⎪⎨⎧>=<=+<=+0,1202410032212121x x x x x x(3)模型求解:1)程序model:title 零件生产计划; max=6*x1+4*x2; 2*x1+3*x2<=100; 4*x1+2*x2<=120; end附程序图1:2)计算结果Global optimal solution found。
一、实验目的1. 理解数值积分的概念及其在实际应用中的重要性;2. 掌握数值积分的常用方法,如梯形法、辛普森法、高斯法等;3. 利用计算机编程实现数值积分算法,提高编程能力;4. 分析不同数值积分方法在精度和效率方面的差异。
二、实验内容1. 实现梯形法、辛普森法和高斯法;2. 对给定函数进行数值积分,比较不同方法的精度和效率;3. 分析误差来源,提出改进措施。
三、实验环境1. 操作系统:Windows 102. 编程语言:Python3. 数值计算库:NumPy四、实验步骤1. 实现梯形法:```pythonimport numpy as npdef trapezoidal_rule(f, a, b, n):h = (b - a) / nresult = 0.5 (f(a) + f(b))for i in range(1, n):result += f(a + i h)result = hreturn result```2. 实现辛普森法:```pythondef simpson_rule(f, a, b, n):h = (b - a) / nresult = f(a) + f(b)for i in range(1, n):if i % 2 == 1:result += 4 f(a + i h)else:result += 2 f(a + i h)result = h / 3return result```3. 实现高斯法:```pythondef gauss_quadrature(f, a, b, n):x = np.linspace(a, b, n)w = 2 (b - a) / (3 n) np.ones(n)return np.dot(w, f(x))```4. 对给定函数进行数值积分,比较不同方法的精度和效率:```pythondef f(x):return np.sin(x)a = 0b = np.pin = 10result_trapezoidal = trapezoidal_rule(f, a, b, n)result_simpson = simpson_rule(f, a, b, n)result_gauss = gauss_quadrature(f, a, b, n)print("梯形法结果:", result_trapezoidal)print("辛普森法结果:", result_simpson)print("高斯法结果:", result_gauss)```5. 分析误差来源,提出改进措施:通过比较梯形法、辛普森法和高斯法的结果,我们可以发现高斯法在精度和效率方面都优于梯形法和辛普森法。