24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 1335  |  回复: 5
本帖产生 1 个 程序强帖 ,点击这里进行查看

dubo

金虫 (著名写手)

优秀版主

[求助] 1000金币求把下面MATLAB代码专为C语言

由于最近比较忙,所以想请以为比较清闲的人帮我把下面的matlab程序转换为C语言版(最好能直接在linux上运行)的。谢谢各位!!

[code/]
clc;clear;  
load rdf.xvg;
T=500;%%The tempture
multi=500;
data=rdf;
x_from=0;
x_to=1.592;
jingdu=0.002;
x_from=floor(x_from/jingdu)*jingdu;
x_to=floor(x_to/jingdu)*jingdu;
x_to_big=3;%%x_to_big  is the data_out big
x=0:jingdu:x_to;
from=1;
to=length(x);
len=size(data(:,2));
len(1,1)=to-len(1,1);
x=x';
kBT=T*8.3145/1000;
dx=-kBT*log(smooth([data(:,2);zeros(len)])+eps);
dx=smooth(dx);
dx=smooth(dx);
dx=smooth(dx);
dx=smooth(dx);
dx=smooth(dx);
dx=smooth(dx);
dx=smooth(dx);
dx=smooth(dx);
dx=smooth(dx);
dx=smooth(dx);
%% nonbonded tabulate
fx=zeros(size(x));
fx2=zeros(size(x));
hx=zeros(size(x));
hx2=zeros(size(x));
gx=zeros(size(x));
gx2=zeros(size(x));
gx(from:to)=dx(from:to);
gx2=smooth(gx2);
table_non=[x,fx,fx2,gx,gx2,hx,hx2];

%% table up x_to
length_up= (x_to+jingdu):jingdu:x_to_big;
dd_zero=zeros(length(length_up),1);
dd_up=[length_up'  dd_zero  dd_zero  dd_zero  dd_zero  dd_zero  dd_zero];
table_non=[table_non;dd_up];
save('table_CR1_CR1.xvg', 'table_non', '-ASCII');
[/code]
回复此楼

» 本帖@通知

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖


dubo(金币+50): 为什么说,这个代码不够优美啊! 2011-11-12 12:38:57
dubo(金币-49): 操作失误 2011-11-12 12:39:57
ben_ladeng: 专家考核存档 2011-11-12 23:27:09
转了测试了.代码正确完成任务,结果比较了,完全相同,
不过这matlab代码谁写的,不怎么优美
CODE:
#include
#include
#include


// --------------------------
// load data from xvg file
// --------------------------
void loadData(FILE *fid, float data[797][2])
{
        int i=0;
        while(fscanf(fid,"%f %f\n",&data[i][0],&data[i][1])!=EOF)
                i++;
}


// --------------------------
// write back to xvg file
// --------------------------
void saveData(float data[1501][7])
{
        FILE *fout;
        int i,j;
        fout = fopen("table_CR1_CR1.xvg","w");
        if(fout==NULL)
                return;

        for (i=0;i<1501;++i)
        {
                for (j=0;j<7;++j)
                {
                        fprintf(fout,"%f ",data[i][j]);
                }
                fprintf(fout,"\n");
        }
               

        fclose(fout);
}

// --------------------------
// zeros vector
// --------------------------
void zeros(float vec[797])
{
        int i;
        for (i=0;i<797;++i)
                vec[i] = 0.0;
}
// --------------------------
// smooth the array with
// default span 5
// --------------------------
void smooth(float vec[797])
{
        float sum;
        int i,j;
        for (i=0;i<797;++i)
        {
                sum = 0.0;

                if (i<3)
                {
                        for (j=0;j<=i;++j)
                                sum += vec[j];
                        vec[i] = sum/(i+1);
                }
                else if (i>=797-3)
                {
                        for (j=i;j<797;++j)
                                sum += vec[j];
                        vec[i] = sum/(797-i);
                }
                else
                {
                        for (j=i-2;j<=i+2;++j)
                                sum += vec[j];
                        vec[i] = sum/5;
                }
        }
}

// --------------------------
// main entry
// --------------------------
int main(int argc, char *argv[])
{
        FILE *fid;
        float eps = 2.2204e-16;
        float data[797][2], tablenon[1501][7];
        float x[797], dx[797],
                fx[797], fx2[797],
                hx[797], hx2[797],
                gx[797], gx2[797];
        double xfrom = 0.0, xto = 1.592, xtobig = 3.0, jingdu = 0.002, kbt;

        int T = 500, multi = 500, from = 1, to = 797, len = 797;

        int i,j;

        fid = fopen("rdf.xvg","r");
        if(fid==NULL)
                return -1;

        // read to data 797*2
        loadData(fid,data);
        fclose(fid);

        // make x and dx
        for (i=0;i<797;++i)
        {
                x[i] = i*jingdu;
                dx[i] = data[i][1];
        }

        // update dx
        kbt = T*8.3145/1000;
        smooth(dx);
        for (i=0;i<797;++i)
        {
                dx[i] += eps;
                dx[i] = -1*kbt*log(dx[i]);
        }

        // smooth 10 times
        for        (i=0;i<10;++i)
                smooth(dx);

        zeros(fx);
        zeros(fx2);
        zeros(hx);
        zeros(hx2);
        zeros(gx);
        zeros(gx2);
       
        for (i=from;i                 gx2[i] = dx[i];

        smooth(gx2);

        // first 797 row
        for (i=0;i<797;++i)
        {
                tablenon[i][0] = x[i];
                tablenon[i][1] = fx[i];
                tablenon[i][2] = fx2[i];
                tablenon[i][3] = gx[i];
                tablenon[i][4] = gx2[i];
                tablenon[i][5] = hx[i];
                tablenon[i][6] = hx2[i];
        }


        // the rest
        for (i=797;i<1501;++i)
        {
                tablenon[i][0] = xto+(i+1-797)*jingdu;
                for (j=1;j<7;++j)
                        tablenon[i][j] = 0;
        }

        saveData(tablenon);

        system("PAUSE");
        return 0;
}

比较,误差是0
CODE:
>> tt = load('table_CR1_CR1.xvg');
>> size(tt)
ans =
        1501           7
>> tn = table_non;
>> size(table_non)
ans =
        1501           7
>> e = tn-tn;
>> sum(e(:))
ans =
     0
>>  

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
2楼2011-11-11 05:07:48
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军

【答案】应助回帖

★ ★
xzhdty(金币+2): 欢迎常来程序语言讨论 2011-11-11 10:48:28
dubo(金币+1000): 100,明天我测试一下给其他的金币,呵呵,辛苦了!!! 2011-11-11 23:33:21
ben_ladeng(程序强帖+1): 专家考核存档 2011-11-12 23:28:11
非常抱歉,看错了gx和gx2,帖子无法修改,重贴了
CODE:
#include
#include
#include


// --------------------------
// load data from xvg file
// --------------------------
void loadData(FILE *fid, float data[797][2])
{
        int i=0;
        while(fscanf(fid,"%f %f\n",&data[i][0],&data[i][1])!=EOF)
                i++;
}


// --------------------------
// write back to xvg file
// --------------------------
void saveData(float data[1501][7])
{
        FILE *fout;
        int i,j;
        fout = fopen("table_CR1_CR1.xvg","w");
        if(fout==NULL)
                return;

        for (i=0;i<1501;++i)
        {
                for (j=0;j<7;++j)
                {
                        fprintf(fout,"%f ",data[i][j]);
                }
                fprintf(fout,"\n");
        }
               

        fclose(fout);
}

// --------------------------
// zeros vector
// --------------------------
void zeros(float vec[797])
{
        int i;
        for (i=0;i<797;++i)
                vec[i] = 0.0;
}
// --------------------------
// smooth the array with
// default span 5
// --------------------------
void smooth(float vec[797])
{
        float sum;
        int i,j;
        for (i=0;i<797;++i)
        {
                sum = 0.0;

                if (i<3)
                {
                        for (j=0;j<=i;++j)
                                sum += vec[j];
                        vec[i] = sum/(i+1);
                }
                else if (i>=797-3)
                {
                        for (j=i;j<797;++j)
                                sum += vec[j];
                        vec[i] = sum/(797-i);
                }
                else
                {
                        for (j=i-2;j<=i+2;++j)
                                sum += vec[j];
                        vec[i] = sum/5;
                }
        }
}

// --------------------------
// main entry
// --------------------------
int main(int argc, char *argv[])
{
        FILE *fid;
        float eps = 2.2204e-16;
        float data[797][2], tablenon[1501][7];
        float x[797], dx[797],
                fx[797], fx2[797],
                hx[797], hx2[797],
                gx[797], gx2[797];
        double xfrom = 0.0, xto = 1.592, xtobig = 3.0, jingdu = 0.002, kbt;

        int T = 500, multi = 500, from = 1, to = 797, len = 797;

        int i,j;

        fid = fopen("rdf.xvg","r");
        if(fid==NULL)
                return -1;

        // read to data 797*2
        loadData(fid,data);
        fclose(fid);

        // make x and dx
        for (i=0;i<797;++i)
        {
                x[i] = i*jingdu;
                dx[i] = data[i][1];
        }

        // update dx
        kbt = T*8.3145/1000;
        smooth(dx);
        for (i=0;i<797;++i)
        {
                dx[i] += eps;
                dx[i] = -1*kbt*log(dx[i]);
        }

        // smooth 10 times
        for        (i=0;i<10;++i)
                smooth(dx);

        zeros(fx);
        zeros(fx2);
        zeros(hx);
        zeros(hx2);
        zeros(gx);
        zeros(gx2);
       
        for (i=0;i<797;++i)
                gx[i] = dx[i];

        smooth(gx2);

        // first 797 row
        for (i=0;i<797;++i)
        {
                tablenon[i][0] = x[i];
                tablenon[i][1] = fx[i];
                tablenon[i][2] = fx2[i];
                tablenon[i][3] = gx[i];
                tablenon[i][4] = gx2[i];
                tablenon[i][5] = hx[i];
                tablenon[i][6] = hx2[i];
        }


        // the rest
        for (i=797;i<1501;++i)
        {
                tablenon[i][0] = xto+(i+1-797)*jingdu;
                for (j=1;j<7;++j)
                        tablenon[i][j] = 0;
        }

        saveData(tablenon);

        system("PAUSE");
        return 0;
}

matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
3楼2011-11-11 07:49:13
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

imyourkobe

铁杆木虫 (著名写手)

【答案】应助回帖


jjdg(金币+1): 感谢参与 2011-11-12 00:42:45
我以前做了一年这样的工作。其实比较容易的。
4楼2011-11-11 18:09:27
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dubo

金虫 (著名写手)

优秀版主

引用回帖:
3楼: Originally posted by libralibra at 2011-11-11 07:49:13:
非常抱歉,看错了gx和gx2,帖子无法修改,重贴了
[code] #include <stdio.h>
#include <stdlib.h>
#include <math.h>


// --------------------------
// load data from xvg file
// -- ...

金币都给你了啊!你给的代码模块化挺好的,不过有些参量要是能从文件中读入,就更好了!!
5楼2011-11-12 12:42:30
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

libralibra

至尊木虫 (著名写手)

骠骑将军


余泽成(金币+1): 谢谢参与应助! 2011-11-13 21:37:30
引用回帖:
5楼: Originally posted by dubo at 2011-11-12 12:42:30:
金币都给你了啊!你给的代码模块化挺好的,不过有些参量要是能从文件中读入,就更好了!!

如果是c++,动态数组会方便些.
c能不能动态数组我不熟啊
matlab/VB/python/c++/Java写程序请发QQ邮件:790404545@qq.com
6楼2011-11-13 03:24:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 dubo 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 273求调剂 +11 麦小叮当 2026-04-06 11/550 2026-04-06 19:19 by 无际的草原
[考研] 071000生物学调剂 +7 拉提桃 2026-04-06 7/350 2026-04-06 18:55 by 52305043001
[考研] 材料调剂 +12 一样YWY 2026-04-05 13/650 2026-04-06 15:38 by lin-da
[考研] 一志愿211生物学280分 求调剂 +5 李rien 2026-04-05 5/250 2026-04-06 10:30 by zhyzzh
[考研] 一志愿北京交通大学材料工程总分358求调剂 +4 cs0106 2026-04-04 4/200 2026-04-05 18:46 by imissbao
[考研] 求调剂到0856材料工程 +3 程9915 2026-04-05 3/150 2026-04-05 18:15 by 蓝云思雨
[考研] 313求调剂 +5 海日海日 2026-04-04 5/250 2026-04-05 15:52 by jndximd
[考研] 一志愿华中农业大学0710(A)初试329分 求调剂 +4 一名26考研生 2026-04-04 4/200 2026-04-05 10:01 by barlinike
[考研] 353求调剂 +10 MayUxw1 2026-04-03 10/500 2026-04-05 09:23 by 无际的草原
[考研] 调剂 +11 JLLLLLLLLLL 2026-04-03 11/550 2026-04-04 22:21 by hemengdong
[考研] 278求调剂 +14 范婷娜 2026-04-04 15/750 2026-04-04 22:15 by lqwchd
[考研] 297求调剂 +11 ljy20040718! 2026-04-03 13/650 2026-04-04 09:23 by 来看流星雨10
[考研] 372分材料与化工(085600)一志愿湖南大学求调剂 +3 蓝笺片 2026-04-03 4/200 2026-04-03 17:58 by Jimmyandyou
[考研] 求调剂不挑专业 +3 xrh030412 2026-04-01 3/150 2026-04-03 14:40 by 氮气气气
[考研] 311求调剂一志愿合肥工业大学 +15 秋二十二 2026-03-30 15/750 2026-04-03 10:19 by linyelide
[考研] 26考研调剂 +4 Wnz.20030617 2026-04-01 5/250 2026-04-02 16:11 by 1939136013狗壮
[考研] 266分,一志愿电气工程,本科材料,求材料专业调剂 +10 哇呼哼呼哼 2026-04-01 11/550 2026-04-02 11:31 by lnilvy
[考研] 324求调剂 +5 想上学求调 2026-04-01 6/300 2026-04-02 10:16 by sanrepian
[考研] 335求调剂 +3 321* 2026-03-31 4/200 2026-04-01 00:00 by 321*
[考研] 080500-315分复试调剂 +9 上岸3821 2026-03-31 9/450 2026-03-31 17:29 by 唐沐儿
信息提示
请填处理意见