包括拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔 。都是经典的数学算法,希望能开托您的思路。转自kunli.info

1.拉格朗日插值多项式 ,用于离散数据的拟合

C/C++ code
 #include <stdio.h>
#include <conio.h>
#include <alloc.h>
float lagrange(float *x, float *y, float xx, int n) /*拉格朗日插值算法*/
{
int i, j;
float *a, yy = 0.0;
/*a作为临时变量,记录拉格朗日插值多项式*/
a = (float *) malloc(n * sizeof(float));
for (i = ; i <= n - ; i++) {
a[i] = y[i];
for (j = ; j <= n - ; j++)
if (j != i)
a[i] *= (xx - x[j]) / (x[i] - x[j]);
yy += a[i];
}
free(a);
return yy;
}
main() {
int i,n;
float x[],y[],xx,yy;
printf("Input n:");
scanf("%d",&n);
if(n>=) {
printf("Error!The value of n must in (0,20).");
getch();return ;
}
if(n<=) {
printf("Error! The value of n must in (0,20).");
getch();
return ;
}for(i=;i<=n-;i++) {
printf("x[%d]:",i);
scanf("%f",&x[i]);
}
printf("\n");
for(i=;i<=n-;i++) {
printf("y[%d]:",i);
scanf("%f",&y[i]);
}
printf("\n");
printf("Input xx:");
scanf("%f",&xx);
yy=lagrange(x,y,xx,n);
printf("x=%f,y=%f\n",xx,yy);
getch();
}

2.牛顿插值多项式,用于离散数据的拟合

C/C++ code
 #include <stdio.h>
#include <conio.h>
#include <alloc.h>
void difference(float *x, float *y, int n) {
float *f;
int k, i;
f = (float *) malloc(n * sizeof(float));
for (k = ; k <= n; k++) {
f[] = y[k];
for (i = ; i < k; i++)
f[i + ] = (f[i] - y[i]) / (x[k] - x[i]);
y[k] = f[k];
}
return;
}
main() {
int i,n;
float x[],y[],xx,yy;
printf("Input n:");
scanf("%d",&n);
if(n>=) {
printf("Error! The value of n must in (0,20).");
getch(); return ;
}
if(n<=) {
printf("Error! The value of n must in (0,20).");
getch();
return ;
}
for(i=;i<=n-;i++) {
printf("x[%d]:",i);
scanf("%f",&x[i]);}printf("\n");
for(i=;i<=n-;i++) {
printf("y[%d]:",i);
scanf("%f",&y[i]);
}
printf("\n");
difference(x,(float *)y,n);
printf("Input xx:");
scanf("%f",&xx);
yy=y[];
for(i=n-;i>=;i--) yy=yy*(xx-x[i])+y[i];
printf("NewtonInter(%f)=%f",xx,yy);
getch();}

3.高斯列主元消去法,求解其次线性方程组

C/C++ code
 #include<stdio.h>
#include <math.h>
#define N 20
int main() {
int n, i, j, k;
int mi, tmp, mx;
float a[N][N], b[N], x[N];
printf("\nInput n:");
scanf("%d", &n);
if (n > N) {
printf("The input n should in(0,N)!\n");
getch();
return ;
}
if (n <= ) {
printf("The input n should in(0,N)!\n");
getch();
return ;
}
printf("Now input a(i,j),i,j=0...%d:\n", n - );
for (i = ; i < n; i++) {
for (j = ; j < n; j++)
scanf("%f", &a[i][j]);
}
printf("Now input b(i),i,j=0...%d:\n", n - );
for (i = ; i < n; i++)
scanf("%f", &b[i]);
for (i = ; i < n - ; i++) {
for (j = i + , mi = i, mx = fabs(a[i][j]); j < n - ; j++)
if (fabs(a[j][i]) > mx) {
mi = j;
mx = fabs(a[j][i]);
}
if (i < mi) {
tmp = b[i];
b[i] = b[mi];
b[mi] = tmp;
for (j = i; j < n; j++) {
tmp = a[i][j];
a[i][j] = a[mi][j];
a[mi][j] = tmp;
}
}
for (j = i + ; j < n; j++) {
tmp = -a[j][i] / a[i][i];
b[j] += b[i] * tmp;
for (k = i; k < n; k++)
a[j][k] += a[i][k] * tmp;
}
}
x[n - ] = b[n - ] / a[n - ][n - ];
for (i = n - ; i >= ; i--) {
x[i] = b[i];
for (j = i + ; j < n; j++)
x[i] -= a[i][j] * x[j];
x[i] /= a[i][i];
}
for (i = ; i < n; i++)
printf("Answer:\n x[%d]=%f\n", i, x[i]);
getch();
return ;
}
#include<math.h>
#include<stdio.h>
#define NUMBER 20
#define Esc 0x1b
#define Enter 0x0d
float A[NUMBER][NUMBER + ], ark; int flag, n;
exchange(int r,int k); float max(int k);
message(); main() {float x[NUMBER]; int r,k,i,j; char celect; clrscr(); printf("\n\nUse Gauss."); printf("\n\n1.Jie please press Enter."); printf("\n\n2.Exit press Esc."); celect=getch(); if(celect==Esc) exit(); printf("\n\n input n="); scanf("%d",&n); printf(" \n\nInput matrix A and B:"); for(i=;i<=n;i++) {printf("\n\nInput a%d1--a%d%d and b%d:",i,i,n,i); for(j=;j<=n+;j++) scanf("%f",&A[i][j]);}for(k=;k<=n-;k++) {ark=max(k); if(ark==) {printf("\n\nIt's wrong!");message();} else if(flag!=k) exchange(flag,k); for(i=k+;i<=n;i++) for(j=k+;j<=n+;j++) A[i][j]=A[i][j]-A[k][j]*A[i][k]/A[k][k];}x[n]=A[n][n+]/A[n][n]; for( k=n-;k>=;k--) {float me=; for(j=k+;j<=n;j++) {me=me+A[k][j]*x[j];}x[k]=(A[k][n+]-me)/A[k][k];}for(i=;i<=n;i++) {printf(" \n\nx%d=%f",i,x[i]);}message();}exchange(int r,int k) {int i; for(i=;i<=n+;i++) A[][i]=A[r][i]; for(i=;i<=n+;i++) A[r][i]=A[k][i]; for(i=;i<=n+;i++) A[k][i]=A[][i];}float max(
int k) {
int i;
float temp = ;
for (i = k; i <= n; i++)
if (fabs(A[i][k]) > temp) {
temp = fabs(A[i][k]);
flag = i;
}
return temp;
}
message() {printf("\n\n Go on Enter ,Exit press Esc!");
switch(getch()) {case Enter: main();
case Esc: exit();
default: {printf("\n\nInput error!");message();
}
}
}

4.龙贝格求积公式,求解定积分

C/C++ code
 #include<stdio.h>
#include<math.h>
#define f(x) (sin(x)/x)
#define N 20
#define MAX 20
#define a 2
#define b 4
#define e 0.00001
float LBG(float p, float q, int n) {
int i;
float sum = , h = (q - p) / n;
for (i = ; i < n; i++)
sum += f(p+i*h);
sum += (f(p) + f(q)) / ;
return (h * sum);
}
void main() {
int i;
int n = N, m = ;
float T[MAX + ][];T
[][] = LBG(a, b, n);
n *= ;
for (m = ; m < MAX; m++) {
for (i = ; i < m; i++)
T[i][] = T[i][];
T[][] = LBG(a, b, n);
n *= ;
for (i = ; i <= m; i++)
T[i][] = T[i - ][]
+ (T[i - ][] - T[i - ][]) / (pow(, * m) - );
if ((T[m - ][] < T[m][] + e) && (T[m - ][] > T[m][] - e)) {
printf("Answer=%f\n", T[m][]);
getch();
return;
}
}
}
5.牛顿迭代公式,求方程的近似解
C/C++ code
 #include<stdio.h>
#include<math.h>
#include<conio.h>
#define N 100
#define PS 1e-5
#define TA 1e-5
float Newton(float(*f)(float), float(*f1)(float), float x0) {
float x1, d = ;
int k = ;
do {
x1 = x0 - f(x0) / f1(x0);
if ((k++ > N) || (fabs(f1(x1)) < PS)) {
printf("\nFailed!");
getch();
exit();
}
d = (fabs(x1) < ? x1 - x0 : (x1 - x0) / x1);
x0 = x1;
printf("x(%d)=%f\n", k, x0);
} while ((fabs(d)) > PS && fabs(f(x1)) > TA);
return x1;
}
float f(float x) {
return x * x * x + x * x - * x - ;
}
float f1(float x) {
return 3.0 * x * x + * x - ;
}
void main() {
float f(float);
float f1(float);
float x0, y0;
printf("Input x0: ");
scanf("%f", &x0);
printf("x(0)=%f\n", x0);
y0 = Newton(f, f1, x0);
printf("\nThe root is x=%f\n", y0);
getch();
}
6. 牛顿-科特斯求积公式,求定积分
C/C++ code
 #include<stdio.h>
#include<math.h>
int NC(a,h,n,r,f) float (*a)[]; float h;
int n, f;
float *r;
{
int nn,i;
float ds;
if(n>||n<) {
if (f) printf("\n Faild! Check if 1<n<1000!\n",n);
return(-);
}
if(n==) {*r=0.5*((*a)[]+(*a)[])*(h);
return();
}
if (n-==) {*r=; *r=*r+0.375*(h)*((*a)[n-]+*(*a)[n-]+*(*a)[n-]+(*a)[n-]);
return();
}
if(n/-(n-)/<=) nn=n;
else nn=n-; ds=(*a)[]-(*a)[nn-];
for(i=;i<=nn;i=i+) ds=ds+*(*a)[i-]+*(*a)[i]; *r=ds*(h)/;
if(n>nn) *r=*r+0.375*(h)*((*a)[n-]+*(*a)[n-]+*(*a)[n-]+(*a)[n-]);
return();}
main() {
float h,r;
int n,ntf,f;
int i;
float a[];
printf("Input the x[i](16):\n");
for(i=;i<=;i++) scanf("%d",&a[i]);
h=0.2;
f=;
ntf=NC(a,h,n,&r,f);
if(ntf==)
printf("\nR=%f\n",r);
else
printf("\n Wrong!Return code=%d\n",ntf);
getch();
}

7.雅克比迭代,求解方程近似解

C/C++ code
 #include <stdio.h>
#include <math.h>
#define N 20
#define MAX 100
#define e 0.00001
int main() {
int n;
int i, j, k;
float t;
float a[N][N], b[N][N], c[N], g[N], x[N], h[N];
printf("\nInput dim of n:");
scanf("%d", &n);
if (n > N) {
printf("Faild! Check if 0<n<N!\n");
getch();
return ;
}
if (n <= ) {
printf("Faild! Check if 0<n<N!\n");
getch();
return ;
}
printf("Input a[i,j],i,j=0…%d:\n", n - );
for (i = ; i < n; i++)
for (j = ; j < n; j++)
scanf("%f", &a[i][j]);
printf("Input c[i],i=0…%d:\n", n - );
for (i = ; i < n; i++)
scanf("%f", &c[i]);
for (i = ; i < n; i++)
for (j = ; j < n; j++) {
b[i][j] = -a[i][j] / a[i][i];
g[i] = c[i] / a[i][i];
}
for (i = ; i < MAX; i++) {
for (j = ; j < n; j++)
h[j] = g[j];
{
for (k = ; k < n; k++) {
if (j == k)
continue;
h[j] += b[j][k] * x[k];
}
}
t = ;
for (j = ; j < n; j++)
if (t < fabs(h[j] - x[j]))
t = fabs(h[j] - x[j]);
for (j = ; j < n; j++)
x[j] = h[j];
if (t < e) {
printf("x_i=\n");
for (i = ; i < n; i++)
printf("x[%d]=%f\n", i, x[i]);
getch();
return ;
}
printf("after %d repeat , return\n", MAX);
getch();
return ;
}
getch();
}

8.秦九昭算法

C/C++ code
 #include <math.h>
float qin(float a[], int n, float x) {
float r = ;
int i;
for (i = n; i >= ; i--)
r = r * x + a[i];
return r;
}
main() {
float a[],x,r=;
int n,i;
do {printf("Input frequency:");
scanf("%d",&n);
}
while(n<);
printf("Input value:");
for(i=;i<=n;i++)
scanf("%f",&a[i]);
printf("Input frequency:");
scanf("%f",&x);
r=qin(a,n,x);
printf("Answer:%f",r);
getch();
}

9.幂法

C/C++ code
 #include<stdio.h>
#include<math.h>
#define N 100
#define e 0.00001
#define n 3
float x[n] = { , , };
float a[n][n] = { { , , }, { , , }, { , , } };
float y[n];
main() {
int i,j,k;
float xm,oxm;
oxm=;
for(k=;k<N;k++) {
for(j=;j<n;j++) {
y[j]=;
for(i=;i<n;i++) y[j]+=a[j][i]*x[i];}xm=;
for(j=;j<n;j++)
if(fabs(y[j])>xm) xm=fabs(y[j]);
for(j=;j<n;j++) y[j]/=xm;
for(j=;j<n;j++) x[j]=y[j];
if(fabs(xm-oxm)<e) {
printf("max:%f\n\n",xm);
printf("v[i]:\n");
for(k=;k<n;k++)
printf("%f\n",y[k]);
break;
}
oxm=xm;
}
getch();
}

10.高斯塞德尔

C/C++ code
 #include<math.h>
#include<stdio.h>
#define N 20
#define M 99
float a[N][N];
float b[N];
int main() {
int i, j, k, n;
float sum, no, d, s, x[N];
printf("\nInput dim of n:");
scanf("%d", &n);
if (n > N) {
printf("Faild! Check if 0<n<N!\n ");
getch();
return ;
}
if (n <= ) {
printf("Faild! Check if 0<n<N!\n ");
getch();
return ;
}
printf("Input a[i,j],i,j=0…%d:\n", n - );
for (i = ; i < n; i++)
for (j = ; j < n; j++)
scanf("%f", &a[i][j]);
printf("Input b[i],i=0…%d:\n", n - );
for (i = ; i < n; i++)
scanf("%f", &b[i]);
for (i = ; i < n; i++)
x[i] = ;
k = ;
printf("\nk=%dx=", k);
for (i = ; i < n; i++)
printf("%12.8f", x[i]);
do
{
k++;
if(k>M)
{
printf ("\nError!\n”);
getch();}break;}no=0.0;
for (i = ; i < n; i++) {
s = x[i];
sum = 0.0;
for (j = ; j < n; j++)
if (j != i)
sum = sum + a[i][j] * x[j];
x[i] = (b[i] - sum) / a[i][i];
d = fabs(x[i] - s);
if (no < d)
no = d;
}
printf("\nk=%2dx=", k);
for (i = ; i < n; i++)
printf("%f", x[i]);
}
while (no>=0.1e-6);
if(no<0.1e-6) {
printf("\n\n answer=\n");
printf("\nk=%d",k);
for (i=;i<n;i++)
printf("\n x[%d]=%12.8f",i,x[i]);
}getch();
}

10个重要的算法C语言实现源代码的更多相关文章

  1. PageRank算法R语言实现

    PageRank算法R语言实现 Google搜索,早已成为我每天必用的工具,无数次惊叹它搜索结果的准确性.同时,我也在做Google的SEO,推广自己的博客.经过几个月尝试,我的博客PR到2了,外链也 ...

  2. 【转】位置式、增量式PID算法C语言实现

    位置式.增量式PID算法C语言实现 芯片:STM32F107VC 编译器:KEIL4 作者:SY 日期:2017-9-21 15:29:19 概述 PID 算法是一种工控领域常见的控制算法,用于闭环反 ...

  3. PID算法(C语言)

    /************ PID算法(C语言) ************/ #include <stdio.h> #include<math.h> struct _pid { ...

  4. Ubuntu下安装C/C++开发环境【!!!有更新!!!Ubuntu14.10下使用eclipse搭建C语言开发环境】

    (1)第一步安装Eclipse,有两种方法,使用软件市场搜索就可以得到,安装就可以 另外一种是使用终端安装,命令例如以下: sudo su进入root模式 输入password 然后 输入:sudo ...

  5. 数据挖掘算法R语言实现之决策树

    数据挖掘算法R语言实现之决策树 最近,看到很多朋友问我如何用数据挖掘算法R语言实现之决策树,想要了解这方面的内容如下: > library("party")导入数据包 > ...

  6. 基于视觉的Web页面分页算法VIPS的实现源代码下载

    基于视觉的Web页面分页算法VIPS的实现源代码下载 - tingya的专栏 - 博客频道 - CSDN.NET 基于视觉的Web页面分页算法VIPS的实现源代码下载 分类: 技术杂烩 2006-04 ...

  7. 数据结构算法C语言实现(八)--- 3.2栈的应用举例:迷宫求解与表达式求值

    一.简介 迷宫求解:类似图的DFS.具体的算法思路可以参考书上的50.51页,不过书上只说了粗略的算法,实现起来还是有很多细节需要注意.大多数只是给了个抽象的名字,甚至参数类型,返回值也没说的很清楚, ...

  8. 数据结构算法C语言实现(二)---2.3线性表的链式表示和实现之单链表

    一.简述 [暂无] 二.头文件 #ifndef _2_3_part1_H_ #define _2_3_part1_H_ //2_3_part1.h /** author:zhaoyu email:zh ...

  9. 《连连看》算法c语言演示(自动连连看)

    (图片是游戏的示意图,来自互联网,与本文程序无关) 看题目就知道是写给初学者的,没需要的就别看了,自己都觉得怪无聊的. 很多游戏的耐玩性都来自精巧的算法,特别是人工智能的水平.比如前几天看了著名的Al ...

随机推荐

  1. 设计模式8---适配器模式(Adapter)

    1. 适配器模式简介 适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口.Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作. 适用场景: 1.已经存在 ...

  2. 深入理解java虚拟机(七)类加载的时机

    Class 文件中描述的各种信息都必须加载到虚拟机中才能运行和使用.而虚拟机怎么加载这些Class 文件呢?Class 文件进入到虚拟机中会发生什么变化呢? 虚拟机类加载机制是指 虚拟机把描述类的数据 ...

  3. Gym 100989L (DFS)

    AbdelKader enjoys math. He feels very frustrated whenever he sees an incorrect equation and so he tr ...

  4. JavaScript - this详解 (二)

    用栗子说this Bug年年有,今年特别多 对于JavaScript这么灵活的语言来说,少了this怎么活! function 函数 this 对于没有实例化的function,我们称之为函数,即没有 ...

  5. delphi7的adoconnection控件连接不上

    delphi时选择以{以管理员身份运行 }即可

  6. Linq分组操作之GroupBy,GroupJoin扩展方法源码分析

    Linq分组操作之GroupBy,GroupJoin扩展方法源码分析 一. GroupBy 解释: 根据指定的键选择器函数对序列中的元素进行分组,并且从每个组及其键中创建结果值. 查询表达式: var ...

  7. 布斯乘法 Mips实现 - Booth Algorithm

    看了很久网上没有现成的代码和好一点的图,因此当一回搬运工.转自stackoverflow 布斯乘法器的Mips实现方法: .data promptStart: .asciiz "This p ...

  8. C#设计模式系列:代理模式(Proxy Pattren)

    一.引言 在软件开发过程中,有些对象有时候会由于网络或者其他的障碍,以至于不能够或者不能直接访问到这些对象,如果直接访问对象给系统带来不必要的复杂性,这时候可以在客户端和目标对象之间增加一层中间层,让 ...

  9. [ActionScript 3.0] 嵌入字体

    首先我们要生成一个swf的字体库,以微软雅黑为例,新建YaHei_font.fla,ctrl+L,在库面板中右键→新建字型,弹出字体元件属性窗口,选择要嵌入的字体, 并选择为ActionScript ...

  10. window phone8.1 hello,world(补交作业)

    第一步,我们需要创建一个简单的hello,world程序来帮助我们了解大致的方向. 下面是这个小例子的步骤: 1.打开vs,点击 文件-新建-项目:如图: