c++实训5-6-7-8

来源:互联网 发布:60魔兽数据库 编辑:程序博客网 时间:2024/06/15 03:24

因为已经放假,所以很多内容因为学过而省略

实训五 一元多项式的存储与计算

f(x)=anxn+an1xn1+a1x+a0
进行对此方程的计算:
思路,对an的这些数进行double存储。然后分解f(x)函数。类似:
f(x)=((((akx+ak1)x+ak2)x+ak3)x++a1+a0
或者直接计算。很简单。

实训六生成正态分布的伪随机数

随机数的生成使用

1.用srand(time(0))初始化随机种子

2.使用rand()函数。生成随机数个数

rand函数的返回值是伪随机数,在范围0~RAND_MAX内均匀分布,RAND_MAX是十进制32767 .为使每次生词的随机数序列不同,所以需要在rand()之前用系统时间指定随机种子。。

生成区间[a,b]的使用办法,rand()%(b-a)+a;

  1. 生成服从正态分布的随机数
    概率密度函数:
    f(x)=1ϕ2πexp((xu)22ϕ2)

    分布函数:
    F(x)=Xf(t)dt

    中心极限定理:
    x~n(0,1)
    X=n1i=0n2n12

    XN(U,ϕ2):Xu+ϕX

    Box Muller 算法:
    XN(0,1):X=Rcosθ=2lnX1cos(2πX2)

    XN(u,ϕ2):Xu+ϕX

    为了对程序的验证:写下了代码,并且注释:
#include<iostream>#include<fstream>#include<ctime>using namespace std;const double PI = 3.1415926;double ND_BoxMuller(double u = 0, double t = 1){    //产生一个随机数    double x1 = double(rand() )/ RAND_MAX;    double x2 = double(rand()) / RAND_MAX;    double x = u + t*sqrt(-2.0*log(x1))*cos(2 * PI*x2);    //cout << x << "  ";    return x;}double ND_CentralLimit(double u, double t){    //随机数    double total = 0;    for (int i = 0; i < 12; i++)//计算12个【0,1】均匀分布的随机数之和        total += double(rand()) / RAND_MAX;    double x = u + t*(total - 6);//n=12,n/2=6    return x;}void showRandom(double arr[], int num){    for (int i = 0; i < num; i++)        cout << arr[i] << endl;}void DatatoFile(double a[], double b[], int num){    //将俩种方法产生的1000个随机数按spss的txt格式写入文件    ofstream out("SPSS数据.txt");    for (int i = 0; i < num; i++)        out << a[i] << " " << b[i] << endl;    out.close();}int main(){    const int N = 1000;//随机1000个数    double Xm[N], Xc[N];//存储生成的随机数    double u = 2.0, t = 3.5;//均值u和方差t    srand((unsigned int)time(0));    for (int i = 0; i < N; i++)    {        Xm[i] = ND_BoxMuller(u, t);        Xc[i] = ND_CentralLimit(u, t);    }    DatatoFile(Xm, Xc, N);    cout << "Box Muller算法:" << endl;    showRandom(Xm, 5);    cout << "中心极限算法" << endl;    showRandom(Xc, 5);    system("pause");    return 0;}

然后我用spass,一脸懵逼,怎么用,乱捣鼓为

这里写图片描述

就这样了,有空再来玩。

实训七信息的加密与解密

此篇的加密解密,是根据异或数字得到的,再异或一次得到初始信息。可根据RC4流密码,差不多。

实训八最小二乘法拟合直线

LinearFit(double abr[],double x[],double y[],int n)//abr存放的abr三个值的数组,x是x的值,y是y的值{    double xsum=0,ysum=0,x2sum=0,xysum=0;//分别进行存储值    for(int i=0;i<n;i++)    {        xsum+=x[k];        ysum+=y[k];        x2sum+=x[k]*x[k];        xysum+=x[k]*y[k];    }    abr[0]=(n*xysum-xsum*ysum)/(n*x2sum-xsum*xsum);//系数a    abr[1]=(ysum-abr[0]*xsum)/n;//系数b    double yavg=ysum/n;    double dy2sum1=0;dy2sum2=0;//$r^2$计算式的分子分母    for(int i=0;i<n;i++)    {        dy2sum1+=((abr[0]*x[k]+abr[1])-yavg)*((abr[0]*x[k]+abr[1])-yavg);        dy2sum2+=(y[k]-yavg)*(y[k]-yayg);    }    abr[2]=dy2sum1/dy2sum2;//相关系数r^2}
原创粉丝点击