文档库 最新最全的文档下载
当前位置:文档库 › 西安交通大学计算方法B上机报告

西安交通大学计算方法B上机报告

西安交通大学计算方法B上机报告
西安交通大学计算方法B上机报告

计算方法上机报告

姓名:

学号:

班级:能动上课班级:

题目及求解:

一、对以下和式计算:

?

??

??+-+-+-+=0681581482184161n n n n S n ,要求:

① 若只需保留11个有效数字,该如何进行计算; ② 若要保留30个有效数字,则又将如何进行计算;

1 算法思想

(1)根据精度要求估计所加的项数,可以使用后验误差估计,通项为: 1421114

16818485861681

n n n

a n n n n n ε??=

---<< ?+++++??; (2)为了保证计算结果的准确性,写程序时,从后向前计算; (3)使用Matlab 时,可以使用以下函数控制位数: digits(位数)或vpa(变量,精度为数)

2 算法结构

;0=s

??

?

??+-+-+-+=

681581482184161n n n n t n ; for 0,1,2,,n i =??? if 10m t -≤

end;

for ,1,2,,0n i i i =--???

;s s t =+

3 Matlab 源程序

clear; %清除工作空间变量 clc; %清除命令窗口命令 m=input('请输入有效数字的位数m='); %输入有效数字的位数 s=0;

for n=0:50

t=(1/16^n)*(4/(8*n+1)-2/(8*n+4)-1/(8*n+5)-1/(8*n+6));

if t<=10^(-m) %判断通项与精度的关系break;

end

end;

fprintf('需要将n值加到n=%d\n',n-1); %需要将n值加到的数值

for i=n-1:-1:0

t=(1/16^i)*(4/(8*i+1)-2/(8*i+4)-1/(8*i+5)-1/(8*i+6));

s=s+t; %求和运算

end

s=vpa(s,m) %控制s的精度

4 结果与分析

若保留11位有效数字,则n=7,此时求解得:

s =3.1415926536;

若保留30位有效数字时,则n=22, 此时求解得:

s =3.14159265358979323846264338328。

通过上面的实验结果可以看出,通过从后往前计算,这种算法很好的保证了计算结果要求保留的准确数字位数的要求。

二、某通信公司在一次施工中,需要在水面宽度为20米的河沟底部沿直线走向铺设一条沟底光缆。在铺设光缆之前需要对沟底的地形进行初步探测,从而估计所需光缆的长度,为工程预算提供依据。已探测到一组等分点位置的深度数据(单位:米)如下表所示:

分点0 1 2 3 4 5 6

深度9.01 8.96 7.96 7.97 8.02 9.05 10.13

分点7 8 9 10 11 12 13

深度11.18 12.26 13.28 13.32 12.61 11.29 10.22

分点14 15 16 17 18 19 20

深度9.15 7.90 7.95 8.86 9.81 10.80 10.93

①请用合适的曲线拟合所测数据点;

②预测所需光缆长度的近似值,作出铺设河底光缆的曲线图;

1 算法思想

如果使用多项式差值,则由于龙格现象,误差较大,因此,用相对较少的插值数据点作插值,可以避免大的误差,但是如果又希望将所得数据点都用上,且所用数据点越多越好,可以采用分段插值方式,即用分段多项式代替单个多项式作插值。分段多项式是由一些在相互连接的区间上的不同多项式连接而成的一条连续曲线,其中三次样条插值方法是一种具有较好“光滑性”的分段插值方法。

在本题中,假设所铺设的光缆足够柔软,在铺设过程中光缆触地走势光滑,紧贴地面,并且忽略水流对光缆的冲击。海底光缆线的长度预测模型如图2-1所示,光缆从A 点铺至B点,在某点处的深度为i h。

图2-1 海底光缆线的长度预测模型

计算光缆长度时,用如下公式:

20

()L f x ds =

?

20

'20()1()f x f x dx =+? 19

1'20

()1()k k

k f x f x dx

+==+∑?

22

()()x y =?+?∑

2 算法结构

1) For n i ,,2,1,0???=

1.1 i i M y ? 2) For 2,1=k

2.1 For k n n i ,,1,Λ-=

2.1.1 i k i i i i M x x M M ?----)/()(1

3)101h x x ?- 4)For 1-,,2,1n i Λ=

4.1 11++?-i i i h x x

4.2 b a c c h h h i i i i i i ??-?+++2;1;)/(11 4.3 i i d M ?+16

5)0000;;c M d M d n n ???λ

n n n b a b ???2;;20μ

6)1111,γμ??d b

7)获取M 的矩阵元素个数,存入m 8)For m k ,,3,2Λ=

8.1 k k k l a ?-1/μ

8.2 k k k k c l b μ??-1- 8.3 k k k k l d γγ??-1- 9)m m m M ?μγ/

10)For 1,,2,1Λ--=m m k

10.1 k k k k k M M c ??-+μγ/)(1 11)获取x 的元素个数存入s 12)k ?1

13) For 1,,2,1-=s i Λ

13.1 if i x x ≤~

then k i ?;break else k i ?+1

14)x

x x x x x h x x k k k k ?~;~;

11?-?-?--- y h x h M y x h M y x M x M k k k k k k ~/]?)6

()6(6?6[2

211331

?-+-++---

3 Matlab 源程序

clear; %清除工作空间变量 clc; %清除命令窗口命令

x=0:1:20; %产生从0到20含21个等分点的数组 X=0:0.2:20;

y=[9.01,8.96,7.96,7.97,8.02,9.05,10.13,11.18,12.26,13.28,13.32,12.61,11.29,10.22,9.15,7.90,7.95,8.86,9.81,10.80,10.93]; %等分点位置的深度数据 n=length(x); %等分点的数目 N=length(X);

%% 求三次样条插值函数s(x) M=y;

for k=2:3; %计算二阶差商并存放在M 中 for i=n:-1:k;

M(i)=(M(i)-M(i-1))/(x(i)-x(i-k+1)); end end

h(1)=x(2)-x(1); %计算三对角阵系数a,b,c及右端向量d for i=2:n-1;

h(i)=x(i+1)-x(i);

c(i)=h(i)/(h(i)+h(i-1));

a(i)=1-c(i);

b(i)=2;

d(i)=6*M(i+1);

end

M(1)=0; %选择自然边界条件

M(n)=0;

b(1)=2;

b(n)=2;

c(1)=0;

a(n)=0;

d(1)=0;

d(n)=0;

u(1)=b(1); %对三对角阵进行LU分解

y1(1)=d(1);

for k=2:n;

l(k)=a(k)/u(k-1);

u(k)=b(k)-l(k)*c(k-1);

y1(k)=d(k)-l(k)*y1(k-1);

end

M(n)=y1(n)/u(n); %追赶法求解样条参数M(i)

for k=n-1:-1:1;

M(k)=(y1(k)-c(k)*M(k+1))/u(k);

end

s=zeros(1,N);

for m=1:N;

k=1;

for i=2:n-1

if X(m)<=x(i);

k=i-1;

break;

else

k=i;

end

end

H=x(k+1)-x(k); %在各区间用三次样条插值函数计算X点处的值x1=x(k+1)-X(m);

x2=X(m)-x(k);

s(m)=(M(k)*(x1^3)/6+M(k+1)*(x2^3)/6+(y(k)-(M(k)*(H^2)/6))*x1+(y(k+1)-(M(k+1)*(H^2)/6))*x2)/H; end

%% 计算所需光缆长度

L=0; %计算所需光缆长度

for i=2:N

L=L+sqrt((X(i)-X(i-1))^2+(s(i)-s(i-1))^2);

end

disp('所需光缆长度为L=');

disp(L);

figure

plot(x,y,'*',X,s,'-') %绘制铺设河底光缆的曲线图xlabel('位置','fontsize',16); %标注坐标轴含义

ylabel('深度/m','fontsize',16);

title('铺设河底光缆的曲线图','fontsize',16);

grid;

4 结果与分析

铺设海底光缆的曲线图如图2-2所示:

图2-2 铺设河底光缆曲线图

仿真结果表明,运用分段三次样条插值所得的拟合曲线能较准确地反映铺设光缆的走势图,计算出所需光缆的长度为 L=26.4844m 。

三、 假定某天的气温变化记录如下表所示,试用数据拟合的方法找出这一天的气温变化的规律;试计算这一天的平均气温,并试估计误差。

时刻

1

2

3

4

5

6

7

8

9

10 11 12

平均气温 15 14 14 14 14 15 16 18 20 20 23 25 28 时刻

13 14 15 16 17 18 19 20 21 22 23 24

平均气温 31 34 31 29 27 25 24 22 20 18 17 16

1 算法思想

在本题中,数据点的数目较多。当数据点的数目很多时,用“多项式插值”方法做数据近似要用较高次的多项式,这不仅给计算带来困难,更主要的缺点是误差很大。用“插值样条函数”做数据近似,虽然有很好的数值性质,且计算量也不大,但存放参数

Mi 的量很大,且没有一个统一的数学公式来表示,也带来了一些不便。另一方面,在有

的实际问题中,用插值方法并不合适。当数据点的数目很大时,要求)(x p 通过所有数据点,可能会失去原数据所表示的规律。如果数据点是由测量而来的,必然带有误差,插值法要求准确通过这些不准确的数据点是不合适的。在这种情况下,不用插值标准而用其他近似标准更加合理。通常情况下,是选取i α使2E 最小,这就是最小二乘近似问题。

在本题中,采用“最小二乘法”找出这一天的气温变化的规律,使用二次函数、三次函数、四次函数以及指数型函数2

)(c t b ae C --=,计算相应的系数,估算误差,并作图比较各种函数之间的区别。

2 算法结构

本算法用正交化方法求数据的最小二乘近似。假定数据以用来生成了G ,并将

y 作为其最后一列(第1+n 列)存放。结果在a 中,ρ是误差22E 。

I 、使用二次函数、三次函数、四次函数拟合时 1. 将“时刻值”存入

i x ,数据点的个数存入m

2. 输入拟合多项式函数)(x p 的最高项次数1-=n h ,则拟合多项式函数为

)()()()(2211x g x g x g x p n n ααα+???++= , 根据给定数据点确定G For

1,,2,1,0-???=n j

For m i ,,2,1???=

2.1 1,+?j i j

i g x 2.2 1,+?n i i g y 3. For n k ,,2,1???=

3.1 [形成矩阵k Q ]

3.1.1 σ?-∑=m

k i ik

kk g g 2

/12))(sgn( 3.1.2 k kk g ωσ?-

3.1.3 For m k k j ,,2,1???++=

3.1.3.1 j jk g ω? 3.1.4 βσω?k 3.2 [变换1-k G 到k G ] 3.2.1 kk g ?σ

For 1,,,2,1+???++=n n k k j 3.2.2 t g m

k i ij i ?∑=βω/)(

3.2.3 For m k k i ,,1,???+=

3.2.3.1 ij i ij g t g ?+ω

4. [解三角方程1h Ra =] 4.1

n

nn n n a g g ?+/1.

4.2 For 1,,2,1???--=n n i 4.2.1

i

ii n

i j j ij

n i a g x g

g ?-

∑+=+/][1

1.

5. [计算误差2

2E ]

ρ

?∑+=+m

n i n i g

1

2

1

,

II 、使用指数函数拟合时

现将指数函数进行变形: 将y C =,x t

=代入2

)(c t b ae

C --=得:

2

)(c x b ae

y --=

对上式左右取对数得: 2

22ln ln bx bcx bc a y -+-=

令b bc bc a y z -==-==212

02ln ln ααα,,,

则可得多项式: 2

210x x z ααα++=

(3)Matlab 源程序

clear; %清除工作空间变量 clc; %清除命令窗口命令 x=0:24; %将时刻值存入数组 y=[15,14,14,14,14,15,16,18,20,20,23,25,28,31,34,31,29,27,25,24,22,20,18,17,16]; [~,m]=size(x); %将数据点的个数存入m T=sum(y(1:m))/m;

fprintf('一天的平均气温为T=%f\n',T); %求一天的平均气温 %% 二次、三次、四次函数的最小二乘近似

h=input('请输入拟合多项式的最高项次数='); %根据给定数据点生成矩阵G n=h+1; G=[];

for j=0:(n-1)

g=x.^j; %g(x)按列排列

G=vertcat(G,g); %g垂直连接G

end

G=G'; %转置得到矩阵G

for i=1:m %将数据y作为G的最后一列(n+1列)G(i,n+1)=y(i);

end

G;

for k=1:n %形成矩阵Q(k)

if G(k,k)>0;

sgn=1;

elseif G(k,k)==0;

sgn=0;

else sgn=-1;

end

sgm=-sgn*sqrt(sum(G(k:m,k).^2));

w=zeros(1,n);

w(k)=G(k,k)-sgm;

for j=k+1:m

w(j)=G(j,k);

end

bt=sgm*w(k);

G(k,k)=sgm; %变换Gk-1到Gk

for j=k+1:n+1

t=sum(w(k:m)*G(k:m,j))/bt;

for i=k:m;

G(i,j)=G(i,j)+t*w(i);

end

end

end

A (n)=G(n,n+1)/G(n,n); %解三角方程求系数A

for i=n-1:-1:1

A (i)=(G(i,n+1)-sum(G(i,i+1:n).*A (i+1:n)))/G(i,i);

end

e=sum(G(n+1:m,n+1).^2); %计算误差e

fprintf('%d次函数的系数是:',h); %输出系数a及误差e

disp(A);

fprintf('使用%d次函数拟合的误差是%f:',h,e);

t=0:0.05:24;

A=fliplr(A); %将系数数组左右翻转

Y=poly2sym(A); %将系数数组转化为多项式

subs(Y,'x',t);

Y=double(ans);

figure(1)

plot(x,y,'k*',t,Y,'r-'); %绘制拟合多项式函数图形

xlabel('时刻'); %标注坐标轴含义

ylabel('平均气温');

title([num2str(n-1),'次函数的最小二乘曲线']);

grid;

%% 指数函数的最小二乘近似

yy=log(y);

n=3;

G=[];

GG=[];

for j=0:(n-1)

g=x.^j; %g(x)按列排列

G=vertcat(G,g); %g垂直连接G

gg=t.^j; %g(x)按列排列

GG=vertcat(GG,gg); %g垂直连接G

end

G=G'; %转置得到矩阵G

for i=1:m %将数据y作为G的最后一列(n+1列)G(i,n+1)=yy(i);

end

G;

for k=1:n %形成矩阵Q(k)

if G(k,k)>0;

sgn=1;

elseif G(k,k)==0;

sgn=0;

else sgn=-1;

end

sgm=-sgn*sqrt(sum(G(k:m,k).^2));

w=zeros(1,n);

w(k)=G(k,k)-sgm;

for j=k+1:m

w(j)=G(j,k);

end

bt=sgm*w(k);

G(k,k)=sgm; %变换Gk-1到Gk

for j=k+1:n+1

t=sum(w(k:m)*G(k:m,j))/bt;

for i=k:m;

G(i,j)=G(i,j)+t*w(i);

end

end

end

A(n)=G(n,n+1)/G(n,n); %解三角方程求系数A for i=n-1:-1:1

A (i)=(G(i,n+1)-sum(G(i,i+1:n).*A (i+1:n)))/G(i,i);

end

b=-A(3);

c=A(2)/(2*b);

a=exp(A(1)+b*(c^2));

G(n+1:m,n+1)=exp(sum(G(n+1:m,n+1).^2));

e=sum(G(n+1:m,n+1).^2); %计算误差e

fprintf('\n指数函数的系数是:a=%f,b=%f,c=%f',a,b,c); %输出系数及误差e

fprintf('\n使用指数函数拟合的误差是:%f',e);

t=0:0.05:24;

YY=a.*exp(-b.*(t-c).^2);

figure(2)

plot(x,y,'k*',t,YY,'r-'); %绘制拟合指数函数图形xlabel('时刻'); %标注坐标轴含义ylabel('平均气温');

title(['指数函数的最小二乘曲线']);

grid;

4 结果与分析

a 二次函数:

一天的平均气温为:21.2000

二次函数的系数: 8.3063 2.6064 -0.0938

使用二次函数拟合的误差是:280.339547

二次函数的最小二乘曲线如下图3-1所示:

图3-1 二次函数的最小二乘曲线

b 三次函数:

一天的平均气温为:21.2000

三次函数的系数: 13.3880 -0.2273 0.2075 -0.0084 使用三次函数拟合的误差是:131.061822

三次函数的最小二乘曲线如图3-2所示:

图3-2 三次函数的最小二乘曲线

c四次函数:

一天的平均气温为:21.2000

四次函数的系数: 16.7939 -3.7050 0.8909 -0.0532 0.0009 使用四次函数拟合的误差是:59.04118

四次函数的最小二乘曲线如图3-3所示:

图3-3 四次函数的最小二乘曲线

d 指数函数:

一天的平均气温为:21.2000

指数函数的系数是: a=26.160286,b=0.004442,c=14.081900 使用指数函数拟合的误差是: 57.034644 指数函数的最小二乘曲线如下图所示:

图3-4 指数函数的最小二乘曲线

通过上述几种拟合可以发现,多项式的次数越高,计算拟合的效果越好,误差越小,说明结果越准确;同时,指数多项式拟合的次数虽然不高,但误差最小,说明结果最准确。

四、设计算法,求出非线性方程52645200x x -+=的所有根,并使误差不超过4

10-。

1 算法思想

首先,研究函数的形态,确定根的范围;通过剖分区间的方法确定根的位置,然后利用二分法的基本原理进行求解,找到满足精度要求的解。

二分法是产生一串区间,使新区间)1(+k I 是旧区间)(k I 的一个子区间,其长度是

)(k I 的一半,且有一个端点是)(k I 的一个端点。由区间],[)1()()

(+=k k k x x I

确定区间)1(+k I 的

方法是计算区间)(k I 的中点

)

(2

1)1()()2(+++=

k k k x x x

若0)()()

2()(<+k k x

f x f ,则取],[)2()()1(++=k k k x x I ,否则取],[)1()2()1(+++=k k k x x I ,重复这一过程即可。显然,每次迭代使区间长度减小一半,故二分法总是收敛的。

2 算法结构

1) 0)0()(f x f ?;1)1()(f x f ? 2) If 010>f f then stop

3) If 20||ε

5) x x x ?+)(21)

1()0(

6) If ||||)1(1)1(x x x ε<- then 输出x 作为根; stop

7) f x f ?)( 8) If 2||ε

9) If 01

9.1 )0(x x ?;0f f ? else

9.2 )

1(x x ?;1f f ?

10)go to 5

3 Matlab 源程序

clear; %清除工作空间变量 clc; %清除命令窗口命令 x=-100:100;

y=6*(x.^5)-45*(x.^2)+20; %非线性方程组的表达式 g=[];

for i=-100:1:100 %确定根所在的区间k=i+1;

if (y(x==i).*y(x==k)

g=[g i];

end

end

syms x;

f=6*x^5-45*x^2+20;

n=length(g); %确定根的个数

for j=1:n

x0=g(j); %求根区间左端点

x1=g(j)+1; %求根区间右端点

while (x1-x0)>=10^(-4)

if subs(f,x,x0)*subs(f,x,(x0+x1)/2)>eps

x0=(x0+x1)/2;

else

x1=(x0+x1)/2;

end

end

root=x0 %输出方程的根

end

4 结果与分析

该非线性方程组有三个实根,分别为1.8708,0.6812,-0.6545,且满足误差要求。

五、编写程序实现大规模方程组的列主元高斯消去法程序,并对所附的方程组进行求解。针对本专业中所碰到的实际问题,提炼一个使用方程组进行求解的例子,并对求解过程进行分析、求解。

1 算法思想

高斯消去法是利用现行方程组初等变换中的一种变换,即用一个不为零的数乘一个方程后加只另一个方程,使方程组变成同解的上三角方程组,然后再自下而上对上三角方程组求解。

统计西安交大期末考试试题(含答案)

西安交大统计学考试试卷 一、单项选择题(每小题2 分,共20 分) 1.在企业统计中,下列统计标志中属于数量标志的是(C) A、文化程度 B、职业 C、月工资 D、行业 2.下列属于相对数的综合指标有(B ) A、国民收入 B、人均国民收入 C、国内生产净值 D、设备台数 3.有三个企业的年利润额分别是5000 万元、8000 万元和3900 万元,则这句话中有(B)个变量? A、0 个 B、两个 C、1 个 D、3 个 4.下列变量中属于连续型变量的是(A ) A、身高 B、产品件数 C、企业人数 D、产品品种 5.下列各项中,属于时点指标的有(A ) A、库存额 B、总收入 C、平均收入 D、人均收入 6.典型调查是(B )确定调查单位的 A、随机 B、主观 C、随意 D 盲目 7.总体标准差未知时总体均值的假设检验要用到(A ): A、Z 统计量 B、t 统计量 C、统计量 D、X 统计量 8.把样本总体中全部单位数的集合称为(A ) A、样本 B、小总体 C、样本容量 D、总体容量 9.概率的取值范围是p(D ) A、大于1 B、大于-1 C、小于1 D、在0 与1 之间 10.算术平均数的离差之和等于(A ) A、零 B、1 C、-1 D、2 二、多项选择题(每小题2 分,共10 分。每题全部答对才给分,否则不计分) 1.数据的计量尺度包括(ABCD ): A、定类尺度 B、定序尺度 C、定距尺度 D、定比尺度 E、测量尺度 2.下列属于连续型变量的有(BE ): A、工人人数 B、商品销售额 C、商品库存额 D、商品库存量 E、总产值 3.测量变量离中趋势的指标有(ABE ) A、极差 B、平均差 C、几何平均数 D、众数 E、标准差 4.在工业企业的设备调查中(BDE ) A、工业企业是调查对象 B、工业企业的所有设备是调查对象 C、每台设备是 填报单位D、每台设备是调查单位E、每个工业企业是填报单位 5.下列平均数中,容易受数列中极端值影响的平均数有(ABC ) A、算术平均数 B、调和平均数 C、几何平均数 D、中位数 E、众数 三、判断题(在正确答案后写“对”,在错误答案后写“错”。每小题1 分,共10 分) 1、“性别”是品质标志。(对)

计算方法上机实验报告

. / 《计算方法》上机实验报告 班级:XXXXXX 小组成员:XXXXXXX XXXXXXX XXXXXXX XXXXXXX 任课教师:XXX 二〇一八年五月二十五日

前言 通过进行多次的上机实验,我们结合课本上的内容以及老师对我们的指导,能够较为熟练地掌握Newton 迭代法、Jacobi 迭代法、Gauss-Seidel 迭代法、Newton 插值法、Lagrange 插值法和Gauss 求积公式等六种算法的原理和使用方法,并参考课本例题进行了MATLAB 程序的编写。 以下为本次上机实验报告,按照实验内容共分为六部分。 实验一: 一、实验名称及题目: Newton 迭代法 例2.7(P38):应用Newton 迭代法求在附近的数 值解,并使其满足. 二、解题思路: 设'x 是0)(=x f 的根,选取0x 作为'x 初始近似值,过点())(,00x f x 做曲线)(x f y =的切线L ,L 的方程为))((')(000x x x f x f y -+=,求出L 与x 轴交

点的横坐标) (') (0001x f x f x x - =,称1x 为'x 的一次近似值,过点))(,(11x f x 做曲线)(x f y =的切线,求该切线与x 轴的横坐标) (') (1112x f x f x x - =称2x 为'x 的二次近似值,重复以上过程,得'x 的近似值序列{}n x ,把) (') (1n n n n x f x f x x - =+称为'x 的1+n 次近似值,这种求解方法就是牛顿迭代法。 三、Matlab 程序代码: function newton_iteration(x0,tol) syms z %定义自变量 format long %定义精度 f=z*z*z-z-1; f1=diff(f);%求导 y=subs(f,z,x0); y1=subs(f1,z,x0);%向函数中代值 x1=x0-y/y1; k=1; while abs(x1-x0)>=tol x0=x1; y=subs(f,z,x0); y1=subs(f1,z,x0); x1=x0-y/y1;k=k+1; end x=double(x1) K 四、运行结果:

西安交通大学计算方法B上机试题

1.计算以下和式:01421181 84858616n n S n n n n ∞ =?? =--- ?++++??∑ ,要求: (1)若保留11个有效数字,给出计算结果,并评价计算的算法; (2)若要保留30个有效数字,则又将如何进行计算。 (1)题目分析 该题是对无穷级数求和,因此在使用matlab 进行累加时需要一个累加的终止条件。这里令?? ? ??+-+-+-+= 681581482184161n n n n a n n ,则 ()()1.016 1 6855844864816114851384128698161 681581482184161148113811282984161111<< ? ??? ????? ??++++++???? ????? ??++++++=??? ????? ??+-+-+-+??? ????? ??+-+-+-+=+++n n n n n n n n n n n n n n n n a a n n n n n n 故近似取其误差为1+≈k a ε,并且有m -1m -111021 21 ?=?=≈+βεk a , (2)算法依据 使用matlab 编程时用digits 函数和vpa 函数来控制位数。 (3)Matlab 运行程序 %%保留11位有效数字 k1=11; s1=0;%用于存储这一步计算值 for n=0:50 a=(1/16^n)*(4/(8*n+1)-2/(8*n+4)-1/(8*n+5)-1/(8*n+6)); n1=n-1; if a<=0.5*10^(1-k1) break end end; for i=0:1:n1 t=(1/16^i)*(4/(8*i+1)-2/(8*i+4)-1/(8*i+5)-1/(8*i+6)); s1=s1+t; end s11=vpa(s1,k1); disp('保留11位有效数字的结果为:');disp(s11); disp('此时n 值为:');disp(n1); %%保留30位有效数字 clear all; k2=30;

计算方法上机实验报告

《计算方法》上机实验报告 班级:XXXXXX 小组成员:XXXXXXX XXXXXXX XXXXXXX XXXXXXX 任课教师:XXX 二〇一八年五月二十五日

前言 通过进行多次的上机实验,我们结合课本上的内容以及老师对我们的指导,能够较为熟练地掌握Newton 迭代法、Jacobi 迭代法、Gauss-Seidel 迭代法、Newton 插值法、Lagrange 插值法和Gauss 求积公式等六种算法的原理和使用方法,并参考课本例题进行了MATLAB 程序的编写。 以下为本次上机实验报告,按照实验内容共分为六部分。 实验一: 一、实验名称及题目: Newton 迭代法 例2.7(P38):应用Newton 迭代法求 在 附近的数值解 ,并使其满足 . 二、解题思路: 设'x 是0)(=x f 的根,选取0x 作为'x 初始近似值,过点())(,00x f x 做曲线)(x f y =的切线L ,L 的方程为))((')(000x x x f x f y -+=,求出L 与x 轴交点的横坐标) (') (0001x f x f x x - =,称1x 为'x 的一次近似值,过点))(,(11x f x 做曲线)(x f y =的切线,求该切线与x 轴的横坐标) (') (1112x f x f x x - =称2x 为'x

的二次近似值,重复以上过程,得'x 的近似值序列{}n x ,把 ) (') (1n n n n x f x f x x - =+称为'x 的1+n 次近似值,这种求解方法就是牛顿迭代法。 三、Matlab 程序代码: function newton_iteration(x0,tol) syms z %定义自变量 format long %定义精度 f=z*z*z-z-1; f1=diff(f);%求导 y=subs(f,z,x0); y1=subs(f1,z,x0);%向函数中代值 x1=x0-y/y1; k=1; while abs(x1-x0)>=tol x0=x1; y=subs(f,z,x0); y1=subs(f1,z,x0); x1=x0-y/y1;k=k+1; end x=double(x1) K 四、运行结果: 实验二:

西安交通大学计算方法B上机报告

计算方法上机报告

姓名: 学号: 班级:能动上课班级:

题目及求解: 一、对以下和式计算: ∑ ∞ ? ?? ??+-+-+-+=0681581482184161n n n n S n ,要求: ① 若只需保留11个有效数字,该如何进行计算; ② 若要保留30个有效数字,则又将如何进行计算; 1 算法思想 (1)根据精度要求估计所加的项数,可以使用后验误差估计,通项为: 1421114 16818485861681 n n n a n n n n n ε??= ---<< ?+++++??; (2)为了保证计算结果的准确性,写程序时,从后向前计算; (3)使用Matlab 时,可以使用以下函数控制位数: digits(位数)或vpa(变量,精度为数) 2 算法结构 ;0=s ?? ? ??+-+-+-+= 681581482184161n n n n t n ; for 0,1,2,,n i =??? if 10m t -≤ end; for ,1,2,,0n i i i =--??? ;s s t =+ 3 Matlab 源程序 clear; %清除工作空间变量 clc; %清除命令窗口命令 m=input('请输入有效数字的位数m='); %输入有效数字的位数 s=0;

for n=0:50 t=(1/16^n)*(4/(8*n+1)-2/(8*n+4)-1/(8*n+5)-1/(8*n+6)); if t<=10^(-m) %判断通项与精度的关系break; end end; fprintf('需要将n值加到n=%d\n',n-1); %需要将n值加到的数值 for i=n-1:-1:0 t=(1/16^i)*(4/(8*i+1)-2/(8*i+4)-1/(8*i+5)-1/(8*i+6)); s=s+t; %求和运算 end s=vpa(s,m) %控制s的精度 4 结果与分析 若保留11位有效数字,则n=7,此时求解得: s =3.1415926536; 若保留30位有效数字时,则n=22, 此时求解得: s =3.8。 通过上面的实验结果可以看出,通过从后往前计算,这种算法很好的保证了计算结果要求保留的准确数字位数的要求。 二、某通信公司在一次施工中,需要在水面宽度为20米的河沟底部沿直线走向铺设一条沟底光缆。在铺设光缆之前需要对沟底的地形进行初步探测,从而估计所需光缆的长度,为工程预算提供依据。已探测到一组等分点位置的深度数据(单位:米)如下表所示:

成本会计-学习指南 西交大考试题库及答案

成本会计-学习指南 一、单项选择题 1.产品成本计算分类法的成本计算对象是(A ) A.产品类别B.产品品种 C.产品规格D.产品加工步骤 2.生产经营费用按费用的(B )分类形成要素费用。 A.经济内容B.经济性质 C.经济用途D.经济作用 3.对大量大批生产的产品,应当以(A )作为产品成本计算对象。 A.产品的品种B.产品的批次 C.产品的生产步骤D.产品的类别 4.最基本的产品成本计算方法是(C ) A.分批法B.分步法 C.品种法D.分类法 5.李某本月生产甲零件2000只,其中合格品1950只,工废品30只,料废品20只。本月李某计算计件工资的甲零件数量是( C ) A.2000 B.1980 C.1970 D.1950 6.成本会计的对象是(D ) A.产品生产成本的形成 B.各项期间费用的支出和归集 C. 生产费用和期间费用 D.各行业企业生产经营业务的成本和有关的期间费用 7.下列制造费用分配方法中,使制造费用账户可能出现余额的是(D )A.工时比例法B.工资比例法 C.机时比例法D.年度计划分配率法 8.成本会计的最基本职能是(C ) A.成本预测B.成本决策 C.成本核算D.成本分析 9.下列企业中,适合运用品种法计算产品成本的是(A ) A.发电厂B.纺织厂 C.拖拉机厂D.造船厂 10.王某去年8月参加工作(病假扣发比例为40%),月标准工资418元,本月日历天数为31天,出勤19天,双休日8天,病假4天(合双休日1天)。若按月薪制计算,月工作天数为20.9天,则本月应付王某的计时工资是( B )A.386元B.394元C.396元D.418元 11.下列报表中不属于产品成本报表的是(D ) A.主要产品单位成本表B.制造费用明细表 C.营业费用明细表D.主营业务收支明细表 12.甲、乙两种产品的重量不同、材料单位消耗量基本相同、企业没有制定材料单位消耗定额、材料领用时未能区分每种材料的消耗量,则对甲、乙产品共同消耗的材料费用,可以用作为分配标准的是( B )

计算方法第二章方程求根上机报告

实验报告名称 班级:学号:姓名:成绩: 1实验目的 1)通过对二分法与牛顿迭代法作编程练习与上级运算,进一步体会二分法与牛顿迭代法的不同特点。 2)编写割线迭代法的程序,求非线性迭代法的解,并与牛顿迭代法。 2 实验内容 用牛顿法和割线法求下列方程的根 x^2-e^x=0; x*e^x-1=0; lgx+x-2=0; 3实验步骤 1)根据二分法和牛顿迭代法,割线法的算法编写相应的求根函数; 2)将题中所给参数带入二分法函数,确定大致区间; 3)用牛顿迭代法和割线法分别对方程进行求解; 3 程序设计 牛顿迭代法x0=1.0; N=100; k=0; eps=5e-6; delta=1e-6; while(1) x1=x0-fc1(x0)/fc2(x0); k=k+1; if k>N disp('Newmethod failed')

break end if(abs(x1-x0)=delta) c=x1; x1=cutnext(x0,x1); x0=c; %x0 x1μYí?μ?μ?x1 x2 è?è?±£′??úx0 x1 end k=k+1; if k>N disp('Cutline method failed') break; end if(abs(x1-x0)

数值分析上机实验报告

数值分析上机实验报告

《数值分析》上机实验报告 1.用Newton 法求方程 X 7-X 4+14=0 在(0.1,1.9)中的近似根(初始近似值取为区间端点,迭代6次或误差小于0.00001)。 1.1 理论依据: 设函数在有限区间[a ,b]上二阶导数存在,且满足条件 {}α?上的惟一解在区间平方收敛于方程所生的迭代序列 迭代过程由则对任意初始近似值达到的一个中使是其中上不变号 在区间],[0)(3,2,1,0,) (') ()(],,[x |))(),((|,|,)(||)(|.4;0)(.3],[)(.20 )()(.110......b a x f x k x f x f x x x Newton b a b f a f mir b a c x f a b c f x f b a x f b f x f k k k k k k ==- ==∈≤-≠>+ 令 )9.1()9.1(0)8(4233642)(0)16(71127)(0)9.1(,0)1.0(,1428)(3 2 2 5 333647>?''<-=-=''<-=-='<>+-=f f x x x x x f x x x x x f f f x x x f 故以1.9为起点 ?? ?? ? ='- =+9.1)()(01x x f x f x x k k k k 如此一次一次的迭代,逼近x 的真实根。当前后两个的差<=ε时,就认为求出了近似的根。本程序用Newton 法求代数方程(最高次数不大于10)在(a,b )区间的根。

1.2 C语言程序原代码: #include #include main() {double x2,f,f1; double x1=1.9; //取初值为1.9 do {x2=x1; f=pow(x2,7)-28*pow(x2,4)+14; f1=7*pow(x2,6)-4*28*pow(x2,3); x1=x2-f/f1;} while(fabs(x1-x2)>=0.00001||x1<0.1); //限制循环次数printf("计算结果:x=%f\n",x1);} 1.3 运行结果: 1.4 MATLAB上机程序 function y=Newton(f,df,x0,eps,M) d=0; for k=1:M if feval(df,x0)==0 d=2;break else x1=x0-feval(f,x0)/feval(df,x0); end e=abs(x1-x0); x0=x1; if e<=eps&&abs(feval(f,x1))<=eps d=1;break end end

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

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

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

西安交通大学计算方法B大作业

计算方法上机报告 姓名: 学号: 班级:

目录 题目一------------------------------------------------------------------------------------------ - 4 - 1.1题目内容 ---------------------------------------------------------------------------- - 4 - 1.2算法思想 ---------------------------------------------------------------------------- - 4 - 1.3Matlab源程序----------------------------------------------------------------------- - 5 - 1.4计算结果及总结 ------------------------------------------------------------------- - 5 - 题目二------------------------------------------------------------------------------------------ - 7 - 2.1题目内容 ---------------------------------------------------------------------------- - 7 - 2.2算法思想 ---------------------------------------------------------------------------- - 7 - 2.3 Matlab源程序---------------------------------------------------------------------- - 8 - 2.4计算结果及总结 ------------------------------------------------------------------- - 9 - 题目三----------------------------------------------------------------------------------------- - 11 - 3.1题目内容 --------------------------------------------------------------------------- - 11 - 3.2算法思想 --------------------------------------------------------------------------- - 11 - 3.3Matlab源程序---------------------------------------------------------------------- - 13 - 3.4计算结果及总结 ------------------------------------------------------------------ - 14 - 题目四----------------------------------------------------------------------------------------- - 15 - 4.1题目内容 --------------------------------------------------------------------------- - 15 - 4.2算法思想 --------------------------------------------------------------------------- - 15 - 4.3Matlab源程序---------------------------------------------------------------------- - 15 - 4.4计算结果及总结 ------------------------------------------------------------------ - 16 - 题目五----------------------------------------------------------------------------------------- - 18 -

计算方法上机实习题大作业(实验报告).

计算方法实验报告 班级: 学号: 姓名: 成绩: 1 舍入误差及稳定性 一、实验目的 (1)通过上机编程,复习巩固以前所学程序设计语言及上机操作指令; (2)通过上机计算,了解舍入误差所引起的数值不稳定性 二、实验内容 1、用两种不同的顺序计算10000 21n n -=∑,分析其误差的变化 2、已知连分数() 1 01223//(.../)n n a f b b a b a a b =+ +++,利用下面的算法计算f : 1 1 ,i n n i i i a d b d b d ++==+ (1,2,...,0 i n n =-- 0f d = 写一程序,读入011,,,...,,,...,,n n n b b b a a 计算并打印f 3、给出一个有效的算法和一个无效的算法计算积分 1 041 n n x y dx x =+? (0,1,...,1 n = 4、设2 2 11N N j S j == -∑ ,已知其精确值为1311221N N ?? -- ?+?? (1)编制按从大到小的顺序计算N S 的程序 (2)编制按从小到大的顺序计算N S 的程序 (3)按两种顺序分别计算10001000030000,,,S S S 并指出有效位数 三、实验步骤、程序设计、实验结果及分析 1、用两种不同的顺序计算10000 2 1n n -=∑,分析其误差的变化 (1)实验步骤: 分别从1~10000和从10000~1两种顺序进行计算,应包含的头文件有stdio.h 和math.h (2)程序设计: a.顺序计算

#include #include void main() { double sum=0; int n=1; while(1) { sum=sum+(1/pow(n,2)); if(n%1000==0)printf("sun[%d]=%-30f",n,sum); if(n>=10000)break; n++; } printf("sum[%d]=%f\n",n,sum); } b.逆序计算 #include #include void main() { double sum=0; int n=10000; while(1) { sum=sum+(1/pow(n,2)); if(n%1000==0) printf("sum[%d]=%-30f",n,sum); if(n<=1)break; n--; } printf("sum[%d]=%f\n",n,sum); } (3)实验结果及分析: 程序运行结果: a.顺序计算

计算方法实验报告格式

计算方法实验报告格式 小组名称: 组长姓名(班号): 小组成员姓名(班号): 按贡献排序情况: 指导教师评语: 小组所得分数: 一个完整的实验,应包括数据准备、理论基础、实验内容及方法,最终对实验结果进行分析,以达到对理论知识的感性认识,进一步加深对相关算法的理解,数值实验以实验报告形式完成,实验报告格式如下: 一、实验名称 实验者可根据报告形式需要适当写出. 二、实验目的及要求 首先要求做实验者明确,为什么要做某个实验,实验目的是什么,做完该实验应达到什么结果,在实验过程中的注意事项,实验方法对结果的影响也可以以实验目的的形式列出. 三、算法描述(实验原理与基础理论) 数值实验本身就是为了加深对基础理论及方法的理解而设置的,所以要求将实验涉及到的理论基础,算法原理详尽列出. 四、实验内容 实验内容主要包括实验的实施方案、步骤、实验数据准备、实验的算法以及可能用到的仪器设备. 五、程序流程图 画出程序实现过程的流程图,以便更好的对程序执行的过程有清楚的认识,在程序调试过程中更容易发现问题. 六、实验结果 实验结果应包括实验的原始数据、中间结果及实验的最终结果,复杂的结果可以用表格

形式列出,较为简单的结果可以与实验结果分析合并出现. 七、实验结果分析 实验结果分析包括对对算法的理解与分析、改进与建议. 数值实验报告范例 为了更好地做好数值实验并写出规范的数值实验报告,下面给出一简单范例供读者参考. 数值实验报告 小组名称: 小组成员(班号): 按贡献排序情况: 指导教师评语: 小组所得分数: 一、实验名称 误差传播与算法稳定性. 二、实验目的 1.理解数值计算稳定性的概念. 2.了解数值计算方法的必要性. 3.体会数值计算的收敛性与收敛速度. 三、实验内容 计算dx x x I n n ? += 1 10 ,1,2,,10n = . 四、算法描述 由 dx x x I n n ? += 1 10 ,知 dx x x I n n ?+=--101110,则

西交大计算方法上机报告

计算方法(B)实验报告 姓名: 学号: 学院: 专业:

实验一 三对角方程组Tx f =的求解 一、 实验目的 掌握三对角方程组Tx f =求解的方法。 二、 实验内容 求三对角方程组Tx f =的解,其中: 4 -1 -1 4 -1 -1 4 1 -1 4T ????????=?? ?? ???? , 3223f ?? ? ? ?= ? ? ??? 三、 算法组织 设系数矩阵为三对角矩阵 11222333111 b c a b c a b c a b c b n n n n T ---???????? =?????? ?????? 则方程组Tx f =称为三对角方程组。 设矩阵T 非奇异,T 可分解为T=LU ,其中L 为下三角矩阵,U 为单位上三角矩阵,记 1 1 212 313 1 1 1111 ,11n n n n n r l r l r L U l r l μμμμμ---???? ? ? ? ? ? ?== ? ? ? ? ? ? ? ? ? ?? ? ? ? 可先依次求出,L U 中的元素后,令Ux y =,先求解下三角方程组Ly f =得出 y ,再求解上三角方程组Ux y =。 追赶法的算法组织如下: 1.输入三对角矩阵T 和右端向量f ;

2.将Tx f =压缩为四个一维数组{}{}{}{}i i i i a b c d 、、、,{}{}{}i i i a b c 、、是T 的三对角线性方程组的三个对角,{}i d 是右端向量。将分解矩阵压缩为三个一维数组 {}{}{}i i i l r μ、、。 3.对T 做Crout 分解(也可以用Doolittle 分解)导出追赶法的计算步骤如下: 1111,b r c μ== for 2i n = 111, , ,i i i i i i i i i i i i i l a b a r r c y d l y μμ---==-==- end 4.回代求解x /n n n x y μ= for 11i n =- 1()/i i i i i x y c x μ+=- end 5. 停止,输出结果。 四、 MATLAB 程序 MATLAB 程序见附件1. 五、 结果及分析 实验结果为: (1.0000 1.0000 1.0000 1.0000)T x =

计算方法B上机报告

计算方法B 上机报告 第1题 某通信公司在一次施工中,需要在水面宽度为20米的河沟底部沿直线走向铺设一条沟底光缆。在铺设光缆之前需要对沟底的地形进行初步探测,从而估计所需光缆的长度,为工程预算提供依据。已探测到一组等分点位置的深度数据(单位:米)如下表所示: (1)请用合适的曲线拟合所测数据点; (2)估算所需光缆长度的近似值,并作出铺设河底光缆的曲线图; 问题分析和算法思想: 本题的主要目的是对21个测量数据进行拟合,同时对拟合曲线进行线积分即可得到河底光缆长度的近似值,可以用的插值方法很多:多项式插值、Lagrange 插值、Newton 插值、三次样条插值等。由于数值点较多时,采用高次多项式插值将产生很大的误差,用拉格朗日插值多项式会出现龙格现象。故为了将所有的数据点都用上,且题中光缆为柔性,可光滑铺设于水底,鉴于此特性,采用三次样条插值的方法较为合适。 计算光缆长度近似值,只需将每两点之间的距离算出,然后依次相加,所得的折线长度,即为光缆长度的近似值。 光缆长度计算公式: 19 1 k k k l +===∑? ? ? 算法结构: 三次样条算法结构见《计算方法教程》P110。 源程序: clear;clc; x=0:20;

y=[9.01 8.96 7.96 7.97 8.02 9.05 10.13 11.18 12.26 13.28 13.32 12.61 11.29 10.22 9.15 7.90 7.95 8.86 9.81 10.80 10.93]; d=y; plot(x,y,'k.','markersize',15) hold on %%%计算二阶差商 for k=1:2 for i=21:-1:(k+1) d(i)=(d(i)-d(i-1))/(x(i)-x(i-k)); end end %%%假定d的边界条件,采用自然三次样条 for i=2:20 d(i)=6*d(i+1); end d(1)=0; d(21)=0; %%%追赶法求解带状矩阵的m值 a=0.5*ones(1,21); b=2*ones(1,21); c=0.5*ones(1,21); a(1)=0;c(21)=0; u=ones(1,21); u(1)=b(1); r=c; yy(1)=d(1); %%%追的过程 for k=2:21 l(k)=a(k)/u(k-1); u(k)=b(k)-l(k)*r(k-1); yy(k)=d(k)-l(k)*yy(k-1); end %%%赶的过程 m(21)=yy(21)/u(21); for k=20:-1:1 m(k)=(yy(k)-r(k)*m(k+1))/u(k); end %%%利用插值点画出拟合曲线 k=1; nn=100; xx=linspace(0,20,nn); l=0; for j=1:nn for i=2:20 if xx(j)<=x(i) k=i;

西安电子科技大学出版社计算方法上机答案

西安电子科技大学出版社《计算方法》任传祥等编著第九章计算方法上机参考答案 实验一,算法一 #include #include double I0=log(6)/log(5),I1; int n=1; main () { while(1) { I1=1.0/(n)-I0*5.0; printf("%d %lf\n", n,I1); if(n>=20) break; else I0=I1; n++; } } 实验一,算法二 #include #include double I0=(1/105.0+1/126.0)/2,I1; int n=20; main () { printf("%d %lf\n", n,I0); while(1) { I1=1.0/(5.0*n)-I0/5.0; printf("%d %lf\n", n-1,I1); if(n<2) break; else I0=I1; n--; } } 实验二,二分法

#include #include #define esp 1e-3 double f(double x); main () { double a=1,b=2,x; while(fabs(b-a)>esp) { x=(a+b)/2; printf("x=%lf\n",x); if(f(x)==0) break; else if(f(x)*f(a)<0)b=x; else a=x; } } double f(double x) { return pow(x,3)-x-1; } 实验二,牛顿迭代法 #include #include double f(double x); double f1(double x); #define esp 1e-3 void main() {double x0 = 1.5, x1; x1 = x0 - f(x0) / f1(x0); printf("x=%lf\n", x1); x0 = x1; x1 = x0 - f(x0) / f1(x0); printf("x=%lf\n", x1); while (fabs(x1 - x0)>esp){ x0 = x1; x1 = x0 - f(x0) / f1(x0); printf("x=%lf\n", x1);} } double f(double x) {return pow(x, 3) - x - 1;} double f1(double x) {return 3 * x*x - 1;}

计算方法实验报告册

实验一——插值方法 实验学时:4 实验类型:设计 实验要求:必修 一 实验目的 通过本次上机实习,能够进一步加深对各种插值算法的理解;学会使用用三种类型的插值函数的数学模型、基本算法,结合相应软件(如VC/VB/Delphi/Matlab/JAVA/Turbo C )编程实现数值方法的求解。并用该软件的绘图功能来显示插值函数,使其计算结果更加直观和形象化。 二 实验内容 通过程序求出插值函数的表达式是比较麻烦的,常用的方法是描出插值曲线上尽量密集的有限个采样点,并用这有限个采样点的连线,即折线,近似插值曲线。取点越密集,所得折线就越逼近理论上的插值曲线。本实验中将所取的点的横坐标存放于动态数组[]X n 中,通过插值方法计算得到的对应纵坐标存放 于动态数组[]Y n 中。 以Visual C++.Net 2005为例。 本实验将Lagrange 插值、Newton 插值和三次样条插值实现为一个C++类CInterpolation ,并在Button 单击事件中调用该类相应函数,得出插值结果并画出图像。CInterpolation 类为 class CInterpolation { public : CInterpolation();//构造函数 CInterpolation(float *x1, float *y1, int n1);//结点横坐标、纵坐标、下标上限 ~ CInterpolation();//析构函数 ………… ………… int n, N;//结点下标上限,采样点下标上限 float *x, *y, *X;//分别存放结点横坐标、结点纵坐标、采样点横坐标 float *p_H,*p_Alpha,*p_Beta,*p_a,*p_b,*p_c,*p_d,*p_m;//样条插值用到的公有指针,分别存放 i h ,i α,i β,i a ,i b ,i c ,i d 和i m }; 其中,有参数的构造函数为 CInterpolation(float *x1, float *y1, int n1) { //动态数组x1,y1中存放结点的横、纵坐标,n1是结点下标上限(即n1+1个结点) n=n1; N=x1[n]-x1[0]; X=new float [N+1]; x=new float [n+1]; y=new float [n+1];

西交计算方法A上机大作业

计算方法A 上机大作业 1. 共轭梯度法求解线性方程组 算法原理:由定理3.4.1可知系数矩阵A 是对称正定矩阵的线性方程组Ax=b 的解与求解二次函数1()2 T T f x x Ax b x =-极小点具有等价性,所以可以利用共轭梯度法求解1()2 T T f x x Ax b x = -的极小点来达到求解Ax=b 的目的。 共轭梯度法在形式上具有迭代法的特征,在给定初始值情况下,根据迭代公式: (1)()()k k k k x x d α+=+ 产生的迭代序列(1)(2)(3)x x x ,,,... 在无舍入误差假定下,最多经过n 次迭代,就可求得()f x 的最小值,也就是方程Ax=b 的解。 首先导出最佳步长k α的计算式。 假设迭代点()k x 和搜索方向()k d 已经给定,便可以通过()()()() k k f x d φαα=+的极小化 ()()min ()()k k f x d φαα=+ 来求得,根据多元复合函数的求导法则得: ()()()'()()k k T k f x d d φαα=?+ 令'()0φα=,得到: ()() ()()k T k k k T k r d d Ad α=,其中()()k k r b Ax =- 然后确定搜索方向()k d 。给定初始向量(0)x 后,由于负梯度方向是函数下降最快的方向,故第一次迭代取搜索方向(0) (0)(0)(0)()d r f x b Ax ==-?=-。令 (1)(0)00x x d α=+ 其中(0)(0)0(0)(0) T T r d d Ad α=。第二次迭代时,从(1) x 出发的搜索方向不再取(1)r ,而是选取(1) (1)(0)0d r d β=+,使得(1)d 与(0)d 是关于矩阵A 的共轭向量,由此可 求得参数0β:

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

计算方法上机实验报告——拉格朗日插值问题 一、方法原理 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;

相关文档
相关文档 最新文档