重庆大学
学生实验报告
实验课程名称 数值计算
开课实验室 数统学院
学 院xxxx学院年级xxx专业班xxxx
学生姓名 xxx 学号 xxxxxxx
开课时间 xxxx 至 xxxx学年第 x 学期
实验一:
实验三:
实验四:
实验五:
第二篇:大二下学期数值计算实验报告答案C++
#include<iostream>
#include<cmath>
#define M 100
using namespace std;
int main(){
int i,j,n,k,t;
float a[M][M],x[M],temp,sum=0;
cout<<"输入方程的阶数:"<<endl;
cin>>n;
cout<<" 输入方程矩阵:"<<endl;
for(i=0;i<n;i++) //输入矩阵
for(j=0;j<n+1;j++)
cin>>a[i][j];
for(k=0;k<n+1;k++){
t=k;
for(i=t+1;i<n;i++) //选出最大元素
if((fabs(a[t][k]))<(fabs(a[i][k])))
t=i;
if(t!=k) //交换行元素
for(i=k+1;i<n+1;i++){
temp=a[k][i];
a[k][i]=a[t][i];
a[t][i]=temp;
}
for(i=k+1;i<n;i++){ //消元
for(j=0;j<n+1;j++)
a[i][j]-=(a[i][k]/a[k][k])*a[k][j];
}
}
x[n-1]=a[n-1][n]/a[n-1][n-1]; //解出Xn
for(i=n-2;i>=0;i--){ //解出其它解
for(j=i;j<n;j++){
if(j==i) continue;
sum+=a[i][j]*x[j];
}
x[i]=(a[i][n]-sum)/a[i][i];
}
printf("最终解得: \n");
for(i=0;i<n;i++) //输出结果
cout<<"x["<<i<<"]="<<x[i]<<endl;
return 0;
}
#include<iostream>
#include<stdlib.h>
using namespace std;
int main()
{
int n;
do{
cout<<"输入三对角方程组的变量的数目N:";
cin>>n;
}while(n<1);
cout<<"请依次输入三对角方程组每行的数据(0元素除外):\n";
double a[100],b[100],c[100],f[100];
cin>>*b>>*c>>*f;
for(int i=1;i<n-1;++i) cin>>*(a+i-1)>>*(b+i)>>*(c+i)>>*(f+i);
cin>>*(a+i-1)>>*(b+i)>>*(f+i);
for(i=0;i<n-1;++i){
*(c+i)/=(*(b+i));
*(b+i+1)-=(*(a+i))*(*(c+i));
}
*b=(*f)/(*b);
for(i=1;i<n;++i)
*(b+i)=((*(f+i))-(*(a+i-1))*(*(b+i-1)))/(*(b+i));
*(a+n-1)=*(b+n-1);
for(i=n-2;i>=0;--i)
*(a+i)=*(b+i)-(*(c+i))*(*(a+i+1));
cout<<"方程的解如下:\n";
for(i=1;i<n;++i) cout<<"X["<<i<<"]:"<<*(a+i-1)<<endl;
return 0;
}
#include<iostream>
#include<cmath>
using namespace std;
void main()
{
int i,j,n,x;
double m=0,p,a[100],b[100];
cout<<"插入节点数:"; //得到节点数
cin>>n;
cout<<"请输入节点x值:"<<endl; //得到节点值,即X
for(i=0;i<n;i++)
cin>>a[i];
cout<<"请输入f(x)值:"<<endl; //得到Y
for(i=0;i<n;i++)
cin>>b[i];
cout<<"请输入x1:"<<endl; //取未知X
cin>>x;
for(i=0;i<n;i++){ //用拉格朗日插值法求解
p=1;
for (j=0;j<n;j++){
if(i!=j)
p*=(x-a[j])/(a[i]-a[j]);
else
continue;
}
m+=p*b[i];
}
cout<<m<<endl; //输出结果的Y
}
#include <iostream>
using namespace std;
int main()
{
int n;
double x;
double a[100],f[100];
do{
cout<<"输入插值点的数目n:";
cin>>n;
}while(n<1);
cout<<"输入插值点的数据:"<<endl;
for(int i=0;i<n;++i)
cin>>*(a+i)>>*(f+i);
for(i=0;i<n;++i)
for(int j=n-1;j>i;--j)
*(f+j)=(*(f+j)-*(f+j-1))/(*(a+j)-*(a+j-i-1));
cout<<"输入所求的横坐标:";
cin>>x;
double result=*f;
for(i=1;i<n;++i) {
double temp=1;
for(int j=0;j<i;++j)
temp*=(x-*(a+j));
result+=(*(f+i))*temp;
}
cout<<"所求的函数值为:"<<result<<endl;
return 1;
}
#include<iostream>
#include<cmath>
using namespace std;
double fun(double a)
{
if(a==0)
a+=0.00000000001;
return sin(a)/a;
}
double T(double a,double b,double E)
{
double h=(b-a)/2;
double r1=(fun(a)+fun(b))*h;
int n=1;
double r0,s,e;
do{r0=r1;
s=0;
for(int i=0;i<=(n-1);i++)
s=s+fun((b-a)*i/n+a+(b-a)/(2*n));
r1=r0/2+s*h/n;
e=fabs(r1-r0);
n=2*n;
}while(e>3*E);
cout<<n<<endl;
return r1;
}
void main(){
double a,b,e;
cout<<"输入待求积分的下届a和上届b及精度要求e"<<endl;
cin>>a>>b>>e;
cout<<"可求得积分:"<<T(a,b,e)<<endl;
}
#include <iostream>
#include <math.h>
using namespace std;
double fun(double x);
int main()
{
double a=0,b=1,eps=0.0000001;
double T[10];
int l=1;
T[0]=(b-a)*(fun(a)+fun(b))/2;
double T1,T2;
int flag;
do{
flag=0;
int n=pow(2,l-1);
double h=(b-a)/n;
double temp=0;
for(int i=0;i<n;++i)
temp+=fun(a+(i+1.0/2)*h);
T1=T[0]/2+h*temp/2;
for(int m=1;m<l;++m){
T2=(pow(4,m)*T1-T[m-1])/(pow(4,m)-1);
T[m-1]=T1;
T1=T2;
}
T2=(pow(4,1)*T1-T[l-1])/(pow(4,1)-1);
if(fabs(T2-T[l-1])>eps){
T[l-1]=T1;
T[l]=T2;
++l;
flag=1;
}
}while(flag);
cout<<"所求积分为:"<<T2<<endl;
return 0;
}
double fun(double x)
{
if(x==0) return 1;
return(sin(x)/x);
}
#include <stdlib.h>
#include <iostream.h>
int main() {
double h=0.25,a,b,d=5;
double x=0.0,y=2.0;
cout<<"x\ty\n";
cout<<x<<"\t"<<y<<endl;
while(x<d){
a=y+h*(-x*y*y);
x+=h;
b=y+h*(-x*a*a);
y=(b+a)/2.0;
cout<<x<<"\t"<<y<<endl;
}
return 0;
}
#include <iostream.h>
#include <stdlib.h>
int main() {
double h=0.25,k1=0,k2=0,k3=0,k4=0,d=5,h2=h/2;
double x=0.0,y=2.0;
cout<<"x\ty"<<endl;
cout<<x<<"\t"<<y<<endl;
while(x<d) {
k1=(-x*y*y);
x+=h2;
k2=-x*(y+h2*k1)*(y+h2*k1);
k3=-x*(y+h2*k2)*(y+h2*k2);
x+=h2;
k4=-x*(y+h2*k3)*(y+h2*k3);
y+=h/6*(k1+2*k2+2*k3+k4);
cout<<x<<"\t"<<y<<endl;
}
return 0;
}
#include<iostream.h>
#include<cmath>
#define eps 1e-5
void main()
{
int n=4;
double a[4][4]={{7,2,1,-2},{9,15,3,2},{-2,-2,11,5},{1,3,2,13}};
double y[4]={4,7,-1,0};
double x[4]={0};
double xx[4]={0};
int M=20;//最大迭代数
int i,j,k;
double dif=1.0;
double sum=0.0;
double residual = 0.0;
for(k=1;(k<=M)&&(dif>eps);k++){
dif=0.0;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
if(j<i)sum+=a[i][j]*x[j];
if(j>i)sum+=a[i][j]*xx[j];
}
x[i]=(y[i]-sum)/a[i][i];
sum=0.0;
}
residual=0.0;
for(int m=0;m<n;m++){
if(fabs(x[m]-xx[m])>residual)
residual=fabs(x[m]-xx[m]);
}
dif=residual;
cout<<"第"<<k<<"次迭代的结果:";
for(int p=0;p<n;p++){
cout<<x[p]<<" ";
xx[p]=x[p];
}
cout<<endl;
}
cout<<endl<<"迭代计算的结果为:"<<endl;
for(k=0;k<n;k++)
cout<<xx[k]<<"\t";
cout<<endl;
}
#include<iostream.h>
#include<cmath>
void main()
{
float x1,x0,f,f1;
x1=1.00;
do{
x0=x1;
f=x0*x0*x0-x0-1;
f1=3*x0*x0-1;
x1=x0-f/f1;
}while(fabs(x1-x0)>=1e-5);
cout<<"THe root of equation is "<<x1<<endl;
}