博文

矩阵求逆的算法(2008-08-22 18:48:00)

摘要:用C写的,做成DLL使用很方便。 double * MatrixOpp(double A[],int m,int n) /*矩阵求逆*/ { int i,j,x,y,k; double *SP=NULL,*AB=NULL,*B=NULL,X,*C; SP=(double *)malloc(m*n*sizeof(double)); AB=(double *)malloc(m*n*sizeof(double)); B=(double *)malloc(m*n*sizeof(double)); X=Surplus(A,m,n); X=1/X; for(i=0;i......

阅读全文(2236) | 评论:0 | 复制链接

matcom下载地址(2008-06-16 14:18:00)

摘要:下载地址:http://www.pris.net.cn/down2/software.asp?id=1909 http://www.cnblogs.com/yunbo/archive/2006/10/17/530915.aspx 功能说明: Matcom是一个十分有用的.m文件翻译器(Replacement),它的主要优点我认为有 以下几点: 1>它提供了matlab中.m文件与其他高级语言的接口,使.m文件可以编译为脱离 matlab环境独立执行的可执行性程序,这样 。提高了代码的复用率 。提高了代码的执行速度 。使纯文本的.m文件变为二进制的可执行程序,增加了知识保护的安全性   2>它提供了近千个数学函数,对于其他高级语言编译器来说,提供了一个丰富的[Matlab] 的数学库,基本上在matlab上能用的常用函数都可以在高级语言中直接调用。 数学函数主要包括: 。矩阵属性函数 。矩阵生成函数 。矩阵生成函数 。矩阵操作函数 。矩阵变换函数 。数学函数 。特殊函数 。数值函数 。串函数 。绘图函数 。颜色函数 。函数函数 。存盘及读文件 。系统资源函数 。系统操作函数 。判断函数(Is函数族) 。付氏变换 等等,可参见本文附录 提供了.m文件的方便快捷的编译调适环境,可以step, watch,breakpoint等各种 调试手段。 Matcom 4.5 的安装:    感谢energy的破解,Matcom4.5的口令为FREE-4.5-1193046-80295111 matcom4.5在安装时需要你输入口令,mideva在window的注册表中 HKEY_CURRENT_USER\Software\MathTools\Matcom\4.50\License\ 下面添加一个键,键名默认,键值为FREE-4.5-1193046-80295111 om\4.50\License\ 下面添加一个键,键名默认,键值为FREE-4.5-1193046-80295111 你如果删除它,再次启动matcom的时候,就会再次询问口令。 不过好在如果通过这个口令之后,程序发布时就不再有限制了,也 就是在这个注册后的系统中编译的程序,发布时就不用代一个注册文件了 ------------------------------------------------......

阅读全文(4896) | 评论:1 | 复制链接

合数分解成质数之和问题探究(2008-06-16 13:42:00)

摘要:原帖及讨论:http://bbs.bccn.net/thread-208692-1-1.html 1.将一个合数分解成多个质数,使分解的各个质数均不等、它们的和等于该合数,且它们中最大的质数最小
算法:DP,背包问题,复杂度约为O( (N/10)^2 ) #include<stdio.h>
#include<string.h>
#include<math.h>
#define SIZE 5000
#define SIZELINE 20000
int x[SIZE]={2},l; /*质数表*/
struct
{
      char ok;
      int l[200];
      short p;
} countline[SIZELINE];
void qsort(int low,int high,int key[])
{
     int i,j,tag;
     i=low; j=high;
     if(i<j)
     {
       tag=key[i];
       do
       {
         while(tag<key[j] && i<j) j--;
         if(i<j)
         {
            &n......

阅读全文(1799) | 评论:0 | 复制链接

JPEG2000编码方案和结构划分研究(2008-06-06 21:06:00)

摘要:JPEG2000编码方案和结构划分研究 高勇  尹琦  李存华 (淮海工学院  计算机科学系,江苏  连云港  222005)       摘  要  JPEG2000作为一种先进的静止图像压缩标准,它的许多特征具有模块性。本文介绍了JPEG2000的压缩原理,描述了压缩系统的实现框架,讨论了其核心编码算法。在JPEG2000的压缩过程中,需要对图像的结构逐级进行划分,还要对码流结构进行分层次组织,以实施图像的渐进性传输。结构的划分作为JPEG2000的理论基础,有必要进行深入和准确的研究。     关键词  JPEG2000;图像压缩;嵌入编码;算术编码;小波变换  
1  引言     JPEG2000 是新一代静止图像压缩标准,它采用了小波变换、优化截断嵌入块编码和高效的码流组织形式。适用于各种类型的静止图像,如二值图像、灰度图像和彩色图像;支持自然图像、合成图像、医学图像和文本。JPEG2000 具有如下主要特点:     ①良好的低比特率压缩性能,以适应网络、移动通信等有限带宽的应用;     ②能够根据图像质量、视觉感受和分辨率进行渐进传输;     ③既支持无损又支持有损压缩;     ④对码流的随机存取和感兴趣区域(ROI)的编码;     ⑤具有较强的抗误码能力;     ⑥具有开放结构,并向下兼容等。 2  JPEG2000基本编码方案 2.1  基本编码流程方案     JPEG2000的基本编码流程方案主要有以下6个部分组成(如图1):     (1)预处理:主要是将源图像划分为较小的矩形区域,称为拼接块,作为独立的图像用于压缩。目的是为了降低压缩过程所需的内存资源。降低量级可以使样本的动态范围基本关于零对称,使在进行离散小波......

阅读全文(3058) | 评论:0 | 复制链接

0.618算法(matlab)(2008-05-01 13:21:00)

摘要:a=-1; b=1; l=.16; x1=a+.382*(b-a); x2=a+b-x1; while(abs(b-a)>l) f1=fun(x1); f2=fun(x2); if(f1>f2) a=x1;x1=x2;x2=a+b-x1; else b=x2;x2=x1;x1=a+b-x2; end end answer=(a+b)/2; 调用 function f=fun(x) f=2*x^2-x-1; 使用matlab描述......

阅读全文(2901) | 评论:0 | 复制链接

huffman编码及译码(2008-04-14 22:41:00)

摘要:变量和内存的问题,原来是自己理解,通过写小代码来验证,但是总感觉有什么地方不对,使我很混乱,所以今天就在网上看了一些文章,然后重新认识了这个问题。下面算是我的认识,如果有不对的地方,请指出,多多交流................ 我是新手!!!

    C++中内存的分配:
    1.栈:是用来存放像一般变量和函数参数等的一块内存。系统会在变量生存期结束时自动释放内存,即把内存从栈中弹出。 
    2.堆:用来存放动态变量,如指针。要通过设计者自己管理变量,自行进行创建和清理工作。(利用new和delete) 
    3.自由存储区:就是那些由malloc等分配的内存块,他和堆是十分相似的,不过它是用free来结束自己的生命的。 
    4.全局/静态存储区:全局变量和静态变量被分配到同一块内存。 
    5.常量存储区:用来存储常量,即不能被修改的变量。
­
    以上是内存分区的问题,下面是我理解的问题: 
    1.变量声明与定义: 
    声明只是告诉编译器有这么一个变量,而定义在声明的同时便进行内存分配。
//------1.cpp-------------- #include<iostream>
using namespace std;
extern int n;//声明变量n,只告诉有这么一个名字
void function(int a){....};//定义形参a,并分配内存
int main(){ 
    int i; //定义变量i,并分配内存 
    return 0;
}

阅读全文(2612) | 评论:0 | 复制链接

快速傅里叶变换(FFT)算法C++实现代码(2008-04-08 06:46:00)

摘要:#include <math.h>
#define DOUBLE_PI   6.283185307179586476925286766559 // 快速傅里叶变换
// data 长度为 (2 * 2^n), data 的偶位为实数部分, data 的奇位为虚数部分
// isInverse表示是否为逆变换
void FFT(double * data, int n, bool isInverse = false)
{
    int mmax, m, j, step, i;
    double temp;
    double theta, sin_htheta, sin_theta, pwr, wr, wi, tempr, tempi;
    n = 2 * (1 << n);
    int nn = n >> 1;
    // 长度为1的傅里叶变换, 位置交换过程
    j = 1;
    for(i = 1; i < n; i += 2)
    {
        if(j > i)
        {
            temp = data[j - 1];
            data[j - 1] = data[i - 1];
        &nbs......

阅读全文(6561) | 评论:2 | 复制链接

DIT FFT2 示例(2007-11-02 22:35:00)

摘要:/* Dev-C++ 4.9.9.2 下运行通过 2007.11.2 */
// /*****************fft programe*********************/
#include<math.h>
#include<stdio.h>
#include<stdlib.h> struct complex {
    double x;
    double y;
}; #define Num 32
double result[Num+1];
struct complex s[Num+1];
const double PI = 3.14159265358979323846; /* b1 ,b2 相乘的结果 b3 */
struct complex EE(struct complex b1,struct complex b2)
{
    struct complex b3 ;
    b3.x=b1.x*b2.x-b1.y*b2.y ;
    b3.y=b1.x*b2.y+b1.y*b2.x ;
    return(b3);
}
/* M_PI=3.14159265358979323846 为math.h 中定义的 pi 值 */    
void FFT(struct complex *xin,int N)
{
    int f,m,nv2,nm1,i,k,j=1,l ;
    /*int f,m,nv2,nm1,i,k,j=N/2,l;*/
    struct complex v,w,t ;
    nv2=N/2 ;
    f=N ;
  ......

阅读全文(2859) | 评论:0 | 复制链接

FFT4 C程序(2007-05-15 11:44:00)

摘要:/* VC 下运行通过 2007。4。26 把radix4中某些层for->while等效 14:51*/
/*****************fft programe*********************/
void rad4(double x[],double y[],double TAB[],int i,int n2,int adr1,int adr2,int adr3)
{
 int i1,i2,i3;
 double co1,co2,co3,si1,si2,si3;
 double r1,r2,r3,r4,s1,s2,s3,s4;     i1=i+n2;i2=i1+n2;i3=i2+n2;                       /* 数据位置 */  co1=TAB[2*adr1];co2=TAB[2*adr2];co3=TAB[2*adr3]; /* 旋转因子 */
 si1=TAB[2*adr1+1];si2=TAB[2*adr2+1];si3=TAB[2*adr3+1];  r1=x[i]+x[i2];r3=x[i]-x[i2];
 s1=y[i]+y[i2];s3=y[i]-y[i2];
 r2=x[i1]+x[i3];r4=x[i1]-x[i3];
 s2=y[i1]+y[i3];s4=y[i1]-y[i3];  x[i]=r1+r2; y[i]=s1+s2; 
 r2=r1-r2; r1=r3-s4;r3=r3+s4;
 s2=s1-s2; s1=s3+r4;s3=s3-r4;
 x[i1]=co1*r3+si1*s3;y[i1]=co1*s3-si1*r3;
 x[i2]=co2*r2+si2*s2;y[i2]=co2*s2-si2*r2;......

阅读全文(4357) | 评论:0 | 复制链接

破解求pi的怪异程序(2006-08-05 01:14:00)

摘要:Cong Wang
25th November,2005


Institute of Post and Telecommunication, Xi'an, PRC China
Network Engineering Dep.


引言
  网上流传着一个怪异的求pi程序,虽然只有三行却能求出pi值连小数点前共800位。这个程序如下:

/*某年Obfuscated C Contest佳作选录:*/
#include < stdio.h>
long a=10000, b, c=2800, d, e, f[2801], g;
main(){
for(;b-c;)f[b++]=a/5;
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)
for(b=c;d+=f[b]*a,f[b]=d%--g,d/=g--,--b;d*=b);
}

/* (本程式可算出pi值连小数点前共800位)
(本程式录自sci.math FAQ,原作者未详)*/

咋一看,这程序还挺吓人的。别慌,下面就告诉你它是如何做到的,并且告诉你写怪异C程序的一些技巧。^_^

展开化简
  我们知道,在C语言中,for循环和while循环可以互相代替。

  for(statement1;statement2;statement3){
    statements;
  }

上面的for语句可以用下面的while语句来代替:

  statement1;
  while(statement2){
    statements;
    statement3;
  }

而且要写怪异的C程序,逗号运算符无疑是一个好的助手,它的作用是:
从左到右依次计算各个表达式的值,并且返回最右边表达式的值。
把它嵌入for循环中是写怪异代码的常用技巧之一。所以,上面的程......

阅读全文(4113) | 评论:1 | 复制链接