计算方法实验9

计算方法实验9
计算方法实验9

实验九

一、编程并在计算机上调试修改运行

P13717、18.

二、阅读理解下列程序,并在计算机上运行.

1. newdd.m% x为初值,w为精度,n为最大迭代次数

function [a,k]=newdd(x,w,n)

a=[];a(1)=x;

for k=1:n

if df(x)==0

disp('分母为零')

end

y=x-f(x)/df(x);a(k+1)=y;

if abs(y-x)>w

x=y;

else

break

end

end

if k==n

disp('迭代失败')

end

function y=f(x)

y=x*exp(x)-1;

function y=df(x) %导函数

y=(1+x)*exp(x);

2. ftx17.m %a,b是积分上下限,n等分数

function T=ftx17(a,b,n)

h=(b-a)/n;x=a:h:b;

T=h*(f(a)+2*sum(f(x(2:n)))+f(b))/2;

function y=f(x)%子函数

y=1+sin(4*x).*exp(-x);

3. fsim17.m (复化Simpson求积公式)%a,b是积分上下限,n等分数

function s=fsim17(a,b,n)

h=(b-a)/(2*n);

x1=a:2*h:b;x2=a+h:2*h:b-h;

y1=f(x1);y2=f(x2);

s=h*(2*sum(y1)-f(a)-f(b)+4*sum(y2))/3;

function y=f(x)%子函数

y=1+sin(4*x).*exp(-x);

4. tx17.m (变步长梯形法)%a,b是积分上下限,w精度

function [T2,k]=tx17(a,b,w)

h=b-a;T2=h*(f(a)+f(b))/2;T1=0;k=0;

while abs(T2-T1)>w

s=0;x=a+h/2;T1=T2;

while x

s=s+f(x);x=x+h;

end

T2=(T1+h*s)/2;

h=h/2;k=k+1;

end

function y=f(x) %子函数

y=1+sin(4*x)*exp(-x);

一、

第17题

(1) function [a,k]=newdd(x,w,n)

a=[];a(1)=x;

for k=1:n

if df(x)==0

disp('分母为零')

end

y=x-f(x)/df(x);a(k+1)=y;

if abs(y-x)>w

x=y;

else

break

end

end

if k==n

disp('迭代失败')

end

function y=f(x)

y=exp(x)-4*cos(x);

function y=df(x)

y=exp(x)+4*sin(x);

>> [a,k]=newdd(pi/4,1e-4,10)

a =

0.7854 0.9119 0.9048 0.9048

k =

3

(2)

function [a,k]=xianjie(x0,x,w,n)

a=[];a(1)=x;

for k=1:n

if f(x)-f(x0)==0

disp('分母为零')

end

y=x-f(x)*(x-x0)/(f(x)-f(x0));a(k+1)=y;

if abs(y-x)>w

x=y;

else

break

end

end

if k==n

disp('迭代失败')

end

function y=f(x)

y=exp(x)-4*cos(x);

>> [a,k]=xianjie(pi/4,pi/2,1e-4,10)

a =

1.5708 0.8770 0.9064 0.9047 0.9048

k =

4

>> [a,k]=xianjie(pi/4,pi/3,1e-4,10)

a =

1.0472 0.8974 0.9052 0.9048 0.9048

k =

4

>> [a,k]=xianjie(pi/4,pi,1e-4,10)

a =

3.1416 0.8393 0.9086 0.9046 0.9048 0.9048 k =

5

(3)

function [a,k]=kuaisuxianjie(x0,x,w,n)

a=[];a(1)=x0;

for k=1:n

if f(x)-f(x0)==0

disp('分母为零')

end

y=x-f(x)*(x-x0)/(f(x)-f(x0));a(k+1)=y;

if abs(y-x)>w

x0=a(k);

x=y;

else

break

end

end

if k==n

disp('迭代失败')

end

function y=f(x)

y=exp(x)-4*cos(x);

>> [a,k]=kuaisuxianjie(pi/4,pi/2,1e-4,100)

a =

0.7854 0.8770 0.9064 0.9048 0.9048

k =

4

>> [a,k]=kuaisuxianjie(pi/4,pi,1e-4,100)

a =

0.7854 0.8393 0.9086 0.9047 0.9048 0.9048 k =

5

第18题

(1) function [a,k]=newdd(x,w,n)

a=[];a(1)=x;

for k=1:n

if df(x)==0

disp('分母为零')

end

y=x-f(x)/df(x);a(k+1)=y;

if abs(y-x)>w

x=y;

else

break

end

end

if k==n

disp('迭代失败')

end

function y=f(x)

y=x^3+2*x^2+10*x-20;

function y=df(x)

y=3*x^2+4*x+10;

>> [a,k]=newdd(2,1e-6,10)

a =

2.0000 1.4667 1.3715 1.3688 1.3688 1.3688 k =

5

>> [a,k]=newdd(0.5,1e-6,10)

a =

0.5000 1.6275 1.3869 1.3689 1.3688 1.3688 k =

5

>> [a,k]=newdd(5,1e-6,10)

a =

Columns 1 through 6

5.0000 3.0476 1.9017 1.4404 1.3703 1.3688 Column 7

1.3688

k =

6

(2)

function [a,k]=xianjie(x0,x,w,n)

a=[];a(1)=x;

for k=1:n

if f(x)-f(x0)==0

disp('分母为零')

end

y=x-f(x)*(x-x0)/(f(x)-f(x0));a(k+1)=y;

if abs(y-x)>w

x=y;

else

break

end

end

if k==n

disp('迭代失败')

end

function y=f(x)

y=x^3+2*x^2+10*x-20;

>> [a,k]=xianjie(0.5,1,1e-6,10)

迭代失败

a =

Columns 1 through 6

1.0000 1.4746 1.3401 1.3767 1.3666 1.3694 Columns 7 through 11

1.3686 1.3689 1.3688 1.3688 1.3688

k =

10

>> [a,k]=xianjie(0.5,1,1e-6,100)

a =

Columns 1 through 6

1.0000 1.4746 1.3401 1.3767 1.3666 1.3694 Columns 7 through 12

1.3686 1.3689 1.3688 1.3688 1.3688 1.3688 Column 13

1.3688

k =

12

>> [a,k]=xianjie(2,1,1e-6,100)

a =

Columns 1 through 6

1.0000 1.3043 1.3579 1.3670 1.3685 1.3688 Columns 7 through 10

1.3688 1.3688 1.3688 1.3688

k =

9

(3)

function [a,k]=kuaisuxianjie(x0,x,w,n)

a=[];a(1)=x0;

for k=1:n

if f(x)-f(x0)==0

disp('分母为零')

end

y=x-f(x)*(x-x0)/(f(x)-f(x0));a(k+1)=y;

if abs(y-x)>w

x0=a(k);

x=y;

else

break

end

end

if k==n

disp('迭代失败')

end

function y=f(x)

y=x^3+2*x^2+10*x-20;

>> [a,k]=kuaisuxianjie(16,1119,1e-6,100)

a =

Columns 1 through 6

16.0000 15.9963 10.3598 7.9764 5.6634 4.0780 Columns 7 through 12

2.8749 2.0646 1.5959 1.4093 1.3714 1.3688 Columns 13 through 14

1.3688 1.3688

k =

13

>> [a,k]=kuaisuxianjie(16,11,1e-6,100)

a =

Columns 1 through 6

16.0000 8.3047 6.8065 4.6558 3.3676 2.3702 Columns 7 through 12

1.7615 1.4635 1.3789 1.3691 1.3688 1.3688 k =

11

>> [a,k]=kuaisuxianjie(1,11,1e-6,100)

a =

Columns 1 through 6

1.0000 1.0419 1.4067 1.3651 1.3688 1.3688 Column 7

1.3688

k =

6

二、

1、

>> [a,k]=newdd(0.5,1e-4,10)

a =

0.5000 0.5710 0.5672 0.5671

k =

3

>> [a,k]=newdd(1.5,1e-1,10)

a =

1.5000 0.9893 0.6789 0.5766 0.5672 k =

4

>> [a,k]=newdd(2,1e-1,10)

a =

2.0000 1.3784 0.9048 0.6422 0.5715 k =

4

2、

>> ftx17(0,1,8)

ans =

1.3021

>> ftx17(0,1,16)

ans =

1.3067

>> ftx17(0,1,4)

ans =

1.2836

3、

>> fsim17(0,1,4)

ans =

1.3083

>> fsim17(0,1,8)

ans =

1.3083

4、

>> [T2,k]=tx17(0,1,1e-5) T2 =

1.3082

k =

9

>> [T2,k]=tx17(0,1,1e-3) T2 =

1.3082

k =

6

>> [T2,k]=tx17(0,1,1e-8) T2 =

1.3083

k =

14

计算方法实验

实验一: 姓名: 学号: 班级:2013级计算机6班实验地点:第二机房 实验时间:2015/3/17

1 实验目的和要求 1. 二分法求方程的根 2. 基本迭代法求方程的根 3. 用埃特金求方程010423=-+x x 在1.5处的一个根,精度要求410-。 4. 牛顿下山法求方程的根 求方程013=--x x 的根,初值取6.00=x ,精度满足510-。 5. 牛顿迭代法求解7,精度满足510- 2 实验环境和工具 机房 VC6 3 实验结果 3.1 算法流程图 3.2 程序核心代码 二分法代码 #include #include

void main() { double x,a=1.0,b=1.5; for(int i=1;i<10;i++) { x=(a+b)/2; if((a*a*a-a-1)*(x*x*x-x-1)<0) b=x; else a=x; if(b-a<0.01) break; cout< #include void main() { double x0=0.5,x,e=2.718281;

for(int i=1;i<20;i++) { x=pow(e,-x0); if(x-x0<0.00001) break; cout< #include #include using namespace std; ////////// double fun(double x); void AitkenIterative(double(*pf)(double x)); ////////// ////////// int main() { AitkenIterative(fun);

数值计算实验课题目

数值实验课试题 本次数值实验课结课作业,请按题目要求内容写一篇文章。按题目要求 人数自由组合,每组所选题目不得相同(有特别注明的题目除外)。试题如下: 1)解线性方程组的Gauss 消去法和列主元Gauss 消去法(2人)/*张思珍,巩艳华*/ 用C 语言将不选主元和列主元Gauss 消去法编写成通用的子程序,然后用你编写的程序求解下列84阶的方程组 ???? ?????? ? ??=??????????? ????????????? ? ?1415151515768 168 168 168 1681684 8382321 x x x x x x 参考书目: 1.《计算机数值方法》,施吉林、刘淑珍、陈桂芝编 2.《数值线性代数》,徐树方、高立、张平文编 3.《数值分析简明教程》,王能超编 2)解线性方程组的平方根法(4人)/*朱春成、黄锐奇、张重威、章杰*/ 用C 语言将平方根法和改进的平方根法编写成通用的子程序,然后用你编写的程序求解对称正定方程组b Ax =,其中 (1)b 随机的选取,系数矩阵为100阶矩阵 ?????? ???? ? ? ?101 1101 1101 1101 1101110 ; (2)系数矩阵为40阶的Hilbert 矩阵,即系数矩阵A 的第i 行第j 列元素为 1 1-+= j i a ij ,向量b 的第i 个分量为∑=-+ = n j i j i b 1 1 1. 参考书目: 1.《计算机数值方法》,施吉林、刘淑珍、陈桂芝编 2.《数值线性代数》,徐树方、高立、张平文编

3.《数值分析简明教程》,王能超编 3)三对角线方程组的追赶法(3人)/*黄佳礼、唐伟、韦锡倍*/ 用C 语言将三对角线方程组的追赶法法编写成通用的子程序,然后用你编写的程序求解如下84阶三对角线方程组 ???? ?????? ? ??=??????????? ????????????? ? ?1415151515768 168 168 168 16816 84 8382321 x x x x x x 参考书目: 1.《计算机数值方法》,施吉林、刘淑珍、陈桂芝编 2.《数值分析简明教程》,王能超编 4)线性方程组的Jacobi 迭代法(3人)/*周桂宇、杨飞、李文军*/ 用C 语言将Jacobi 迭代法编写成独立的子程序,并用此求解下列方程组, 精确到小数点后5位 ???? ? ??=????? ??????? ? ?-149012 2111221 3 2 1 x x x 参考书目: 1.《计算机数值方法》,施吉林、刘淑珍、陈桂芝编 2.《数值线性代数》,徐树方、高立、张平文编 3.《数值分析简明教程》,王能超编 5)线性方程组的Gauss-Seidel 迭代法(3人)/*张玉超、范守平、周红春*/ 用C 语言将Gauss-Seidel 迭代法编写成独立的子程序,并用此求解下列方程组,精确到小数点后5位 ???? ? ??=????? ??????? ? ?--39721 1111112 3 2 1 x x x 参考书目: 1.《计算机数值方法》,施吉林、刘淑珍、陈桂芝编 2.《数值线性代数》,徐树方、高立、张平文编 3.《数值分析简明教程》,王能超编 6)解线性方程组的最速下降法法(2人)/*赵育辉、阿热孜古丽*/ 用C 语言将最速下降法编写成通用的子程序,然后用你编写的程序求解对称

计算方法实验+编程代码

计算方法实验报告 1 在区间[-1,1]上分别取n=10,20,用两组等距节点对龙格函数21()125f x x =+作多项式插值,对每个n 值,分别画出插值函数及()f x 的图形。 解:n=10时: n=20时:

2 在区间[-1,1]上分别取n=10,20,用两组等距节点对龙格函数21()125f x x = +作分段线性插值,对每个n 值,分别画出插值函数及()f x 的图形。 解:n=10: n=20时:

3 对龙格函数21()125f x x = +在区间[-1,1]上取21, 0,1,2k x k k n n =-+= ,n 分别取10,20,试分别求3次、5次最小二乘拟合多项式,打印出此曲线拟合函数,分别画出此拟合函数及()f x 的图形。 3次最小二乘拟合 n=10时: n=20时:

5次最小二乘拟合n=10时: n=20时:

4 取点 21 cos,0,1,2 2(1) k k x k n n π + == + ,n分别取10,20,对龙格函数 2 1 () 125 f x x = + 作多项式插值,对每个n值,分别画出插值函数及() f x的图形。解:n=10时: n=20时:

5 比较上面三组近似函数,说说你的体会。你能在此基础上做进一步的探索吗,比如n如果继续增加下去,结果会如何? 附注:编程语言不限,但用matlab等语言编程时,不得直接调用现成的插值与逼近函数,需要你在我们课堂教学的基础上,编程实现上述算法。 解:用不同方法进行插值,得出的插值函数差异较大。其中,最小二乘拟合的曲线精度较低,多项式插值拟合的曲线精度较高。曲线拟合的精度不仅和拟合方法有关,还和采样点位置的选取、个数有关。如1,4题都是多项式插值,但是第4题的拟合度最高。n值越大,拟合的函数会更加接近原函数。 程序: 1.等距节点多项式插值 clear; clc; syms x n=input('input n='); x1=linspace(-1,1,n+1); y1=1./(1.+25*x1.^2); yy=zeros(1,n+1); fx=0; for i=1:n+1; lga=1; for j=1:n+1 if j~=i lga=lga*(x-x1(1,j))/(x1(1,i)-x1(1,j)); else end end fx=fx+y1(1,i)*lga; end disp(fx); x=-1:0.01:1; plot(x,eval(fx),'rh') hold on a=linspace(-1,1,100); y2=1./(1.+25*a.^2); plot(a,y2,'b')

曲线拟合的数值计算方法实验

曲线拟合的数值计算方法实验 【摘要】实际工作中,变量间未必都有线性关系,如服药后血药浓度与时间的关系;疾病疗效与疗程长短的关系;毒物剂量与致死率的关系等常呈曲线关系。曲线拟合(curve fitting)是指选择适当的曲线类型来拟合观测数据,并用拟合的曲线方程分析两变量间的关系。曲线直线化是曲线拟合的重要手段之一。对于某些非线性的资料可以通过简单的变量变换使之直线化,这样就可以按最小二乘法原理求出变换后变量的直线方程,在实际工作中常利用此直线方程绘制资料的标准工作曲线,同时根据需要可将此直线方程还原为曲线方程,实现对资料的曲线拟合。常用的曲线拟合有最小二乘法拟合、幂函数拟合、对数函数拟合、线性插值、三次样条插值、端点约束。 关键词曲线拟合、最小二乘法拟合、幂函数拟合、对数函数拟合、线性插值、三次样条插值、端点约束 一、实验目的 1.掌握曲线拟合方式及其常用函数指数函数、幂函数、对数函数的拟合。 2.掌握最小二乘法、线性插值、三次样条插值、端点约束等。 3.掌握实现曲线拟合的编程技巧。 二、实验原理 1.曲线拟合 曲线拟合是平面上离散点组所表示的坐标之间的函数关系的一种数据处理方法。用解析表达式逼近离散数据的一种方法。在科学实验或社会活动中,通过 实验或观测得到量x与y的一组数据对(X i ,Y i )(i=1,2,...m),其中各X i 是彼此不同的。人们希望用一类与数据的背景材料规律相适应的解析表达式,y=f(x,c)来反映量x与y之间的依赖关系,即在一定意义下“最佳”地逼近或 拟合已知数据。f(x,c)常称作拟合模型,式中c=(c 1,c 2 ,…c n )是一些待定参 数。当c在f中线性出现时,称为线性模型,否则称为非线性模型。有许多衡量拟合优度的标准,最常用的一种做法是选择参数c使得拟合模型与实际观测值在

计算方法实验

算方法实验指导 姓名学号院系专业哈尔滨工业大学

计算方法实验指导 根据实际问题建立的数学模型,一般不能求出所谓的解析解,必须针对数学模型 的特点确定适当的计算方法,编制出计算机能够执行的计算程序,输入计算机,进行 调试,完成运算,如果计算结果存在问题或不知是否正确,还需要重新确定新的计算 方法,再编制出计算程序,输入计算机,重新调试,完成运算,直至获得正确的计算 结果,这就是数值计算的全部过程。 学生在学习“计算方法”和“高级语言”等课程时普遍存在的问题是:只会套用 教科书中的标准程序进行数值计算,很少有人能够独立地将学过的数值算法编制成计 算机程序,至于灵活应用已经掌握的算法求解综合性较大的课题,则更是困难的事情。 编写《计算方法实验指导》的目的是:突出数值计算程序结构化的思想。提高学 生的编程能力,加深对“计算方法”课程内容的理解和掌握,为”计算方法“课程的 教学服务,进一步奠定从事数值计算工作的基础。具体地 1. 根据“计算方法”课程内容的特点,给出五个典型算法的分析流程,学生可以 利用所掌握的 “高级语言”顺利地编制出计算机程序,上机实习,完成实验环节的教 学要求。 2. 所有的计算实习题目都经过任课教师逐一检验,准确无误。 3. 充分利用循环的思想、 迭代的思想, 给出算法结构描述和程序语言的对应关系, 有利于学生编 制相应的程序。 4. 结合实习题目,提出实验要求,要求学生按规范格式写出相应的实验报告,实 验报告成绩记入 期末总成绩。需要提醒学生:不能简单地套用现成的标准程序完成实 验题目,应当把重点放在对算法的理解、程序的优化设计、上机调试和计算结果分析 上,否则就失去实验课的目的啦。 5. 五个具体的实验题目是: 实验题目 实验题目 实验题目 实验题目 实验题目 要求必须完 成其中三个(如果全部完成更好) 。 1 拉格朗日 (Lagrange) 插值 2 龙贝格 (Romberg) 积分法 3 四阶龙格—库塔 (Runge — Kutta) 方法 4 牛顿 (Newton) 迭代法 5 高斯 (Gauss) 列主元消去法

数值分析实验报告1

实验一误差分析 实验1.1(病态问题) 实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。通过本实验可获得一个初步体会。 数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。 问题提出:考虑一个高次的代数多项式 显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。现考虑该多项式的一个扰动 其中ε(1.1)和(1.221,,,a a 的输出b ”和“poly ε。 (1(2 (3)写成展 关于α solve 来提高解的精确度,这需要用到将多项式转换为符号多项式的函数poly2sym,函数的具体使用方法可参考Matlab 的帮助。 实验过程: 程序: a=poly(1:20); rr=roots(a); forn=2:21 n form=1:9 ess=10^(-6-m);

ve=zeros(1,21); ve(n)=ess; r=roots(a+ve); -6-m s=max(abs(r-rr)) end end 利用符号函数:(思考题一)a=poly(1:20); y=poly2sym(a); rr=solve(y) n

很容易的得出对一个多次的代数多项式的其中某一项进行很小的扰动,对其多项式的根会有一定的扰动的,所以对于这类病态问题可以借助于MATLAB来进行问题的分析。 学号:06450210 姓名:万轩 实验二插值法

计算方法上机实验报告——拉格朗日插值问题

计算方法上机实验报告——拉格朗日插值问题 一、方法原理 n次拉格朗日插值多项式为:Ln(x)=y0l0(x)+y1l1(x)+y2l2(x)+…+ynln(x) n=1时,称为线性插值,L1(x)=y0(x-x1)/(x0-x1)+y1(x-x0)/(x1-x0)=y0+(y1-x0)(x-x0)/(x1-x0) n=2时,称为二次插值或抛物线插值,精度相对高些 L2(x)=y0(x-x1)(x-x2)/(x0-x1)/(x0-x2)+y1(x-x0)(x-x2)/(x1-x0)/(x1-x 2)+y2(x-x0)(x-x1)/(x2-x0)/(x2-x1) 二、主要思路 使用线性方程组求系数构造插值公式相对复杂,可改用构造方法来插值。 对节点xi(i=0,1,…,n)中任一点xk(0<=k<=n)作一n次多项式lk(xk),使它在该点上取值为1,而在其余点xi(i=0,1,…,k-1,k+1,…,n)上为0,则插值多项式为Ln(x)=y0l0(x)+y1l1(x)+y2l2(x)+…+ynln(x) 上式表明:n个点xi(i=0,1,…,k-1,k+1,…,n)都是lk(x)的零点。可求得lk 三.计算方法及过程:1.输入节点的个数n 2.输入各个节点的横纵坐标 3.输入插值点 4.调用函数,返回z 函数语句与形参说明 程序源代码如下: 形参与函数类型 参数意义 intn 节点的个数 doublex[n](double*x) 存放n个节点的值 doubley[n](double*y) 存放n个节点相对应的函数值 doublep 指定插值点的值 doublefun() 函数返回一个双精度实型函数值,即插值点p处的近似函数值 #include #include usingnamespacestd; #defineN100 doublefun(double*x,double*y,intn,doublep); voidmain() {inti,n; cout<<"输入节点的个数n:"; cin>>n;

太原理工大学数值计算方法实验报告

本科实验报告 课程名称:计算机数值方法 实验项目:方程求根、线性方程组的直接解 法、线性方程组的迭代解法、代数插值和最 小二乘拟合多项式 实验地点:行勉楼 专业班级: ******** 学号: ********* 学生姓名: ******** 指导教师:李誌,崔冬华 2016年 4 月 8 日

y = x*x*x + 4 * x*x - 10; return y; } float Calculate(float a,float b) { c = (a + b) / 2; n++; if (GetY(c) == 0 || ((b - a) / 2) < 0.000005) { cout << c <<"为方程的解"<< endl; return 0; } if (GetY(a)*GetY(c) < 0) { return Calculate(a,c); } if (GetY(c)*GetY(b)< 0) { return Calculate(c,b); } } }; int main() { cout << "方程组为:f(x)=x^3+4x^2-10=0" << endl; float a, b; Text text; text.Getab(); a = text.a; b = text.b; text.Calculate(a, b); return 0; } 2.割线法: // 方程求根(割线法).cpp : 定义控制台应用程序的入口点。// #include "stdafx.h" #include"iostream"

心得体会 使用不同的方法,可以不同程度的求得方程的解,通过二分法计算的程序实现更加了解二分法的特点,二分法过程简单,程序容易实现,但该方法收敛比较慢一般用于求根的初始近似值,不同的方法速度不同。面对一个复杂的问题,要学会简化处理步骤,分步骤一点一点的循序处理,只有这样,才能高效的解决一个复杂问题。

计算方法实验截图

function t=agui_trapz(fname,a,b,n) h=(b-a)/n; fa=feval(fname,a); fb=feval(fname,b); f=feval(fname,a+h:h:b-h+0.001*h); t=h*(0.5*(fa+fb)+sum(f)); format long t=agui_trapz(inline('x.*exp(x)'),1,2,8)

function s=agui_simpson(fname,a,b,n) h=(b-a)/n; fa=feval(fname,a); fb=feval(fname,b); s=fa-fb; x=a; for i=1:n x=x+h/2;s=s+4*feval(fname,x); x=x+h/2;s=s+2*feval(fname,x); end s=s*h/6; s=agui_simpson(inline('x.*exp(x)'),1,2,4)

function r=agui_rbg(fname,a,b) e=0.5e-7; i=1;j=1;h=b-a; T(i,1)=h/2*(feval(fname,a)+feval(fname,b)); T(i+1,1)=T(i,1)/2+sum(feval(fname,a+h/2:h:b-h/2+0.001*h))*h/2; T(i+1,j+1)=4^j*T(i+1,j)/(4^j-1)-T(i,j)/(4^j-1); while abs(T(i+1,i+1)-T(i,i))>e i=i+1;h=h/2; T(i+1,1)=T(i,1)/2+sum(feval(fname,a+h/2:h:b-h/2+0.001*h))*h/2; for j=1:i; T(i+1,j+1)=4^j*T(i+1,j)/(4^j-1)-T(i,j)/(4^j-1); end end T r=T(i+1,j+1); agui_rbg(inline('x.*exp(x)'),1,2)

计算方法实验报告 插值

实验名称:插值计算 1引言 在生产和科研中出现的函数是多种多样的。常常会遇到这样的情况:在某个实际问题中,虽然可以断定所考虑的函数f(x)在区间[a,b]上存在且连续,但却难以找到它的解析表达式,只能通过实验和观测得到在有限个点上的函数值。用这张函数表来直接求出其他点的函数值是非常困难的,在有些情况下,虽然可以写出f(x)的解析表达式,但由于结构十分复杂,使用起来很不方便。面对这些情况,构造函数P(x)作为f(x)的近似,插值法是解决此类问题比较古老却目前常用的方法,不仅直接广泛地应用与生产实际和科学研究中,而且是进一步学习数值计算方法的基础。 设函数y=f(x)在区间[a,b]上连续,且在n+1个不同的点a≤x0,x1……,xn≤b上分别取值y0,y1……,yn. 插值的目的就是要在一个性质优良、便于计算的函数φ中,求一简单函数P(x),使P(xi)=yi(i=0,1…,n)而在其他点x≠xi上,作为f(x)的近似。 通常,称区间[a,b]为插值区间,称点x0,x1,…,xn为插值节点,上式为插值条件,称函数类φ为插值函数类,称P(x)为函数f(x)在节点x0,x1,…,xn处的插值函数,求插值函数P(x)的方法称为插值法。 2实验目的和要求 用matlab定义分段线性插值函数、分段二次插值函数、拉格朗日插值函数,输入所给函 数表,并利用计算机选择在插值计算中所需的节点,计算f(0.15),f(0.31),f(0.47)的近似值。

3算法描述 1.分段线性插值流程图

2.分段二次插值流程图

3.拉格朗日插值流程图

4程序代码及注释 1.分段线性插值

计算方法实验报告

中北大学信息商务学院计算方法实验报告 学生姓名:刘昊文学号: 30 学院:中北大学信息商务学院 专业:电气工程及其自动化 指导教师:薛晓健 2017 年 04 月 19 日

实验一:非线性方程的近似解法 1.实验目的 1.掌握二分法和牛顿迭代法的原理 2.根据实验内容编写二分法和牛顿迭代法的算法实现 注:(可以用C语言或者matlab语言) 2.实验设备 matlab 3.实验内容及步骤 解方程f(x)=x5-3x3-2x2+2=0 4.实验结果及分析 二分法: 数据: f =x^5-3*x^3-2*x^2+2 [ n xa xb xc fc ]

1 -3 3 0 2 0

牛顿迭代法 > syms x; f=(x^5-3*x^3-2*x^2+2) [x,k]=Newtondd(f,0,1e-12) f = x^5 - 3*x^3 - 2*x^2 + 2 x = NaN k =2 实验二:解线性方程组的迭代法 1.实验目的 1.掌握雅克比迭代法和高斯-塞德尔迭代法的原理 2.根据实验内容编写雅克比迭代法和高斯-塞德尔迭代法的算法实现 注:(可以用C语言或者matlab语言) 2.实验设备 Matlab

3.实验内容及步骤 1、分别用雅克比迭代法和高斯-塞德尔迭代法解方程Ax=b 其中A=[4 -1 0 -1 0 0 -1 4 -1 0 -1 0 0 -1 4 -1 0 -1 -1 0 -1 4 -1 0 0 -1 0 -1 4 -1 0 0 -1 0 -1 4] b=[0 ;5;-2;5;-2;6] 4.实验结果及分析 (雅克比迭代法) a=[4 -1 0 -1 0 0;-1 4 -1 0 -1 0;0 -1 4 -1 0 -1;-1 0 -1 4 -1 0;0 -1 0 -1 4 -1;0 0 -1 0 -1 4] b=[0;5;-2;5;-2;6] x=agui_jacobi(a,b) a = 4 -1 0 -1 0 0 -1 4 -1 0 -1 0 0 -1 4 -1 0 -1 -1 0 -1 4 -1 0 0 -1 0 -1 4 -1 0 0 -1 0 -1 4 b = 0 5 -2 5 -2 6

数值计算方法实验5

实验报告 学院(系)名称: 主程序部分列选主元部分

实验结果: 一.列主元消去法 输入各个数据,最终使用列选主元法,得到结果为:x1=x2=x3=1二.高斯-赛德尔迭代法 输入各个数据,输出每一步迭代数据,最终结果为:x1=0.285716,附录(源程序及运行结果) 一.列主元高斯消去法 #include #include void print(double a[3][3],int n,double b[3]){ printf("输出矩阵:\n"); for(int i=0;ifabs(d)){ d=a[i][k]; l=i; } i++; } printf("选出主元:%lf\n",d); if(d==0) printf("矩阵奇异!\n"); else if(l!=k){ for(int j=k;j

东南大学计算方法实验报告

计算方法与实习实验报告 学院:电气工程学院 指导老师:李翠平 班级:160093 姓名:黄芃菲 学号:16009330

实习题一 实验1 拉格朗日插值法 一、方法原理 n次拉格朗日插值多项式为:L n(x)=y0l0(x)+y1l1(x)+y2l2(x)+…+y n l n(x) n=1时,称为线性插值,L1(x)=y0(x-x1)/(x0-x1)+ y1(x-x0)/(x1-x0)=y0+(y1-x0)(x-x0)/(x1-x0) n=2时,称为二次插值或抛物线插值,精度相对高些 L2(x)=y0(x-x1)(x-x2)/(x0-x1)/(x0-x2)+y1(x-x0)(x-x2)/(x1-x0)/(x1-x2)+y2(x-x0)(x-x1)/(x2-x0)/(x2-x1) 二、主要思路 使用线性方程组求系数构造插值公式相对复杂,可改用构造方法来插值。 对节点x i(i=0,1,…,n)中任一点x k(0<=k<=n)作一n 次多项式l k(x k),使它在该点上取值为1,而在其余点x i(i=0,1,…,k-1,k+1,…,n)上为0,则插值多项式为L n(x)=y0l0(x)+y1l1(x)+y2l2(x)+…+y n l n(x) 上式表明:n 个点x i(i=0,1,…,k-1,k+1,…,n)都是l k(x)的零点。可求得l k 三.计算方法及过程:1.输入节点的个数n 2.输入各个节点的横纵坐标 3.输入插值点 4.调用函数,返回z 函数语句与形参说明 程序源代码如下: 形参与函数类型参数意义 int n 节点的个数 double x[n](double *x)存放n个节点的值 double y[n](double *y)存放n个节点相对应的函数值 double p 指定插值点的值 double fun() 函数返回一个双精度实型函数值,即插值点p 处的近似函数值 #include #include using namespace std; #define N 100 double fun(double *x,double *y, int n,double p); void main() {int i,n; cout<<"输入节点的个数n:"; cin>>n; double x[N], y[N],p; cout<<"please input xiangliang x= "<>x[i]; cout<<"please input xiangliang y= "<>y[i]; cout<<"please input LagelangrichazhiJieDian p= "<>p;

计算方法实验报告4

计算方法实验报告(四) (一)线性方程的迭代解法 一、实验问题 利用简单迭代法,两种加速技术,牛顿法,改进牛顿法,弦割法求解习题5-1,5-2,5-3中的一题,并尽可能准确。 选取5-3:求在x=1.5附近的根。 二、问题的分析(描述算法的步骤等) (1)简单迭代法算法: 给定初始近似值,求的解。 Step 1 令i=0; Step 2 令(计算); Step 3 如果,则迭代终止,否则重复Step 2。 (2)Aitken加速法算法 Step 1 令k=0,利用简单迭代算法得到迭代序列; Step 2 令-(计算得到一个新的序列,其中k=0,1,2…);Step 3 如果,则迭代终止,否则重复Step 2。 (3)插值加速法算法 Step 1 令k=0,利用简单迭代算法得到迭代序列; Step 2 令+(计算得到一个新的序列,其中k=1,2,3…); Step 3 如果,则迭代终止,否则重复Step 2。 (4)牛顿法算法

Step 1给定初始近似值; Step 2令,其中k计算得到的序列; Step 3如果,则迭代终止,否则重复Step 2。 (5)改进牛顿法的算法 Step 1给定初始近似值; Step 2令,其中k迭代计算得到的序列; Step 3如果,则迭代终止,否则重复Step 2。 (6)弦割法算法(双点弦割法) Step 1给定初始近似值,; Step 2令其中k计算得到的序列; Step 3如果,则迭代终止,否则重复Step 2。 三、程序设计 (1)简单迭代法 利用迭代公式进行迭代运算。 #include #include #include double fun(double x) { double c=1+x*x; returnpow(c,1/3.0); } void main() { double x=1.5; double y=0; double D=1;

计算方法实验指导书.

计算方法 实 验 指 导 书 彭彬 计算机技术实验中心 2012年3月

· 实验环境: VC++ 6.0 · 实验要求:在机房做实验只是对准备好的实验方案进行验证,因此上机前要检查实验准备情况,通过 检查后方可上机。没有认真准备的学生不能上机,本次实验没有分数。实验中要注意考察和体会数值计算中出现的一些问题和现象:误差的估计,算法的稳定性、收敛性、收敛速度以及迭代初值对收敛的影响等。 · 关于计算精度:如果没有特别说明,在计算的过程中,小数点后保留5位数字,最后四舍五入到小数 点后四位数字。迭代运算的结束条件统一为 51 102 -?。在VC++ 6.0中,可使用setprecision 在流的输出中控制浮点数的显示(缺省显示6位)。演示如下: # include # include # include //输出6位精度,输出左对齐 cout<

(完整版)数值计算方法上机实习题答案

1. 设?+=1 05dx x x I n n , (1) 由递推公式n I I n n 1 51+-=-,从0I 的几个近似值出发,计算20I ; 解:易得:0I =ln6-ln5=0.1823, 程序为: I=0.182; for n=1:20 I=(-5)*I+1/n; end I 输出结果为:20I = -3.0666e+010 (2) 粗糙估计20I ,用n I I n n 51 5111+- =--,计算0I ; 因为 0095.05 6 0079.01020 201 020 ≈<<≈??dx x I dx x 所以取0087.0)0095.00079.0(2 1 20=+= I 程序为:I=0.0087; for n=1:20 I=(-1/5)*I+1/(5*n); end I 0I = 0.0083 (3) 分析结果的可靠性及产生此现象的原因(重点分析原因)。 首先分析两种递推式的误差;设第一递推式中开始时的误差为000I I E '-=,递推过程的舍入误差不计。并记n n n I I E '-=,则有01)5(5E E E n n n -==-=-Λ。因为=20E 20020)5(I E >>-,所此递推式不可靠。而在第二种递推式中n n E E E )5 1(5110-==-=Λ,误差在缩小, 所以此递推式是可靠的。出现以上运行结果的主要原因是在构造递推式过程中,考虑误差是否得到控制, 即算法是否数值稳定。 2. 求方程0210=-+x e x 的近似根,要求4 1105-+?<-k k x x ,并比较计算量。 (1) 在[0,1]上用二分法; 程序:a=0;b=1.0; while abs(b-a)>5*1e-4 c=(b+a)/2;

计算方法实验(c语言_六项试验)

计算方法实验报告 实验一 舍入误差与数值稳定性 目的与要求: 1、 通过上机编程,复习巩固以前所学程序设计语言; 2、 通过上机计算,了解舍入误差所引起的数值不稳定性。 3、 通过上机计算,了解运算次序对计算结果的影响,从而尽量避免大数吃小数的现象。 实验内容: ● 通过正反两个实例的计算,了解利用计算机进行数值计算中舍入误差 所引起的数值不稳定性,深入理解初始小的舍入误差可能造成误差积累从而对计算结果的巨大影响。 ● 通过实际编程,了解运算次序对计算结果的影响,了解实数运算符合 的结合律和分配律在计算机里不一定成立。 ● 1 对 n = 0,1,2,…,20 计算定积分 y n = dx 5x 1 n x ?+ 算法 1 利用递推公式 y n = n 1 - 5y 1n - n = 1,2,…,20 取 =+=? dx 5 x 1 1 y ln6- ln5 ≈ 0.182 322 算法 2 利用递推公式 5 15n 1y 1n -= -y n n = 20,19,…,1 注意到 1051dx 51dx 5x dx 6112611 20 1 020 1 020x x x =≤+≤=??? 取

730 008.0)126 11051(201y 20 ≈+≈ 算法一: #include #include #include #include"stdlib.h" void main(void) { float y_0=log(6.0)-log(5.0),y_1; int n=1; system("cls");/*清屏*/ printf("y[0]=%-20f",y_0); while(1) { y_1=1.0/n-5*y_0; printf("y[%d]=%-20f",n,y_1);/*输出*/ if(n>=20)break; y_0=y_1; n++; if(n%3==0)printf("\n"); } getch();/*保持用户屏幕*/ } 算法二: #include #include #include #include"stdlib.h"

数值分析实验报告总结

数值分析实验报告总结 随着电子计算机的普及与发展,科学计算已成为现代科 学的重要组成部分,因而数值计算方法的内容也愈来愈广泛和丰富。通过本学期的学习,主要掌握了一些数值方法的基本原理、具体算法,并通过编程在计算机上来实现这些算法。 算法算法是指由基本算术运算及运算顺序的规定构成的完 整的解题步骤。算法可以使用框图、算法语言、数学语言、自然语言来进行描述。具有的特征:正确性、有穷性、适用范围广、运算工作量少、使用资源少、逻辑结构简单、便于实现、计算结果可靠。 误差 计算机的计算结果通常是近似的,因此算法必有误差, 并且应能估计误差。误差是指近似值与真正值之差。绝对误差是指近似值与真正值之差或差的绝对值;相对误差:是指近似值与真正值之比或比的绝对值。误差来源见表 第三章泛函分析泛函分析概要 泛函分析是研究“函数的函数”、函数空间和它们之间 变换的一门较新的数学分支,隶属分析数学。它以各种学科

如果 a 是相容范数,且任何满足 为具体背景,在集合的基础上,把客观世界中的研究对象抽 范数 范数,是具有“长度”概念的函数。在线性代数、泛函 分析及相关的数学领域,泛函是一个函数,其为矢量空间内 的所有矢量赋予非零的正长度或大小。这里以 Cn 空间为例, Rn 空间类似。最常用的范数就是 P-范数。那么 当P 取1, 2 ,s 的时候分别是以下几种最简单的情形: 其中2-范数就是通常意义下的距离。 对于这些范数有以下不等式: 1 < n1/2 另外,若p 和q 是赫德尔共轭指标,即 1/p+1/q=1 么有赫德尔不等式: II = ||xH*y| 当p=q=2时就是柯西-许瓦兹不等式 般来讲矩阵范数除了正定性,齐次性和三角不等式之 矩阵范数通常也称为相容范数。 象为元素和空间。女口:距离空间,赋范线性空间, 内积空间。 1-范数: 1= x1 + x2 +?+ xn 2-范数: x 2=1/2 8 -范数: 8 =max oo ,那 外,还规定其必须满足相容性: 所以

计算方法实验报告习题1(浙大版)

计算方法实验报告 实验名称: 实验1 从函数表出发进行插值 1 引言 某个实际问题中,函数f (x)在区间[a,b]上存在且连续,但难以找到其表达式,只能通过实验和观测得到有限点上的函数表。有些情况虽然可以写出表达式,但结构复杂,使用不方便。所以希望构造简单函数P (x)作为f (x)的近似值。插值法是解决此类问题的一种方法。 设函数y=在插值区间[a,b]上连续,且在n+1个不同的插值节点a≤x 0,x 1,…,x n ≤b 上分别取值y 0,y 1,…,y n 。目的是要在一个性质优良、便于计算的插值函数类Φ中,求一简单函数P (x),满足插值条件P (x i )=y i (i=0,1,…,n),而在其他点x≠x i 上,作为f (x)近似值。求插值函数P (x)的方法称为插值法[1]。 2 实验目的和要求 运用Matlab 编写m 文件,定义三种插值函数,要求一次性输入整张函数表,并利用计算机选择在插值计算中所需的节点。分别通过分段线性插值、分段二次插值和全区间上拉格朗日插值计算f (0.15),f (0.31),f (0.47)的近似值。 3 算法原理与流程图 (1)原理 1.线性插值 当给定了n+1个点x 0

数值分析实验报告-Sor法分析

数值分析实验报告 一、 实验目的 1、会使用Sor 法求解一个线性方程组 2、熟悉matlab 语言并结合原理编程求方程组 3、改变ω的值观察实验结果 4、会分析实验结果 二、实验题目 编制Sor 迭代格式程序进行求解一个线性方程组的迭代计算情况,运行中要选用不同的松弛因子ω进行尝试 三、 实验原理 Jacobi 迭代和seidel 迭代对具体的线性方程组来说,逼近*x 的速度是固定不变的,遇到收敛很慢的情况时就显得很不实用。 Sor 法是一seidel 迭代为基础,并在迭代中引入参数ω以增加迭代选择的灵活性,具体为: ! 用seidel 迭代算出的,)()1()()1(k k J k k J x x x x x -=?++相减得到差向量与再用参数ω乘之再加上 )1()()()1()1()()()1(++++-=?+=k J k k k k k k x x x x x x x x ωωω,即的下一步迭代作为,由seidel 迭代的公式可以得到Sor 法的迭代格式为 n i x a x a b a x x k j n i j ij k j i j ij i ii k i k i ,2,1),()1()(1)1(11)()1( =--+-=∑∑+=+-=+ω ω 式中ω称为松弛因子。 四、 实验内容 用matlab 编程得到Sor 法求线性方程组的算法为: function [x,n]=SOR(A,b,x0,w,eps,M) if nargin==4

eps= ; M = 200; elseif nargin<4 error return : elseif nargin ==5 M = 200; end if(w<=0 || w>=2) error; return; end D=diag(diag(A)); %求A的对角矩阵L=-tril(A,-1); %求A的下三角阵( U=-triu(A,1); %求A的上三角阵B=inv(D-L*w)*((1-w)*D+w*U); f=w*inv((D-L*w))*b; x=B*x0+f; n=1; %迭代次数 while norm(x-x0)>=eps x0=x; x =B*x0+f; n=n+1; if(n>=M) (

相关文档
最新文档