数值分析报告1

时间:2024.3.31

 

 

《数析》

20##年11月


一.计算方案的设计

1.初始化并压缩存储矩阵A

定义矩阵,由矩阵性质可知。根据计算实习说明书要求,所有矩阵的零元素都不存储,所以将矩阵压缩存储为矩阵。在矩阵c中检索矩阵的带内元素的方法为:

2.求的值

首先,用幂法求出矩阵按模最大的特征值。然后,根据原点平移法,同样根据幂法求出矩阵按模最大的特征值。当时,;当时,;当时,,若,则,若,则。最后,综上所述,只要求出,通过比较就可以求出

3.求,,的值

用反幂法就可以直接求出。结合上一步求出的,从而很容易求出。其中,用反幂法求的过程中用到了Doolittle分解,即把矩阵写成,是上三角矩阵,所以的值就是所有矩阵主对角线元素的乘积。

4.求的与最接近的特征值

用带平移的反幂法求出的值然后加上就是,即:求出矩阵按模最小的特征值

二.计算源程序

File1 初始化的函数(shushihua)

#include<stdio.h>

#include<math.h>

void chushihua(double A[5][501])

{

int i;

for(i=0;i<501;i++)

       {

        A[2][i]=(1.64-0.024*(i+1))*sin(0.2*(i+1))-0.64*exp(0.1/(i+1));

        A[0][i]=A[4][i]=-0.064;

        A[1][i]=A[3][i]=0.16;

       }

    A[0][0]=A[0][1]=A[1][0]=A[4][500]=A[4][499]=A[3][500]=0;

}

File 2 幂法的函数 (mifa)

#include<stdio.h>

#include<math.h>

double mifa(double A[5][501])

{  int  i,j,t,k=0;

   double g,B=1,c=2,u[501],y[501];

   for(i=0;i<501;i++)

     {

          u[i]=1;

        }

   do

   {

          g=0;

          c=B;

       for(i=0;i<501;i++)

          {

                 g=u[i]*u[i]+g;

          }   

                g=sqrt(g);

       for(i=0;i<501;i++)  

          {

              y[i]=u[i]/g;

          }  

       for(i=0;i<501;i++)

          {

                 u[i]=0;

         

       for(j=0;j<501;j++)

          {  

                 t=i-j+2;

              if(t>=0&&t<=4)

                 {

                        u[i]=A[t][j]*y[j]+u[i];

             

                 } 

          }

          }

          B=0;

          for(i=0;i<501;i++)

          { 

                 B=y[i]*u[i]+B;

          }

      

         k=k++;

   }

   while(fabs((B-c)/B)>1e-12);

   return(B);

}

File 3 Doolittle分解 (doolittle)

#include<stdio.h>

#include<math.h>

void doolittle(double A[5][501])

{

int k,i,j,t,ik;

double S[501],Max,B=1;

for(k=1;k<=501;k++)           //*用选主元Doolittle分解法解方程组(LU分解)*//

{     

      ik=k;

         S[k-1]=0;

      for(t=1;t<=k-1;t++)

          if(fabs(k-t)<3)

             S[k-1]=A[k-t+2][t-1]*A[t-k+2][k-1]+S[k-1];

          S[k-1]=A[2][k-1]-S[k-1];

      Max=S[k-1];     

       for(i=k;i<=501;i++)

   {

             S[i-1]=0;

      for(t=1;t<=k-1;t++)

          if(fabs(i-t)<3&&fabs(t-k)<3)

            S[i-1]=A[i-t+2][t-1]*A[t-k+2][k-1]+S[i-1];

             if(fabs(i-k)<3)

            S[i-1]=A[i-k+2][k-1]-S[i-1];

                else

                  S[i-1]=0-S[i-1];

       }    

     A[2][k-1]=Max;

       for(j=k+1;j<=501;j++)         //*求Ukj*//

       {

       B=0;

       for(t=1;t<=k-1;t++)

              if(fabs(k-t)<3&&fabs(t-j)<3)

                     B=A[k-t+2][t-1]*A[t-j+2][j-1]+B;

           if(fabs(k-j)<3)

               A[k-j+2][j-1]=A[k-j+2][j-1]-B;          

       }

       for(i=k+1;i<=501;i++)               //*求Lik*//

              if(fabs(i-k)<3)

              A[i-k+2][k-1]=S[i-1]/A[2][k-1];

}

}

File 4 反幂法的函数 (fanmifa)

#include<stdio.h>

#include<math.h>

double fanmifa(double A[5][501])

{

extern void doolittle(double A[5][501]);

int k,i,j,t,ik,K=0;

double S[501],x[501],u[501],y[501],H,D,Max,g,B=1,c=2,det;

doolittle(A);

for(i=0;i<501;i++)

{

       u[i]=1;

}

do                     //*求按模最小特征值*//

{

  g=0;

  c=B;

for(i=0;i<501;i++)

{

       g=u[i]*u[i]+g;

}

  g=sqrt(g);

for(i=0;i<501;i++)

{

       y[i]=u[i]/g;

}

x[0]=y[0];                      //*求解x、y*//

for(i=2;i<=501;i++)

  {

         B=0;

    for(t=1;t<=i-1;t++)

       {

              if(fabs(i-t)<3)

              {

                     B=B+A[i-t+2][t-1]*x[t-1];

              }

              x[i-1]=y[i-1]-B;

       }

  }

u[501-1]=x[501-1]/A[2][501-1];     //*求x*//

for(i=501-1;i>=1;i--)

{

  B=0;

  for(t=i+1;t<=501;t++)

  {

         if(fabs(i-t)<3)

         {

                B=B+A[i-t+2][t-1]*u[t-1];

         }

  u[i-1]=(x[i-1]-B)/A[2][i-1];

  }

}

B=0;

for(i=0;i<=500;i++)

{

    B=y[i]*u[i]+B;

}

K=K++;

}

while(fabs((1/B-1/c)/(1/B))>1e-12);

B=1/B;

return(B);

}

最终主程序:

 #include<stdio.h>

#include<math.h>

void blank(void);//定义函数输出空格。

void star1(void);//定义函数输出星号。

void star2(void);//定义函数输出星号。

void blank(void)//函数代码

{

       printf("        ");

}

void star1(void)//函数代码。

{

       blank();

       for(int ii=0;ii<=61;ii++)

       {

              printf("*");

       }

       printf("\n");

}

void star2(void)//函数代码。

{

       for(int ii=0;ii<=17;ii++)

       {

              printf("*");

       }

}

void main()

{extern void chushihua(double A[5][501]);

 extern double mifa(double A[5][501]);

 extern double fanmifa(double A[5][501]);

int i,j,k=0;

double A[5][501],u[501],R[39],R_s,cond,B1,B2,det=1,uk[39];

chushihua(A);

B1=mifa(A);

for(i=0;i<501;i++)

{

       A[2][i]=A[2][i]-B1;

}

B2=mifa(A);

B2=B2+B1;

chushihua(A);         //求条件数cond

R_s=fanmifa(A);

cond=fabs(B1/R_s);

for(i=0;i<501;i++)    //求行列式的值det

{

       det=A[2][i]*det;

}

for(i=0;i<39;i++)

{

       uk[i]=B1+(i+1)*(B2-B1)/40;

}

for(i=0;i<39;i++)

{  

       chushihua(A);

        for(j=0;j<501;j++)

        {

               A[2][j]=A[2][j]-uk[i];

        }

R[i]=uk[i]+fanmifa(A);

}

    star1();                          

       blank();

       star2();

       printf("  数 值 分 析 大 作 业 1  ");

       star2();

       printf("\n");

       blank();

       star2();

       printf(" 北 京 航 空 航 天 大 学  ");

       star2();

       printf("\n");

       blank();

       star2();

       printf("    宇   航   学   院     ");

       star2();

       printf("\n");

       blank();

       star2();

       printf("    学  生:向 纪 鑫      ");

       star2();

       printf("\n");

       blank();

       star2();

       printf("    学 号: SY1415313     ");

       star2();

       printf("\n");

       star1();

if(B2>B1)                                   //输出结果

printf("λ1=%.11e\nλ501=%.11e\n",B1,B2);

else

printf("λ1=%.11e\nλ501=%.11e\n",B2,B1);

printf("λs=%.11e\n",R_s);    

printf("cond=%.11e\n",cond);

printf("det=%.11e\n",det);

for(i=0;i<39;i++)

{

       printf("R[%d]=%.11e\n",i+1,R[i]);

}

}

3.计算结果

4.迭代初始向量的选取对迭代结果的影响

在初始向量为u0=[1  …  .. .. 1 1]的情况下,幂法求得= -1.07001136150e+001 迭代343次;反幂法求=-5.55791079423e-003,迭代22次。当使用初始向量u0=[1  …  .. .. 0 0]时,=-2.08098108524e+000,幂法迭代160次;=2.66888692378e-002,反幂法迭代231次;相应的其他特征值和其迭代次数也发生了变化。

因此初始向量的选择不同,将导致最终结果不同。幂法迭代公式的实质是的单位化,不同使不同,也将不同,近似为特征值,于是特征值不同。迭代次数的差异是由于初始向量到特征向量远近不同而导致的。反幂法同理。

在实际工程计算时,要根据工程实际的情况,估计一个比较可能的结果,来把它作为迭代的初始向量,这样可以极大的提高精度,减少迭代次数。


第二篇:如何写一份好的数据分析报告


在谈这个问题之前先说说写一份好的数据分析报告/邮件的重要性,很简单,因为分析报告的输出是是你整个分析过程的成果,是评定一个产品一个运营事件的定性结论,很可能是产品决策的参考依据,既然这么重要那当然要写好它了。

我认为一份好的分析报告,首先要有一个好的框架,跟盖房子一样,好的分析肯定是有基础有层次,有基础坚实,并且层次明了才能让阅读者一目了然,架构清晰、主次分明才能让别人容易读懂,这样才让人有读下去的欲望;

第二,每个分析都有结论,而且结论一定要明确,如果没有明确的结论那分析就不叫分析了,也失去了他本身的意义,因为你本来就是要去寻找或者印证一个结论才会去做分析的,所以千万不要忘本舍果;

第三,分析结论不要太多要精,如果可以的话一个分析一个最重要的结论就好了,很多时候分析就是发现问题,如果一个一个分析能发现一个重大问题,就达到目的 了,不要事事求多,宁要仙桃一口,不要烂杏一筐,精简的结论也容易让阅者接受,减少重要阅者(通常是事务繁多的领导,没有太多时间看那么多)的阅读心理门 槛,如果别人看到问题太多,结论太繁,不读下去,一百个结论也等于0;

第四、分析结论一定要基于紧密严禁的数据分析推导过程,不要有猜测性的结论,太主观的东西会没有说服力,如果一个结论连你自己都没有肯定的把握就不要拿出来误导别人了;

第五,好的分析要有很强的可读性,这里是指易读度,每个人都有自己的阅读习惯和思维方式,写东西你总会按照自己的思维逻辑来写,你自己觉得很明白,那是因 为整个分析过程是你做的,别人不一定如此了解,要知道阅者往往只会花10分钟以内的时间来阅读,所以要考虑你的分析阅读者是谁?他们最关心什么?你必须站 在读者的角度去写分析邮件;

第六,数据分析报告尽量图表化,这其实是第四点的补充,用图表代替大量堆砌的数字会有助于人们更形象更直观地看清楚问题和结论,当然,图表也不要太多,过多的图表一样会让人无所适从;

第七、好的分析报告一定要有逻辑性,通常要遵照:1、发现问题--2、总结问题原因--3、解决问题,这样一个流程,逻辑性强的分析报告也容易让人接受;

第八、好的分析一定是出自于了解产品的基础上的,做数据分析的产品经理本身一定要非常了解你所分析的产品的,如果你连分析的对象基本特性都不了解,分析出来的结论肯定是空中楼阁了,无根之木如何叫人信服?!

第九、好的分析一定要基于可靠的数据源,其实很多时候收集数据会占据更多的时间,包括规划定义数据、协调数据上报、让开发人员 提取正确的数据或者建立良好的数据体系平台,最后才在收集的正确数据基础上做分析,既然一切都是为了找到正确的结论,那么就要保证收集到的数据的正确性, 否则一切都将变成为了误导别人的努力;

第十、好的分析报告一定要有解决方案和建议方案,你既然很努力地去了解了产品并在了解的基础上做了深入的分析,那么这个过程就决定了你可能比别人都更清楚 第发现了问题及问题产生的原因,那么在这个基础之上基于你的知识和了解,做出的建议和结论想必也会更有意义,而且你的老板也肯定不希望你只是个会发现问题 的人,请你的那份工资更多的是为了让你解决问题的;

十一、不要害怕或回避“不良结论”,分析就是为了发现问题,并为解决问题提供决策依据的,发现产品问题也是你的价值所在,相信你的老板请你来,不是光让你 来唱赞歌的,他要的也不是一个粉饰太平的工具,发现产品问题,在产品缺陷和问题造成重大失误前解决它就是你的分析的价值所在了;

十二、不要创造太多难懂的名词,如果你的老板在看你的分析花10分钟要叫你三次过去来解释名词,那么你写出来的价值又在哪里呢,还不如你直接过去说算了,当然如果无可避免地要写一些名词,最好要有让人易懂的“名词解释”;

十三、最后,要感谢那些为你的这份分析报告/邮件付出努力做出贡献的人,包括那些为你上报或提取数据的人,那些为产品作出支 持和帮助的人(如果分析的是你自己负责的产品),肯定和尊重伙伴们的工作才会赢得更多的支持和帮助,而且我想你也不是只做一锤子买卖,懂得感谢和分享成果 的人才能成为一个有素养和受人尊敬的产品经理;

最后希望每个产品经理都能有良好的数据分析能力,每次分析都能写得很出色,成为优秀成功的产品经理!:)

   

更多相关推荐:
数值分析报告

系名称学号姓名任课老师数值分析航空航天学院1124139027孙诚骁贺力平20xx年12月院部分一幂法与矩阵特征值1幂法求主特征值思路幂法的主要思想就是对假设的任意初始列向量作用n次A矩阵左乘A矩阵后初始向量就...

数值分析实验报告

实验21多项式插值的振荡现象实验目的在一个固定的区间上用插值逼近一个函数显然Lagrange插值中使用的节点越多插值多项式的次数就越高我们自然关心插值多项式的次数增加时Lnx是否也更加靠近被逼近的函数Runge...

数值分析实验报告(包含源程序)

课程实验报告课程实验报告课程实验报告课程实验报告

数值分析读书报告

数值分姓名班级学号老师析作姜欣欣Y110402S20xx0876杨明业数值分析之曲线拟合1问题的提出在化工设计及化工模拟算中需要大量的物性参数及各种设备参数这些参数有些可以通过计算得到但大量的参数还是要通过实验...

数值分析报告

边坡工程数值分析报告题目边坡稳定性分析模拟学院土木工程学院专业建筑与土木工程学生学号指导教师XXXX年XX月XX日1目录一前言二工程概况三本构关系四计算模型五计算结果及分析六结论2一前言边坡稳定性研究是岩土工程...

数值分析课程报告

插值法和多项式拟合的研究摘要在科研和生产实践中常常需要通过一组测量数据来寻找变量x与y的函数关系近似表达式解决这类问题的方法有两种一种是插值法另一种是拟合法插值法的原理是用一个简单函数逼近被计算函数然后用该简单...

数值分析报告

西南交通大学数值分析上机作业姓名明杰学号20xx210370班级14硕电气7班联系方式187xxxxxxxx指导老师余国朱20xx1211目录1序言32必做题421第一题4211多项式拟合的结果4212拉格朗日...

数值分析报告

数值分析上机实习报告20xx年12月目录目录2序言11Newton和NewtonSteffensen迭代法求解比较211计算题目212计算过程与结果213结果分析22插值多项式和多项式拟合321计算题目322计...

西南交大20xx数值分析上机实习报告要求

数值分析20xx上机实习报告要求1应提交一份完整的实习报告具体要求如下1报告要排版美观漂亮若是纸质要有封面封面上要标明姓名学号专业和联系电话2要有序言说明所用语言及简要优特点说明选用的考量3要有目录指明题目程序...

数值分析报告-syg

薄膜渗透率的测定一引言某种医用薄膜有允许一种物质的分子穿透它从高浓度的浓度向低浓度的溶液扩散的功能在试制时需要测定薄膜被这种分子穿透的能力测定方法如下用面积为S的薄膜将容器分为体积为的两部分在两部分中分别注满该...

数值分析实验报告4

实验四数值积分实验目的1了解并掌握matlab软件的基本编程操作方法2初步了解matlab中的部分函数熟悉循环语句的使用3通过上机进一步领悟用复合梯形复合辛普森公式以及用龙贝格求积方法计算积分的原理实验题目14...

数值分析报告

北航20xx级研究生数值分析A计算实习题20xx年11月15日目录1引言32算法设计方案13特殊情况处理44计算结果45结论76参考文献77附录81引言算法背景幂法Jacobi方法及QR方法是求矩阵特征值和特征...

数值分析报告(37篇)