ubuntu系统启动时reservedsvdcode108

ubuntu系统启动时reservedsvdcode108,第1张

打开一个终端,执行下面的命令:sudo rm /var/crash/

这个 *** 作会删除所有在/var/crash目录下的所有内容。这样你就不会再被这些报告以前程序错误的d窗所扰。但是如果又有一个程序崩溃了,你就会再次看到“检测到系统程序错误”的错误。你可以再次删除这些报告文件,或者你可以禁用Apport来彻底地摆脱这个错误d窗。

2、彻底地摆脱Ubuntu中的系统错误d窗

要禁止Apport,并且彻底地摆脱Ubuntu系统中的程序崩溃报告,打开一个终端,输入以下命令:

gksu gedit /etc/default/apport

这个文件的内容是:

# 设置0表示禁用Apportw,或者1开启它。

# 你可以用下面的命令暂时关闭它:

# sudo service apport start force_start=1

enabled=1

把enabled=1改为enabled=0。保存并关闭文件。完成之后你就再也不会看到d窗报告错误了。很显然,如果我们想重新开启错误报告功能,只要再打开这个文件,把enabled设置为1就可以了。

/

本程序在linux g++下编译通过

bool svd(vector<vector<double> > A, int K, vector<vector<double> > &U, vector<double> &S, vector<vector<double> > &V);

A: 输入待分解矩阵

K: 输入,取前K大奇异值及奇异向量

U[0],U[1],,U[K-1]: 前K大奇异值对应的左奇异向量

S[0],S[1],,S[K-1]: 前K大奇异值 S[0]>=S[1]>=>=S[K-1]

V[0],V[1],,V[K-1]: 前K大奇异值对应的右奇异向量

/

#include <cmath>

#include <iostream>

#include <iomanip>

#include <cstdlib>

#include <cstring>

#include <fstream>

#include <vector>

using namespace std;

const int MAX_ITER=100000;

const double eps=00000001;

double get_norm(double x, int n){

    double r=0;

    for(int i=0;i<n;i++)

        r+=x[i]x[i];

    return sqrt(r);

}

double normalize(double x, int n){

    double r=get_norm(x,n);

    if(r<eps)

        return 0;

    for(int i=0;i<n;i++)

        x[i]/=r;

    return r;

}

inline double product(doublea, double b,int n){

    double r=0;

    for(int i=0;i<n;i++)

        r+=a[i]b[i];

    return r;

}

void orth(double a, double b, int n){//|a|=1

    double r=product(a,b,n);

    for(int i=0;i<n;i++)

        b[i]-=ra[i];

    

}

bool svd(vector<vector<double> > A, int K, vector<vector<double> > &U, vector<double> &S, vector<vector<double> > &V){

    int M=Asize();

    int N=A[0]size();

    Uclear();

    Vclear();

    Sclear();

    Sresize(K,0);

    Uresize(K);

    for(int i=0;i<K;i++)

        U[i]resize(M,0);

    Vresize(K);

    for(int i=0;i<K;i++)

        V[i]resize(N,0);

    

    srand(time(0));

    double left_vector=new double[M];

    double next_left_vector=new double[M];

    double right_vector=new double[N];

    double next_right_vector=new double[N];

    int col=0;

    for(int col=0;col<K;col++){

        double diff=1;

        double r=-1;

        while(1){

            for(int i=0;i<M;i++)

                left_vector[i]= (float)rand() / RAND_MAX;

            if(normalize(left_vector, M)>eps)

                break;

        }

        for(int iter=0;diff>=eps && iter<MAX_ITER;iter++){

            memset(next_left_vector,0,sizeof(double)M);

            memset(next_right_vector,0,sizeof(double)N);

            for(int i=0;i<M;i++)

                for(int j=0;j<N;j++)

                    next_right_vector[j]+=left_vector[i]A[i][j];

            r=normalize(next_right_vector,N);

            if(r<eps) break;

            for(int i=0;i<col;i++)

                orth(&V[i][0],next_right_vector,N);

            normalize(next_right_vector,N);

            for(int i=0;i<M;i++)

                for(int j=0;j<N;j++)

                    next_left_vector[i]+=next_right_vector[j]A[i][j];

            r=normalize(next_left_vector,M);

            if(r<eps) break;

            for(int i=0;i<col;i++)

                orth(&U[i][0],next_left_vector,M);

            normalize(next_left_vector,M);

            diff=0;

            for(int i=0;i<M;i++){

                double d=next_left_vector[i]-left_vector[i];

                diff+=dd;

            }

            memcpy(left_vector,next_left_vector,sizeof(double)M);

            memcpy(right_vector,next_right_vector,sizeof(double)N);

        }

        if(r>=eps){

            S[col]=r;

            memcpy((char )&U[col][0],left_vector,sizeof(double)M);

            memcpy((char )&V[col][0],right_vector,sizeof(double)N);

        }else{

            cout<<r<<endl;

            break;

        }

    }

    delete [] next_left_vector;

    delete [] next_right_vector;

    delete [] left_vector;

    delete [] right_vector;

    return true;

}

void print(vector<vector<double> > &A){

}

int main(){

    int m=10;

    int n=8;

    int k=5;

    //分解一个108的矩阵A,求其前5个奇异值和奇异向量

    srand(time(0));

    vector<vector<double> > A;

    Aresize(m);

    

    for(int i=0;i<m;i++){

        A[i]resize(n);

        for(int j=0;j<n;j++)

            A[i][j]=(float)rand()/RAND_MAX-05;

    }

    

    cout<<"A="<<endl;

    for(int i=0;i<Asize();i++){

        for(int j=0;j<A[i]size();j++){

            cout<<setw(12)<<A[i][j]<<' ';

        }

        cout<<endl;

    }

    cout<<endl;

    vector<vector<double> > U;

    vector<double> S;

    vector<vector<double> > V;

    svd(A,k,U,S,V);

    cout<<"U="<<endl;

    for(int i=0;i<U[0]size();i++){

        for(int j=0;j<Usize();j++){

            cout<<setw(12)<<U[j][i]<<' ';

        }

        cout<<endl;

    }

    cout<<endl;

    cout<<"S="<<endl;

    for(int i=0;i<Ssize();i++){

        cout<<setw(7)<<S[i]<<' ';

    }

    cout<<endl;

    cout<<"V="<<endl;

    for(int i=0;i<V[0]size();i++){

        for(int j=0;j<Vsize();j++){

            cout<<setw(12)<<V[j][i]<<' ';

        }

        cout<<endl;

    }

    return 0;

}

以上就是关于ubuntu系统启动时reservedsvdcode108全部的内容,包括:ubuntu系统启动时reservedsvdcode108、svd分解 c语言实现、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9658908.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-30
下一篇 2023-04-30

发表评论

登录后才能评论

评论列表(0条)

保存