10个重要的算法C语言实现源代码
包括拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔 。都是经典的数学算法,希望能开托您的思路。转自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语言实现源代码的更多相关文章
- PageRank算法R语言实现
PageRank算法R语言实现 Google搜索,早已成为我每天必用的工具,无数次惊叹它搜索结果的准确性.同时,我也在做Google的SEO,推广自己的博客.经过几个月尝试,我的博客PR到2了,外链也 ...
- 【转】位置式、增量式PID算法C语言实现
位置式.增量式PID算法C语言实现 芯片:STM32F107VC 编译器:KEIL4 作者:SY 日期:2017-9-21 15:29:19 概述 PID 算法是一种工控领域常见的控制算法,用于闭环反 ...
- PID算法(C语言)
/************ PID算法(C语言) ************/ #include <stdio.h> #include<math.h> struct _pid { ...
- Ubuntu下安装C/C++开发环境【!!!有更新!!!Ubuntu14.10下使用eclipse搭建C语言开发环境】
(1)第一步安装Eclipse,有两种方法,使用软件市场搜索就可以得到,安装就可以 另外一种是使用终端安装,命令例如以下: sudo su进入root模式 输入password 然后 输入:sudo ...
- 数据挖掘算法R语言实现之决策树
数据挖掘算法R语言实现之决策树 最近,看到很多朋友问我如何用数据挖掘算法R语言实现之决策树,想要了解这方面的内容如下: > library("party")导入数据包 > ...
- 基于视觉的Web页面分页算法VIPS的实现源代码下载
基于视觉的Web页面分页算法VIPS的实现源代码下载 - tingya的专栏 - 博客频道 - CSDN.NET 基于视觉的Web页面分页算法VIPS的实现源代码下载 分类: 技术杂烩 2006-04 ...
- 数据结构算法C语言实现(八)--- 3.2栈的应用举例:迷宫求解与表达式求值
一.简介 迷宫求解:类似图的DFS.具体的算法思路可以参考书上的50.51页,不过书上只说了粗略的算法,实现起来还是有很多细节需要注意.大多数只是给了个抽象的名字,甚至参数类型,返回值也没说的很清楚, ...
- 数据结构算法C语言实现(二)---2.3线性表的链式表示和实现之单链表
一.简述 [暂无] 二.头文件 #ifndef _2_3_part1_H_ #define _2_3_part1_H_ //2_3_part1.h /** author:zhaoyu email:zh ...
- 《连连看》算法c语言演示(自动连连看)
(图片是游戏的示意图,来自互联网,与本文程序无关) 看题目就知道是写给初学者的,没需要的就别看了,自己都觉得怪无聊的. 很多游戏的耐玩性都来自精巧的算法,特别是人工智能的水平.比如前几天看了著名的Al ...
随机推荐
- SQL语句统计错误率
2018年的第一篇博客就以此作为开端吧 :D 最近在项目中碰到需要统计类似错误率之类的需求,原本这功能是之前做的,但是最近测的时候发现出了点问题,显示的结果不对.这就比较尴尬了... 于是就进行deb ...
- vim的基本使用
Vim 编辑器中设置了三种模式—命令模式.末行模式和编辑模式,每种模式分别又支持多种不同的命令快捷键,这大大提高了工作效率,而且用户在习惯之后也会觉得相当顺手.要想高效率地操作文本,就必须先搞清这三种 ...
- model.find(options)
options {Object} 操作选项,会通过 parseOptions 方法解析 return {Promise} 返回单条数据 查询单条数据,返回的数据类型为对象.如果未查询到相关数据,返回值 ...
- nginx中级应用-续
1.server下配置的每个location,都需要有自己的一套代理配置 即要么加入: root 某个目录 要么加入 proxy_pass 某个地址; proxy_redirect off; # ...
- vs 页面浏览不显示.aspx后缀名
转:http://www.cnblogs.com/hllive/p/6029763.html 由vs2013新建“web窗体应用程序”的网站,URL不显示扩展名.那今天就实现该功能 1.首先打开vs2 ...
- leetcode 18 4Sum JAVA
题目 给定一个包含 n 个整数的数组 nums 和一个目标值 target,判断 nums 中是否存在四个元素 a,b,c 和 d ,使得 a + b + c + d 的值与 target 相等?找出 ...
- “全栈2019”Java第五十二章:继承与初始化详解
难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...
- ajax的两个重要参数contentType 和dataType
contentType 是入参!!!!!! 是传递给后端参数的格式: contentType : 'application/json;charset=UTF-8', contentType : 'te ...
- CentOS 中文支持
其中通过 yum 方式安装的最简单快速: yum groupinstall "Chinese Support" 装完中文语言包之后,它不会自己变成中文,得修改文件/etc/sysc ...
- jquer 使用原生DOM对象
js中使document.getElementById("ID"); Jquery中可以使用$("#id") 或者$("#id").get( ...