《c数值分析三次样条插值自动选取步长梯形法romberg求积法列主元高斯消去法列主元lu分解法jacobi迭》由会员分享,可在线阅读,更多相关《c数值分析三次样条插值自动选取步长梯形法romberg求积法列主元高斯消去法列主元lu分解法jacobi迭(15页珍藏版)》请在金锄头文库上搜索。
1、1数值分析上机实验报告之样条插值数值分析上机实验报告之样条插值1.三次样条插值(初值条件三次样条插值(初值条件 1) :P52.9、给定函数的函数表和边界条件,求三次样条插值函数,并求的近似值。 函数表函数表 757576767777787879798080 2.7682.7682.8332.8332.9032.9032.9792.9793.0623.0623.1533.153源代码:源代码:yangtiao.cppyangtiao.cpp #include #include void main() int choice = 0; int n = 2; double xx,*x, *y,*a,
2、*b,*a1,*b1,*h,*m; coutn; x = new doublen;y = new doublen; a = new doublen;b = new doublen; a1 = new doublen;b1 = new doublen; h = new doublen-1; m = new doublen+1; coutxiyi; for (int j = 0 ; j xx; coutchoice; switch(choice) case 1: double temp1,temp2; a0 = 0; an-1 = 1; couttemp1temp2; b0 = 2*temp1;
3、bn-1 = 2*temp2; break; case 2:2 a0 = 1; an-1 = 0; b0 = 3/h0*(y1-y0); bn-1 = 3/hn-2*(yn-1-yn-2); break; for (int k = 1 ; k=0; j-) mj = a1j * mj+1 + b1j; /判别 xx 所在区间并输出结果 coutxx ) double output = 0; output = (1+2*(xx-xk)/(xk+1-xk)* pow(xx-xk+1)/(xk-xk+1),2)*yk +(1+2*(xx-xk+1)/(xk-xk+1)* pow(xx-xk)/(xk
4、+1-xk),2) *yk+1 +(xx-xk)* pow(xx-xk+1)/(xk-xk+1),2) *mk +(xx-xk+1)* pow(xx-xk)/(xk+1-xk),2) *mk+1; cout #includedouble fun(double a) return2/( 1+a*a ); double SelfSelLength(double R_a,double R_b,double e) double h = (R_b-R_a)/2; double R1 = (fun(R_a)+fun(R_b) * h; int n = 1; double R0; double S; dou
5、ble E; do/每当误差值不符合要求时,计算下一个 result 值 R0 = R1; S = 0; for (int k =1 ;k 3*e); return R1; void main() double a,b,e; cout a b e; cout #includestatic double Tri128128; double fun(double a) return sqrt(a); double Romberg(double R_a,double R_b,double e) Tri00 = (R_b-R_a)/2*(fun(R_a)+fun(R_b); int k = 0; do
6、uble E; do/每当误差值不符合要求时,计算下一行的 Tri值 k+; double temp = 0; /计算 T0k的数值 for (int i = 1 ; i e); return Trik0; void main() double a,b,e; cout a b e; cout #include#define N 4/矩阵的维数,可按需更改 static double ANN = 2,-1,0,0,-1,2,-1,0,0,-1,2,-1,0,0,-1,2;/系数矩阵 static double BN=1,0,1,0;/右端项 static double XN; int i,j,k
7、;/计数器void main() for(k = 0; k =0 ; i-) 7double Temp = 0; for (int j = i+1; j #include#define N 4/矩阵维数,可自定义static double ANN;/系数矩阵 static double BN;/右端项 static double YN;/中间项 static double XN;/输出 static double SN;/选取列主元的比较器int i,j,k;/计数器void main() cout Aij; cin Bi; for (k = 0 ; k = 0 ; i- ) doublete
8、mp = 0; for (int j =i+1 ; j #include#define N 4/矩阵的维数,可按需更改static double ANN = 2,-1,0,0,-1,2,-1,0,0,-1,2,-1,0,0,-1,2;/系数矩阵 static double BN=1,0,1,0;/右端项 static double YN;/输出比较项 static double YN; static double XN;/输出项 static double GN;/X = BX + G 的 G 矩阵int i,j,k;/计数器double eps = 0.001; int M = 100;bo
9、ol distance() /求两输出项的差的范数是否满足精度要求 double temp = 0; for (i = 0 ;i eps) return false; else return true;/满足精度要求则结束程序void main() /形成迭代矩阵 B,存放到 A 中 for (i = 0 ;i12#include#define N 4/矩阵的维数,可按需更改static double ANN = 2,-1,0,0,-1,2,-1,0,0,-1,2,-1,0,0,-1,2;/系数矩阵 static double BN=1,0,1,0;/右端项 static double YN;
10、/输出比较项 static double XN;/输出项 static double GN;/X = BX + G 的 G 矩阵 int i,j,k;/计数器 double eps = 0.001; int M = 100;bool distance() /求两输出项的差的范数是否满足精度要求 double temp = 0; for (i = 0 ;i eps) return false; else return true;/满足精度要求则结束程序void main() /形成迭代矩阵 B,存放到 A 中 for (i = 0 ;i #include14#define N 4/矩阵的维数,可
11、按需更改 static double ANN = 2,-1,0,0,-1,2,-1,0,0,-1,2,-1,0,0,-1,2;/系数矩阵 static double BN = 1,0,1,0;/右端项 static double YN;/输出比较项 static double XN;/输出项 static double GN;/X = BX + G 的 G 矩阵 int i,j,k;/计数器 double eps = 0.001; /最小容许误差 int M = 100;/最大容许比较次数 double w = 1.46; /松弛因子 bool distance() /求两输出项的差的范数是否
12、满足精度要求 double temp = 0; for (i = 0 ;i eps) return false; else return true;/满足精度要求则结束程序 void main() /形成迭代矩阵 B,存放到 A 中 for (i = 0 ;i N;i+) if (fabs(Aii) eps) cout “打印失败“endl; return; double T = Aii; for ( j = 0 ; j N;j+) Aij = -w * Aij/T; Aii = 1-w; Gi = w * Bi/T; int counter = 0; while (counter M) /迭代 for (i = 0;i N; i+) double temp = 0; for (j = 0;jN; j+) temp = temp + Aij*Xj; 15Xi = Gi + temp; if (distance()=true)break; else /交换 X,Y 向量; for( i = 0; i N ;i+) Yi = Xi; counter+; cout “迭代次数为:“counter“次。该线性方程组的解(X1,X2,X3Xn) 为:“endl; for( i = 0; i N ;i+) cout Xi “ “; 运行效果截图:运行效果截图: