1.1-有效数字丢失现象观察

 #include<bits./stdc++.h>
using namespace std;
double f1(double x)
{
return sqrt(x)*(sqrt(x+)-sqrt(x));
}
double f2(double x)
{
return sqrt(x)/(sqrt(x+)+sqrt(x));
}
int main()
{
double t=1.0;
while (t<=1e14)
{
printf("At t=%.lf %.19lf %.19lf\n",t,f1(t),f2(t));
t*=10.0;
}
printf("sqrt(x+1) = %.19lf sqrt(x) = %.19lf\n",sqrt(t+),sqrt(t));
printf("diff = %.19lf",sqrt(t+)-sqrt(t));
printf("sum = %.19lf",sqrt(t+)+sqrt(t));
}

1.2-n次插值的Lagrange形式

 #include<bits./stdc++.h>
using namespace std;
int n;
double x[],y[],xx,yy;
int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++) scanf("%lf %lf",&x[i],&y[i]);
scanf("%lf",&xx);
for (int i=;i<=n;i++)
{
double t=1.0;
for (int k=;k<=n;k++)
if (i!=k) t=t*(xx-x[k])/(x[i]-x[k]);
yy=yy+t*y[i];
}
printf("%.19lf",yy);
}

1.3-n次插值Newton形式

 #include<bits./stdc++.h>
using namespace std;
int n;
double x[],y[],v[],xx,yy,w;
int main()
{
int n;
scanf("%d",&n);
for (int i=;i<=n;i++) scanf("%lf%lf",&x[i],&y[i]);
scanf("%lf",&xx);
w=1.0,v[]=y[],yy=y[];
for (int k=;k<=n;k++)
{
v[k]=y[k];
for (int i=;i<=k-;i++)
v[k]=(v[i]-v[k])/(x[i]-x[k]);
w=w*(xx-x[k-]);
yy=yy+w*v[k];
}
printf("%.19lf",yy);
}

1.4-三次样条插值

 #include<bits./stdc++.h>
using namespace std;
int n,type;
double x[],y[],h[],xx,yy,w;
double sqr(double x)
{
return x*x;
}
double m[],A[],B[],a[],b[];
int main()
{
int n;
scanf("%d",&n);
for (int i=;i<=n;i++) scanf("%lf%lf",&x[i],&y[i]);
scanf("%lf",&xx);
scanf("%d",&type);
for (int i=;i<=n-;i++) h[i]=x[i+]-x[i];
if (type==)
{
scanf("%lf%lf",&m[],&m[n]);
a[]=0.0; b[]=2.0*m[];
a[n]=1.0; b[n]=2.0*m[n];
}else if (type==)
{
a[]=1.0;b[]=3.0/ h[] *(y[] - y[]);
a[n]=0.0;b[n]=3.0/(h[n-])*(y[n] - y[n-]);
}
for (int i=;i<=n-;i++)
{
a[i]=h[i-]/(h[i-]+h[i]);
b[i]=3.0*((-a[i]) / h[i-] * (y[i] - y[i-]) +
a[i] / h[i] * (y[i+] - y[i]));
}
A[]=-0.5*a[];
B[]=0.5*b[];
for (int i=;i<=n;i++)
{
A[i]=-a[i]/( + ( - a[i]) * A[i-]);
B[i]=(b[i]-(-a[i])*B[i-])/(+(-a[i])* A[i-]);
}
m[n+]=;
for (int i=n;i>=;i--) m[i]=A[i]*m[i+]+B[i];
for (int i=;i<=n-;i++)
if (xx>=x[i] && xx<=x[i+])
{
yy=( ( + * (xx-x[i]) / (x[i+]-x[i])) * sqr((xx-x[i+]) / (x[i]-x[i+])) * y[i] )+
( ( + * (xx-x[i+])/ (x[i]-x[i+])) * sqr((xx-x[i]) / (x[i+]-x[i])) * y[i+] )+
( (xx-x[i] ) * sqr( (xx-x[i+]) / (x[i]-x[i+]) ) * m[i] )+
( (xx-x[i+]) * sqr( (xx-x[i]) / (x[i+]-x[i]) ) *m[i+] );
printf("%.19lf\n",yy);
}
}

1.5-单变量数据拟合(最小二乘法)

 #include<bits./stdc++.h>
using namespace std;
int n,type;
double x[],y[],sx,sy,sxx,sxy,a,b;
int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++) scanf("%lf%lf",&x[i],&y[i]);
for (int i=;i<=n;i++)
{
sx+=x[i];
sy+=y[i];
sxx+=x[i]*x[i];
sxy+=x[i]*y[i];
}
double nn=n;
a=(sxx*sy-sx*sxy)/(nn*sxx-sx*sx);
b=(nn*sxy-sx*sy)/(nn*sxx-sx*sx);
printf("%.19lf %.19lf\n",a,b);
}

1.6-自动选取步长梯形法

 #include<bits./stdc++.h>
using namespace std;
double a,b,c,h,t1,t0,s,n;
double f(double x)
{
return /(+x*x);
}
int main()
{
scanf("%lf%lf%lf",&a,&b,&c);
h=(b-a)/2.0;
t1=(f(a)+f(b))*h;
n=;
while ()
{
t0=t1;
s=;
for (int k=;k<=n;k++) s=s+f(a+(*k-)*h/n);
t1=t0/2.0+s*h/n;
if (abs(t1-t0)<*c)
{
printf("%.19lf",t1);
break;
}else n=2.0*n;
}
}

1.7-Romberg 求积法

 #include<bits./stdc++.h>
using namespace std;
double a,b,c;
double t[][];
int k;
double f(double x)
{
return sqrt(x);
}
double why(double p,double q,int k)
{
double sum=;
double kk=k;
for (double i=p;i<=q;i+=1.0)
{
sum+=f(a+(*i-)*(b-a)/pow(,kk));
}
return sum;
}
int main()
{
scanf("%lf%lf%lf",&a,&b,&c);
t[][]=(b-a)/2.0*(f(a)+f(b));
k=;
while ()
{ t[][k]=0.5*(t[][k-]+(b-a)/(pow(,k-))*why(,pow(,k-),k) );
for (int m=;m<=k;m++)
{
t[m][k-m]=(pow(,m)*t[m-][k-m+]-t[m-][k-m])/(pow(,m)-);
}
if (abs(t[k][]-t[k-][])<c)
{
printf("%.19lf",t[k][]);
break;
}else k+=1.0;
}
}

2.1-顺序高斯消去法

 #include<bits./stdc++.h>
using namespace std;
int n,m;
double a[][],b[],c,x[],t;
double sum(int i)
{
double su=;
for (int j=i+;j<=n;j++) su+=a[i][j]*x[j];
return su;
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++)
for (int j=;j<=m;j++) scanf("%lf",&a[i][j]);
for (int i=;i<=n;i++) scanf("%lf",&b[i]);
scanf("%lf",&c);
for (int k=;k<=n-;k++)
{
if (abs(a[k][k])<=c)
{
printf("求解失败\n");
return ;
}
for (int i=k+;i<=n;i++)
{
t=a[i][k]/a[k][k];
b[i]=b[i]-t*b[k];
for (int j=k+;j<=n;j++) a[i][j]=a[i][j]-t*a[k][j];
}
}
if (abs(a[n][n])<=c)
{
printf("求解失败\n");
return ;
}else x[n]=b[n]/a[n][n];
for (int i=n-;i>=;i--) x[i]=(b[i]-sum(i))/a[i][i];
for (int i=;i<=n;i++) printf("%.19lf ",x[i]);
cout<<endl;
}

2.2-列主元高斯消去法

 #include<bits./stdc++.h>
using namespace std;
int n,m,ik;
double a[][],b[],c,x[],t;
double sum(int i)
{
double su=;
for (int j=i+;j<=n;j++) su+=a[i][j]*x[j];
return su;
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++)
for (int j=;j<=m;j++) scanf("%lf",&a[i][j]);
for (int i=;i<=n;i++) scanf("%lf",&b[i]);
scanf("%lf",&c);
for (int k=;k<=n-;k++)
{
t=-1e9;
for (int i=k;i<=n;i++)
if (abs(a[i][k])>t)
{
t=abs(a[i][k]);
ik=i;
}
if (t<=c) {
printf("求解失败\n");
return ;
}
if (ik!=k)
{
for (int i=;i<=m;i++) swap(a[ik][i],a[k][i]);
swap(b[ik],b[k]);
}
for (int i=k+;i<=n;i++)
{
t=a[i][k]/a[k][k];
b[i]=b[i]-t*b[k];
for (int j=k+;j<=n;j++) a[i][j]=a[i][j]-t*a[k][j];
}
}
if (abs(a[n][n])<=c)
{
printf("求解失败\n");
return ;
}else x[n]=b[n]/a[n][n];
for (int i=n-;i>=;i--) x[i]=(b[i]-sum(i))/a[i][i];
for (int i=;i<=n;i++) printf("%.19lf ",x[i]);
cout<<endl;
}

2.3-全主元高斯消去法

 #include<bits./stdc++.h>
using namespace std;
int n,m,ik,jk,d[];
double a[][],b[],c,x[],t,z[];
double sum(int i)
{
double su=;
for (int j=i+;j<=n;j++) su+=a[i][j]*z[j];
return su;
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++)
for (int j=;j<=m;j++) scanf("%lf",&a[i][j]);
for (int i=;i<=n;i++) scanf("%lf",&b[i]);
scanf("%lf",&c);
for (int i=;i<=n;i++) d[i]=i;
for (int k=;k<=n-;k++)
{
t=-1e9;
for (int i=k;i<=n;i++)
for (int j=k;j<=n;j++)
{
if (abs(a[i][j])>t)
{
t=abs(a[i][j]);
ik=i;
jk=j;
}
}
if (t<=c)
{
printf("求解失败\n");
return ;
}
if (ik!=k)
{
for (int i=;i<=m;i++) swap(a[ik][i],a[k][i]);
swap(b[ik],b[k]);
}
if (jk!=k)
{
for (int i=;i<=n;i++) swap(a[i][jk],a[i][k]);
swap(d[jk],d[k]);
}
for (int i=k+;i<=n;i++)
{
t=a[i][k]/a[k][k];
b[i]=b[i]-t*b[k];
for (int j=k+;j<=n;j++) a[i][j]=a[i][j]-t*a[k][j];
}
}
z[n]=b[n]/a[n][n];
for (int i=n-;i>=;i--) z[i]=(b[i]-sum(i))/a[i][i];
for (int j=;j<=n;j++) x[d[j]]=z[j];
for (int i=;i<=n;i++) printf("%.19lf ",x[i]);
cout<<endl;
}

2.4-LU 直接分解法

 #include<bits./stdc++.h>
using namespace std;
int n,m,ik,jk,d[];
double a[][],b[],c,x[],y[];
double l[][],u[][];
double sum2(int p,int i)
{
double su=;
for (int j=;j<=p;j++) su+=l[i][j]*y[j];
return su;
}
double sum3(int p,int i)
{
double su=;
for (int j=p;j<=n;j++) su+=u[i][j]*x[j];
return su;
}
int main()
{
scanf("%d%d",&n,&m);
for (int i=;i<=n;i++)
for (int j=;j<=m;j++) scanf("%lf",&a[i][j]);
for (int i=;i<=n;i++) scanf("%lf",&b[i]);
scanf("%lf",&c);
for(int k=;k<=n;k++)
{
for(int j=k;j<=n;j++)
{
double su=;
for(int r=;r<=k-;r++) su+=(l[k][r]*u[r][j]);
u[k][j]=a[k][j]-su;
}
for(int i=k;i<= n;i++)
{ double su=;
for(int r=;r<=k-;r++) su+=(l[i][r]*u[r][k]);
l[i][k]=(a[i][k]-su)/u[k][k];
}
}
y[]=b[];
for (int i=;i<=n;i++) y[i]=b[i]-sum2(i-,i);
x[n]=y[n]/u[n][n];
for (int i=n-;i>=;i--) x[i]=(y[i]-sum3(i+,i))/u[i][i];
for (int i=;i<=n;i++) printf("%.19lf\n",x[i]);
cout<<endl;
}

2.5-Jacobi 迭代算法

 #include<bits./stdc++.h>
using namespace std;
int n,k,M;
double a[][],b[],c,x[],y[],g[];
int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++)
{
for (int j=;j<=n;j++) scanf("%lf",&a[i][j]);
scanf("%lf",&b[i]);
}
for (int i=;i<=n;i++) scanf("%lf",&y[i]);
scanf("%lf%d",&c,&M);
k=;
for (int i=;i<=n;i++)
{
if (abs(a[i][i])<c)
{
printf("求解失败2\n");
return ;
}
double t=a[i][i];
for (int j=;j<=n;j++)
{
a[i][j]=-a[i][j]/t;
}
a[i][i]=;
g[i]=b[i]/t;
}
while ()
{
for (int i=;i<=n;i++)
{
double sum=;
for (int j=;j<=n;j++) if (i!=j) sum+=a[i][j]*y[j];
x[i]=g[i]+sum;
}
double sum=;
for (int i=;i<=n;i++)
{
sum+=abs(x[i]-y[i]);
}
if (sum<c)
{
for (int i=;i<=n;i++) printf("%.19lf\n",x[i]);
printf("%d\n",k);
return ;
}else
if (k<M)
{
k=k+;
for (int i=;i<=n;i++) y[i]=x[i];
for (int i=;i<=n;i++) printf("%.15lf ",y[i]);
printf("\n");
}else
{
printf("求解失败1\n");
return ;
}
}
}

2.6-Seidel 迭代算法

 #include<bits./stdc++.h>
using namespace std;
int n,k,M;
double a[][],b[],c,x[],y[],g[];
int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++)
{
for (int j=;j<=n;j++) scanf("%lf",&a[i][j]);
scanf("%lf",&b[i]);
}
for (int i=;i<=n;i++) scanf("%lf",&y[i]);
scanf("%lf%d",&c,&M);
k=;
for (int i=;i<=n;i++) x[i]=y[i]; for (int i=;i<=n;i++)
{
if (abs(a[i][i])<c)
{
printf("求解失败2\n");
return ;
}
double t=a[i][i];
for (int j=;j<=n;j++)
{
a[i][j]=-a[i][j]/t;
}
a[i][i]=;
g[i]=b[i]/t;
}
while ()
{
for (int i=;i<=n;i++)
{
double sum=;
for (int j=;j<=n;j++) if (i!=j) sum+=a[i][j]*x[j];
x[i]=g[i]+sum;
}
double sum=;
for (int i=;i<=n;i++)
{
sum+=abs(x[i]-y[i]);
}
if (sum<c)
{
for (int i=;i<=n;i++) printf("%.19lf\n",x[i]);
printf("%d\n",k);
return ;
}else
if (k<M)
{
k=k+;
for (int i=;i<=n;i++) y[i]=x[i];
for (int i=;i<=n;i++) printf("%.15lf ",y[i]);
printf("\n");
}else
{
printf("求解失败1\n");
return ;
}
}
}

2.7-松弛迭代算法

 #include<bits./stdc++.h>
using namespace std;
int n,k,M;
double a[][],b[],c,x[],y[],g[],w;
int main()
{
scanf("%d",&n);
for (int i=;i<=n;i++)
{
for (int j=;j<=n;j++) scanf("%lf",&a[i][j]);
scanf("%lf",&b[i]);
}
for (int i=;i<=n;i++) scanf("%lf",&y[i]);
scanf("%lf",&w);
scanf("%lf%d",&c,&M);
k=;
for (int i=;i<=n;i++) x[i]=y[i]; for (int i=;i<=n;i++)
{
if (abs(a[i][i])<c)
{
printf("求解失败2\n");
return ;
}
double t=a[i][i];
for (int j=;j<=n;j++)
{
a[i][j]=-w*a[i][j]/t;
}
a[i][i]=-w;
g[i]=w*b[i]/t;
}
while ()
{
for (int i=;i<=n;i++)
{
double sum=;
for (int j=;j<=n;j++) if (i!=j) sum+=a[i][j]*x[j];
x[i]=g[i]+sum;
}
double sum=;
for (int i=;i<=n;i++)
{
sum+=abs(x[i]-y[i]);
}
if (sum<c)
{
for (int i=;i<=n;i++) printf("%.19lf\n",x[i]);
printf("%d\n",k);
return ;
}else
if (k<M)
{
k=k+;
for (int i=;i<=n;i++) y[i]=x[i];
for (int i=;i<=n;i++) printf("%.15lf ",y[i]);
printf("\n");
}else
{
printf("求解失败1\n");
return ;
}
}
}

2.8-对分法求根

 #include<bits./stdc++.h>
using namespace std;
double d,c,a[],b[],A,B,x[];
double f(double x)
{
return x*x*x-*x+1.0;
}
int k;
double ff;
int main()
{
scanf("%lf%lf",&d,&c);
scanf("%lf%lf",&A,&B);
a[]=A;b[]=B;k=;
while ()
{
x[k]=(a[k]+b[k])/;
ff=f(x[k]);
if (abs(ff)<d)
{
printf("%.19lf\n",x[k]);
break;
}
if (f(a[k])*f(x[k]) < )
{
a[k+]=a[k];
b[k+]=x[k];
}else
{
a[k+]=x[k];
b[k+]=b[k];
}
if (b[k+]-a[k+]<=c)
{
printf("%.19lf\n",(a[k+]+b[k+])/);
}else k=k+;
}
}

2.9-松弛法迭代求根

#include<bits./stdc++.h>
using namespace std;
double d,c,A,B,x[],w[];
double f(double x)
{
return (x*x*x+1.0)/3.0;
}
double ff(double x)
{
return x*x;
}
int k;
int main()
{
scanf("%lf%lf",&x[],&c);
while ()
{
w[k]=/(-ff(x[k]));
x[k+]=(-w[k])*x[k]+w[k]*f(x[k]);
if (abs(x[k+]-x[k])<c )
{
printf("%.19lf\n",x[k+]);
break;
}else k=k+;
}
}

2.10-牛顿法求根

 #include<bits./stdc++.h>
using namespace std;
double d,c,A,B,x[],w[];
double f(double x)
{
return x*x*x-3.0*x+;
}
double ff(double x)
{
return *x*x-;
}
int k;
int main()
{
scanf("%lf%lf",&x[],&c);
k=;
while()
{
x[k+]=x[k]-f(x[k])/ff(x[k]);
if (abs(x[k+] -x[k]) < c)
{
printf("%.19lf\n",x[k+]);
break;
}else k=k+;
}
}

数值分析常见算法C++实现的更多相关文章

  1. Hadoop学习笔记—12.MapReduce中的常见算法

    一.MapReduce中有哪些常见算法 (1)经典之王:单词计数 这个是MapReduce的经典案例,经典的不能再经典了! (2)数据去重 "数据去重"主要是为了掌握和利用并行化思 ...

  2. [Machine Learning] 机器学习常见算法分类汇总

    声明:本篇博文根据http://www.ctocio.com/hotnews/15919.html整理,原作者张萌,尊重原创. 机器学习无疑是当前数据分析领域的一个热点内容.很多人在平时的工作中都或多 ...

  3. acm常见算法及例题

    转自:http://blog.csdn.net/hengjie2009/article/details/7540135 acm常见算法及例题  初期:一.基本算法:     (1)枚举. (poj17 ...

  4. 常见算法是js实现汇总(转载)

    常见算法是js实现汇总 /*去重*/ <script> function delRepeat(arr){ var newArray=new Array(); var len=arr.len ...

  5. paper 12:机器学习常见算法分类汇总

    机器学习无疑是当前数据分析领域的一个热点内容.很多人在平时的工作中都或多或少会用到机器学习的算法.这里南君先生为您总结一下常见的机器学习算法,以供您在工作和学习中参考. 机器学习的算法很多.很多时候困 ...

  6. AI - 机器学习常见算法简介(Common Algorithms)

    机器学习常见算法简介 - 原文链接:http://usblogs.pwc.com/emerging-technology/machine-learning-methods-infographic/ 应 ...

  7. 前端常见算法的JS实现

    1.冒泡排序 function bubbleSort(arr){ var i = 0, j = 0; for(i=1; i<arr.length; i++){ for(j=0; j<=ar ...

  8. 字符串匹配常见算法(BF,RK,KMP,BM,Sunday)

    今日了解了一下字符串匹配的各种方法. 并对sundaysearch算法实现并且单元. 字符串匹配算法,是在实际工程中经常遇到的问题,也是各大公司笔试面试的常考题目.此算法通常输入为原字符串(strin ...

  9. 常见算法(logistic回归,随机森林,GBDT和xgboost)

    常见算法(logistic回归,随机森林,GBDT和xgboost) 9.25r早上面网易数据挖掘工程师岗位,第一次面数据挖掘的岗位,只想着能够去多准备一些,体验面这个岗位的感觉,虽然最好心有不甘告终 ...

随机推荐

  1. 60s倒计时

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  2. 关于ISIS协议 CSNP报文的周期更新理解

    为何ISIS协议的CSNP报文在MA网络环境中是以周期更新然而在P2P网络环境中只更新一次? 个人通过视频及资料学习理解: 我们知道ISIS的CSNP报文类似OSPF中的DBD报文,作用就是用来确认彼 ...

  3. Python的import module与form module import的区别

    import moduleName 如果要使用moduleName模块中的方法时,是moduleName.method(点方法), 比如moduleName中有个方法是set,则使用的是moduleN ...

  4. 码云私人代码 SSH 设置----https://blog.csdn.net/kkaazz/article/details/78667573

    码云私人代码 SSH 设置 https://blog.csdn.net/kkaazz/article/details/78667573

  5. node.js与HTML5离线缓存

    最近正学到HTML5的离线缓存,却看到需要配置服务器.一下子就懵了,毕竟服务器的有关配置一般是很复杂的,而node.js的服务器是自己的代码生成的,这下要怎么配置?在网上搜索了很久,都没用关于node ...

  6. ZOJ 3684 Destroy

    Destroy Time Limit: 2000ms Memory Limit: 65536KB This problem will be judged on ZJU. Original ID: 36 ...

  7. Prime Land(poj 1365)

    题意:这题题意难懂,看了题解才知道的.比如第二组sample,就是5^1*2^1=10, 求10-1即9的质因数分解,从大到小输出,即3^2.本来很简单的嘿,直接最快速幂+暴力最裸的就行了. #inc ...

  8. 文化之旅 2012年NOIP全国联赛普及组

    时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 有一位使者要游历各国,他每到一个国家,都能学到一种文化,但他不愿意学习任何一种文化超 ...

  9. 如何高效读写百万级的Excel?

    高效读取百万级数据 接上一篇介绍的高效写文件之后,最近抽时间研究了下Excel文件的读取.概括来讲,poi读取excel有两种方式:用户模式和事件模式. 然而很多业务场景中的读取Excel仍然采用用户 ...

  10. 4560 NOIP2015 D2T2 子串 code vs

    4560 NOIP2015 D2T2 子串  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解       题目描述 Description 有两个仅包含小写 ...