精华内容
下载资源
问答
  • Python支持三种不同的数值类型(浮点数和复数不常用):1. 整型(int):也叫整数,包括正数、负数和0。2. 浮点数(float):也叫小数,由正数部分和小数部分组成。科学计数表示法表示也是浮点数(1e3,2.5E4,20e-3)。3. ...

    Python支持三种不同的数值类型(浮点数和复数不常用):

    1. 整型(int):也叫整数,包括正数、负数和0。

    2. 浮点数(float):也叫小数,由正数部分和小数部分组成。科学计数表示法表示的也是浮点数(1e3,2.5E4,20e-3)。

    3. 复数:由实数部分和虚数部分构成,可以用a+bj,或者complex(a,b)表示,复数的实部a和虚部b都是浮点型。

    数据类型转换——有时候,需要对数据类型进行转换。(下面都是函数,函数的概念后面会讲。类似数学中的y=f(x),就是对一个变量一顿操作)

    x='1' (单引号里面这是字符串,不是数字)

    int(x)将x转换为一个整数。

    float(x)将x转换到一个浮点数。

    complex(x)将x转换到一个复数,实数部分为x,虚数部分为0。

    complex(x,y)将x和y转换到一个复数,实数部分为x,虚数部分为y。x和y是数字表达式。

    # ‐*‐ coding: utf‐8 ‐*‐

    # 用单引号包裹是字符串

    a = '2'

    print(int(a))

    print(float(a))

    D:installpython3python.exe D:/pyscript/python3_script/test66.py

    2

    2.0

    Process finished with exit code 0

    常用的数学运算符:加(+)、减(-)、乘(*)、除(/)、取模(%)、幂运算(**)

    其中除法运算符有两种,一种是真正的除法(/)保留小数,另一种是地板除(//)去除小数。取模运算符只能用于整数

    # ‐*‐ coding: utf‐8 ‐*‐

    a = 10

    b = 20

    print(a+b)

    print(a-b)

    print(a*b)

    print(a/b)

    print(a%b)

    print(a**b)

    print(a//b)

    D:installpython3python.exe D:/pyscript/python3_script/test66.py

    30

    -10

    200

    0.5

    10

    100000000000000000000

    0

    Process finished with exit code 0

    常用的数学函数(函数又称作方法,其概念后面会讲解,简单理解为对某个变量进行一些操作。类似数学中的y=f(x))

    abs(x)返回数字的绝对值,如abs(-10)返回10

    ceil(x)返回数字的上入整数,如math.ceil(4.1)返回5

    exp(x)返回e的x次幂(ex),如math.exp(1)返回2.718281828459045

    fabs(x)返回数字的绝对值,如math.fabs(-10)返回10.0

    floor(x)返回数字的下舍整数,如math.floor(4.9)返回4

    log(x)如math.log(math.e)返回1.0,math.log(100,10)返回2.0

    log10(x)返回以10为基数的x的对数,如math.log10(100)返回2.0

    max(x1,x2,...)返回给定参数的最大值,参数可以为序列。

    min(x1,x2,...)返回给定参数的最小值,参数可以为序列。

    modf(x)返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。在math模块里面。

    pow(x,y)x**y运算后的值。

    round([x,n])返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。

    sqrt(x)返回数字x的平方根。如math.sqrt(2)返回1.4142135623730951

    还有一些三角函数等,这些是放在math模块里面的,使用的时候需要先用import导入。

    还有随机数函数是放在random模块里面,也是需要先导入才能使用

    # ‐*‐ coding: utf‐8 ‐*‐

    a = -10

    print(abs(a))

    D:installpython3python.exe D:/pyscript/python3_script/test66.py

    10

    Process finished with exit code 0

    【这是基础,现在记不住。先浏览一遍即可,知道有这么回事,其中模块、函数等概念后面会讲解】

    展开全文
  • round(x):四舍五入函数fix(x):x取整,舍弃小数点之后的数值
    1. round(x):四舍五入函数
    2. fix(x):对x取整,舍弃小数点之后的数值。
    3. floor(x):对x负向取整。
    4. ceil(x):对x正向取整。
    5. factor(x):对x因式分解。
    6. gcd(x,y):最大公因数
    7. lcm(x,y):找出x和y的最小公倍数
    8. rats(x):用分数表示x。
    9. factorial(x):计算阶乘
    10. nchoosek(n,k):计算c n k。
    11. prime(x):找出小于x的素数。
    12. isprime(x):检查x是否为素数。
      1. diag(A):提取二维矩阵中的对角元素。
      2. fliplr:对矩阵的列进行左右对称翻转
      3. flipud:对矩阵的行进行上下对称翻转
      4. magic(m):创建m*m的魔方矩阵

    展开全文
  • 第一篇先在PowerBI中制作常见的柱形图,简单来说,柱形图就是利用水平的柱子表示不同分类数据的大小,与之类似的是条形图,它就是竖的柱形图,或者说把柱形图顺时针转动90度就成了条形图,使用以及作图方式类似,...
    前面通过大量时间学习那些可能会让你感觉枯燥的数据处理、数据建模等内容,到这里我们开始涉足PowerBI中最让人心动的环节:数据可视化。

    第一篇先在PowerBI中制作常见的柱形图,简单来说,柱形图就是利用水平的柱子表示不同分类数据的大小,与之类似的是条形图,它就是竖的柱形图,或者说把柱形图顺时针转动90度就成了条形图,使用以及作图方式类似,因此本文介绍的柱形图的各项设置也适用于条形图,对它不再作单独介绍。

    在PowerBI的可视化组件中,第一排全是这柱形图和条形图,

    603a8f579b4cbc935c9e796fd807a7bf.png

    微软这么安排当然不是偶然的,因为这些图表的应用实在是太常用了,常用到简直不能称为数据可视化。(可视化不应该是玫瑰图、弦图、桑基图等第一眼看不懂只觉得很炫酷的图吗?什么,弦图、桑基图没听说过?以后会介绍的)

    但不能因为柱形图很大众化很普通就轻视它,实际上,柱形图加上近亲条形图大约可以占据图表展示的半壁江山,也就是一半以上的图表用这些柱子展示就够了,并且通过适当的设置,柱形图也可以有高颜值哦。

    从第一排图表类型可以看出,柱形图又分为:

    • 堆积柱形图
    • 簇状柱形图
    • 百分比堆积柱形图

    可能对这几类柱形图还分不清楚,下面就来制作一个柱形图实际看看分别是什么样的。

    有一份整理好的2006-2015年各省市三个产业的产值表,

    d45586f63392272819508c46a721167d.png

    在画布上放入堆积柱形图,[年度]字段拖入轴中,[第一产业]拖入到值上,一个柱形图就出来了,

    3008aa11ecbb075401ca340d26e45983.png

    因为只有一个序列数值,所以堆积柱形图就是普通的柱形图,加入更多序列才显示出堆积的效果,比如把字段[第二产业]、[第三产业]也拖入到值中,

    24ee1d2ab4f561676dd502ce7c211347.png

    在这个框里拖动各个字段上下的位置,可以改变图表中各字段数值显示的顺序。

    三个序列加入以后就变成了堆积柱形图,显示如下,

    ea5194ad87a3452f92f3ffd311725deb.png

    堆积柱形图的特征:

    • 不同的序列在一根柱子上显示
    • 可以直接比较总量的大小
    • 分类序列的数值比较功能弱化

    选中刚才制作的堆积柱形图,在可视化区域点击簇状柱形图,刚才的图表就变成了簇状柱形图,

    869198c89535241d0e0d1e1886adfc87.png

    簇状柱形图的特征:

    • 不同序列使用不同的柱子
    • 可以比较各序列的数值大小
    • 总量比较功能弱化

    再次选中该图表,然后点击百分比堆积柱形图,图表就变成这样了,

    fe28028313b453cefd4c7ef815b67101.png

    百分比堆积柱形图的特征:

    • 与堆积柱形图类似,不同序列在一根柱子上显示
    • 显示各序列的相对大小,Y轴标签变为百分比
    • 无法比较总量,每根柱子都一样高

    以后就可以分清楚各类柱形图了吧。

    柱形图格式设置

    从上面PowerBI默认出来的图表效果可以看到,虽然比Excel中默认做出来的图表好看了一点点,但离美还差了一大截,完全达不到我们"卖弄"的需求,好在PowerBI中进行格式的美化非常简单,下面就以上面的堆积柱形图为例,选中该图表,点击格式,

    6101f3b3927409ed825ac59acc281a5e.png

    就可以显示每一项图表要素的设置,有开关按钮的要素可以点击打开,然后点击向下的箭头,就可以显示每项要素的细节设置,比如对刚才的簇状柱形图进行如下设置:

    • 修改标题文字、并增大字号
    • Y轴网格线变为白色,宽度设为2磅
    • 三个序列数据颜色更换
    • 背景颜色更换

    变成了下面的风格,

    ca9d48a0ecc58333d64187bf92201052.png

    就这样简单点击几下,典型的ECO图表风格就大致出来了,一个合格的柱形图也大抵如此:纵横轴清晰、有图例、有数据单位、和图表呼应的标题,当然还有最养眼的色彩搭配,关于图表的美化后面会继续深入。

    公众号:PowerBI星球

    展开全文
  • 解线性方程组直接法:Gauss消去法与矩阵三角分解法(Doolittle分解法相比Crout分解法更常用)及其选择列主元改进方法、Doolittle分解法延伸(实对称正定矩阵利用Cholesky分解得到平方根法、三角矩阵作为...

    刚考完研究生的数值分析课,打算整理一下平时的上机代码,做一个汇总。

    数值分析大致八部分内容——

    解线性方程组的直接法:Gauss消去法与矩阵三角分解法(Doolittle分解法相比Crout分解法更常用)及其选择列主元的改进方法、Doolittle分解法的延伸(实对称正定矩阵利用Cholesky分解得到的平方根法、三对角矩阵作为线性方程组系数矩阵的追赶法)

    解线性方程组的迭代法:Jacobi迭代法、Gauss-Seidel迭代法(利用前者每次迭代已得到的最新分量加速)、逐次超松弛(SOR,Successive Over-Relaxation)方法(取适当松弛因子ω可以比Gauss-Seidel方法收敛得更快)以及共轭梯度法(教材未讲,前提条件:系数矩阵A为对称正定矩阵)

    函数拟合的插值法:拉格朗日(Lagrange)插值法与牛顿(Newton)插值法(根据插值多项式的存在唯一性定理,对同一插值问题两者展开的结果相同。牛顿插值法的优势在于:每次增加或删减一个节点,只需插值多项式增加或减少一项,相当于对不同插值节点数的情形给出了迭代公式)、分段插值法(克服插值节点过多时逼近效果反而很差的Runge现象,常见的是分段线性插值,也包括分段抛物线插值法)、Hermite插值法(插值条件包括所有已知节点的函数值和导数值,即两种条件的等式数量相等)、样条插值法(最基本的是三次样条插值法,也属于分段插值法的一种,整体具有二阶连续微商)。需要指出的是,除了分段插值法和样条插值法,其他几种方法经常是交叉混合使用的,因为实际插值条件中节点函数值和节点导数值条件的数目往往不同,可以灵活选择部分条件先构造Lagrange或Hermite插值多项式,然后再添加一项,使得满足附加插值条件的同时,已有插值条件不受影响。两项相加并解出待定系数就是完整的一般形式的插值多项式。此时插值余项也需自行推导,但一般是反复运用罗尔定理得出的带f(ξ)的高阶导数的表达式。

    函数近似替代(复杂化简单、高次化低次)的数值逼近方法:数值逼近中引入了函数范数和函数内积的概念。前者用来度量逼近函数与原函数在一个区间内的整体误差,后者广泛用于各种数值逼近方法的计算过程中。函数的∞-范数对应最佳一致逼近;函数的2-范数(Euclid-范数)对应最佳平方逼近。这两种是最基本的数值逼近方法。(上课只选讲了最佳平方逼近,按老师原话,对工科学生来说最佳一致逼近理论性太强,且实际中用得不是很多)。将函数逼近中的线性无关函数族(类比线性代数中n维向量空间的向量线性表示选择的一组基)进行正交化(类似于线性代数中的施密特正交化),取适当的积分区间和权函数,可以衍生出最佳一致逼近中的切比雪夫(Chebyshev)多项式和最佳平方逼近中的勒让德(Legendre)多项式。以引入勒让德多项式为例,此时解法方程组,系数矩阵G为对角阵,可以大大降低函数逼近计算中解线性方程组的工作量。使用的教材中,将统计学中数据拟合的最小二乘法也归到数值逼近一章,个人理解是因为它的理论证明过程和计算套路都和最佳平方逼近及其相似,可以类比学习。

    数值积分算法与数值微分(未学):数值积分一章从机械求积公式出发,引入插值法并采用等距插值节点得到Newton-Cote公式。积分区间等分数n取不同整数有一系列不同数值求积公式,常见的为梯形公式(n=1)、Simpson公式(n=2)及Cotes公式(n=4)。当n≥8时,Cotes系数出现负数,数值不稳定,又有与Newton-Cotes公式对应的一系列复化求积公式(为保证数值积分精度,需积分步长相对固定,维持在一个较小的值。可以等分积分区间,在每个子区间中用n较小(<8)的Newton-Cotes公式,这是复化求积公式的基本思想。)除此之外数值积分还有变步长的Romberg方法,适用于无法事先选择恰当的步长,在计算过程需要改变步长的情形。

    解非线性方程及方程组的数值方法:对于非线性方程,最简单的方法是二分法,这个在高中就涉及过。常用的迭代法包括不动点迭代法、牛顿迭代法(Newton-Raphson迭代法或N-R法)和割线法。对于不动点迭代法,需将f(x)=0适当变形,取合适的φ(x)满足不动点迭代法的收敛条件(①"压缩镜像“;②迭代初值选取区间上导数值的绝对值恒不大于一个小于1的正数);N-R法可以看做不动点迭代法φ(x)取一特殊函数的特例,也具有鲜明的几何意义,又称切线法;割线法是考虑到部分函数计算导数困难,用差商近似导数所做的改进。Newton法可以推广到非线性方程组的情形,在此基础上有一类拟Newton法,是针对前者的Jacobian矩阵中精确求解数目为方阵阶数n的平方的偏导数值的困难而做的改进。

    矩阵特征值的数值解法:乘幂法与反幂法、HouseHolder方法、QR分解法(上课只讲了乘幂法,其他的以后用到了再学习。)

    常微分方程的数值解法:欧拉(Euler)方法(前进与后退的Euler公式,综合两者的梯形公式,以及梯形公式中u_k+1项再代入前进的Euler公式,消除隐式参数,得到改进的欧拉公式)、龙格-库塔(Runge-Kutta)法、线性多步法。(P.S. 龙格-库塔法虽然是选学内容,上课没讲,但是对于电气、计算机、土木等工科研究生来说可能是一个重要的数学工具,给他个triple star 吧,今后用到了会细究。印象中本科的电器学教材中也有一节提到了这个)

    数值分析课程中还有一些进阶模块,例如积分方程或积分-微分方程的数值解法,各种最优化方法等,也许超出了研究生教学大纲要求掌握的基本内容,今后如有用到再做补充。

    下面逐一上代码,有些数值方法可能理论性较强,教材没有给出示例MATLAB程序或还没有MATLAB运行验证过,日后再更新。

    1、选取列主元的高斯消去法

    function x= pivot_Gauss(A,b)
    %功能:用Gauss列主元消去法解n阶线性方程组Ax=b
    n=length(b);
    for k=1:n-1 %步骤2:消元
        %步骤2.1:选列主元
        [max_value,max_index]=max(abs(A(k:n,k)));
        rk = k+max_index-1; %加上该列中前n-1个元素,还原主元在矩阵A中的行标
        if max_value == 0 %步骤2.2:若A(rk,k)=0,则输出信息“A为奇异阵”,算法终止;否则执行步骤2.3
            warning('系数矩阵奇异!');
            return;
        end
        if rk~=k %步骤2.3:若rk!=k,则交换增广矩阵的第k行和第rk行
            t=A(k,:);A(k,:)=A(rk,:);A(rk,:)=t;
            %交换矩阵的第k行与第rk行(从第k列开始即可,因为前k-1列下三角元素均已消零)
            t=b(k);b(k)=b(rk);b(rk)=t;
        end
        for i=k+1:n %步骤2.4:对i=k+1,...,n做以下两步:计算乘子l_ik;计算a_ij和b_i
            L(i,k)=A(i,k)/A(k,k);
            A(i,k+1:n)=A(i,k+1:n)-L(i,k)*A(k,k+1:n);
            b(i)=b(i)-L(i,k)*b(k);
        end
    end
    %步骤3:若a_nn=0,则输出信息“A为奇异阵!”,算法终止
    if A(n,n)==0
        warning('系数矩阵奇异!');
        return;
    end
    %步骤4:回代求解
    for k=n:-1:1
        if k==n
            x(n)=b(n)/A(n,n);
        else
            x(k)=(b(k)-sum(A(k,k+1:n).*x(k+1:n)))/A(k,k);
        end
    end
    x

    2、选取列主元的Doolittle分解法

    % Doolittle.m
    function x=Doolittle2_3(A,b)
    %功能:用按列选主元的Doolittle方法求解n阶线性方程组Ax=b
    %假设A的各阶顺序主子式均不为零
    n=length(A);L=eye(n);U=zeros(n);
    %length(A)返回矩阵A最大维数;
    %I = eye(n) 返回一个主对角线元素为 1 且其他位置元素为 0 的 n×n 单位矩阵。
    
    %步骤1:输入系数矩阵A和及右端向量b
    %步骤2:对k=1,2,...,n-1执行步骤2.1~2.4
    for k=1:n-1 %省略了中间步长为1
        for i=k:n
            %步骤2.1 计算下三角矩阵L第k列元素的一部分
            s(i)=A(i,k)-L(i,1:k-1)*U(1:k-1,k);
        end
        %步骤2.2 选列主元
        [s_q,q]=max(abs(s(k:n)));
        %[M,I] = max(___) 使用先前语法中的任何输入参数,查找 A 的最大值的索引,并在输出矢量 I 中返回这些索引。
        %如果最大值出现多次,则 max 返回对应于第一次出现位置的索引。
        q=q+k-1;%还原s(i)的索引下标
        %步骤2.3 若q!=k
        if q>k %绝对值最大的列主元不在第q行即当前第一行
        %步骤2.3.1:交换A的第k行与第q行
            t_A=A(k,:);A(k,:)=A(q,:);A(q,:)=t_A;
        %步骤2.3.2:交换下三角矩阵L第k列元素s_k与s_q(l_kk与l_qk)
            t_s=s(k);s(k)=s(q);s(q)=t_s;
        %步骤2.3.3:将下三角矩阵L的第k行前(k-1)个元素与第q行的前(k-1)个元素交换
            t_L=L(k,1:k-1);L(k,1:k-1)=L(q,1:k-1);L(q,1:k-1)=t_L;
        %步骤2.3.4:交换b_k与b_q
            t_b=b(k);b(k)=b(q);b(q)=t_b;
        end
        %步骤2.4:计算矩阵U的第k行元素及矩阵L的第k列元素
        U(k,k)=s(k);
        for i=k+1:n
            U(k,i)=A(k,i)-L(k,1:k-1)*U(1:k-1,i);
            L(i,k)=s(i)/U(k,k)
        end
    end
    %步骤3:求解上三角矩阵第n行的唯一待定元素u_nn
    U(n,n)=A(n,n)-L(n,1:n-1)*U(1:n-1,n);
    %步骤4:解单位下三角方程组Ly=b
    y=zeros(n,1);
    for k=1:n
        if k==1
            y(1)=b(1);
        else 
            y(k)=b(k)-L(k,1:k-1)*y(1:k-1);
        end
    end
    %步骤5:解上三角方程组Ux=y;
    x=zeros(n,1);
    for k=n:-1:1
        if k==n
            x(n)=y(n)/U(n,n);
        else
            x(k)=(y(k)-U(k,k+1:n)*x(k+1:n))/U(k,k);
        end
    end
    %步骤6:输出解x
    x=x';%把列向量转置成行向量,尽量不占用命令行的显示空间。

    3、解线性方程组系数矩阵为三对角矩阵的追赶法

    %ForwardBackward.m 追赶法解满足行对角占优条件的三对角矩阵的MATLAB程序
    %行对角占优条件:(1)比较绝对值,第一行的主对角元大于第一行的另一个非零元,且绝对值均不为零;
    %(2)比较绝对值,最后一行的主对角元大于最后一行的另一个非零元,且绝对值均不为零;
    %(3)第一行和最后一行之外的其余各行,主对角元的绝对值大于另外两个非零元的绝对值之和且均不为0。
    
    %说明:矩阵A的主对角线元素为d_1~d_n;次下对角线元素为a_2~a_n;次上对角线元素为c_1~c_n-1。
    
    function x=ForwardBackward2_3(a,b,c,d)
    n=length(d);
    %步骤1:输入4个一维数组a,c,d(存放A的三条对角线上的元素),b(Ax=b,列向量),由算例程序给出
    %步骤2:若d_1==0,则输出信息“方法失败!”,算法终止。
    if d(1)==0
        warning('方法失败!')
        return
    end
    %步骤3:计算p1=d1,q1=c1/d1
    p(1)=d(1);q(1)=c(1)/d(1);
    %步骤4:对i=2,3,...,n-1,执行步骤4.1~4.3
    for i=2:n-1
        %步骤4.1:计算p_i
        p(i)=d(i)-a(i)*q(i-1);
        %步骤4.2:若p_i=0,则输出信息“方法失败!",算法终止(可以证明系数矩阵A满足对角占优条件,则p_1~p_n均不为0)
        if p(i)==0
            warning('方法失败!')
        return
        end
        %步骤4.3:计算q_i
        q(i)=c(i)/p(i);
    end
    %步骤5:计算p_n=d_n-a_n*q_n-1。
    p(n)=d(n)-a(n)*q(n-1);
    %步骤6:若p_n=0,则输出信息“方法失败!”,算法终止。
    if p(n)==0
        warning('方法失败!')
        return
    end
    %步骤7:解下三角方程组Ly=b
    y(1)=b(1)/p(1);
    for i=2:n
        y(i)=(b(i)-a(i)*y(i-1))/p(i);
    end
    %步骤8:解上三角方程组Ux=y
    x(n)=y(n);
    for i=n-1:-1:1
        x(i)=y(i)-q(i)*x(i+1);
    end
    x=x'

    4、Jacobi迭代法与 Gauss-Seidel迭代法

    function x = Jacobi3_2(A,b,x0,eps,N)
    %功能:用Jacobi迭代法解n阶线性方程组Ax=b
    n=length(b);x=ones(n,1);k=0;
    %步骤1:输入系数矩阵A,右端向量b,以及初始向量x0,精读eps,以及最大迭代次数N;令k=1
    
    %步骤2:当k≤N时,执行步骤2.1~2.3。
    while k<=N
        %步骤2.1:算出x1~xn的第k次迭代递推式
        for i=1:n
            x(i)=(b(i)-A(i,[1:i-1,i+1:n])*x0([1:i-1,i+1:n]))/A(i,i);
        end
        %步骤2.2:令k:=k+1
        k=k+1;
        %步骤2.3:若||x_k+1-x_k||<eps,则算法停止,输出方程组近似解x_k+1;否则令x_k:=x_k+1。
        if norm(x-x0,inf)<eps, break;end
        x0=x;
    end
    %步骤3:输出方程组的数值解和迭代信息。
    if k>N
        Warning(['迭代次数=  ,算法超出最大迭代次数!',num2str(k)]);
    else
        disp(['迭代次数=  ',num2str(k)]);
        x
    end
    
    --------------------------------------------------------------------------------------
    
    function x = Gauss_Seidel_3_2(A,b,x0,eps,N)
    %功能:用高斯-塞德尔 迭代法解n阶线性方程组Ax=b。
    n=length(b);x=ones(n,1);k=0;
    %步骤1:输入系数矩阵A,右端向量b,以及初始向量x0,精读eps,以及最大迭代次数N;令k=1
    
    %步骤2:当k≤N时,执行步骤2.1~2.3。
    while k<=N
        %步骤2.1:算出x1~xn的第k次迭代递推式
        for i=1:n
            x(i)=(-A(i,[1:i-1])*x([1:i-1])-A(i,[i+1:n])*x0([i+1:n])+b(i))/A(i,i);
        end
        %步骤2.2:令k:=k+1
        k=k+1;
        %步骤2.3:若||x_k+1-x_k||<eps,则算法停止,输出方程组近似解x_k+1;否则令x_k:=x_k+1。
        if norm(x-x0,inf)<eps, break;end
        x0=x;
    end
    %步骤3:输出方程组的数值解和迭代信息。
    if k>N
        Warning(['迭代次数=  ,算法超出最大迭代次数!',num2str(k)]);
    else
        disp(['迭代次数=  ',num2str(k)]);
        x
    end

    5、SOR方法

    %SOR.m
    function x = SOR(A,b,omega,x0,eps,N)
    %功能:用SOR(Successive Over-Relaxation,逐次超松弛)迭代法解n阶线性方程组Ax=b
    %其中松弛因子omega(ω),初始向量x0,精度eps,最大迭代次数N由算例程序给定
    
    %步骤1:输入矩阵A,右端向量b,松弛因子ω和初始向量x0,精度eps和最大迭代次数N。令k=0
    n=length(x0);
    x=ones(n,1);k=0;
    %x其实可以设定为任意值,不影响后面的迭代和覆盖过程,设为全部元素为1的列向量纯粹为了表示方便
    
    %步骤2:当k≤N时,执行步骤2.1~2.3
    while k<=N
        %步骤2.1:对i=1,2,...n,计算x_i(k+1)表达式
        for i=1:n
            x(i) = omega*(-A(i,1:i-1)* x(1:i-1)-A(i,i+1:n)*x0(i+1:n)+b(i))/A(i,i)+(1-omega)*x0(i);
        end
        %步骤2.2:令k:=k+1
        k=k+1;
        %步骤2.3:若||x(k+1)-x(k)||<eps,则算法停止,输出方程组近似解x(k+1);否则令x_k:=x_k+1。
        if(norm(x-x0,inf)<eps),break;end
        x0=x;
    end
    
    %步骤3:输出信息“算法超出最大迭代次数!”,算法终止。
    if k>N
        warning('算法超出最大迭代次数!');
    else
        disp(['迭代次数= ',num2str(k)]);
        x
    end

    6、Lagrange插值法

    Version 1
    -----------------------------------------------------------------------------------------
    %Lagrange_interpolation1.m
    function b = Lagrange_interpolation1(x,y,a)
    %功能:根据已知横坐标向量x和纵坐标向量y,求(n-1)次Lagrange插值多项式在点a的插值b
    
    %步骤1:输入数据xi,yi(i=1,2,...n)及被插点a
    da=a-x;%数a与向量作差,结果仍然为向量
    n=length(x);%多项式的次数为n-1
    l=zeros(size(y));
    %步骤2:利用内置prod函数计算向量元素的乘积,并计算Lagrange(拉格朗日)插值基函数在点a的值l_j(a)
    l(1)=prod(da(2:n))/prod(x(1)-x(2:n));%j=1
    l(n)=prod(da(1:n-1))/prod(x(n)-x(1:n-1));%j=n
    for j=2:n-1
        num=prod(da(1:j-1))*prod(da(j+1:n)); %分子
        den=prod(x(j)-x(1:j-1))*prod(x(j)-x(j+1:n)); %分母
        l(j)=num/den;
    end
    %步骤3:计算Lagrange插值多项式在点a处的值
    b=sum(y.*l);
    -----------------------------------------------------------------------------------------
    version 2
    -----------------------------------------------------------------------------------------
    %Lagrange_interpolation2.m
    function [L,p,b] = Lagrange_interpolation2(X,Y,a)
    %功能:根据已知横坐标向量X和纵坐标向量Y求解n次Lagrange插值多项式L和对应的基函数p,并将a的值代入,求解对应的插值b
    
    %步骤1:给出(n+1)个节点(xi,yi),(i=0,1,2,...,n)及插值点a,由算例程序提供
    if(length(X)==length(Y))
        n=length(X);
    else
        disp('X和Y的维数不相等!');
        return;
    end
    n=length(X);L=ones(n,n);
    
    %步骤2:令k=1,当k≤n时,执行步骤2.1~2.3
    for k=1:n
        %步骤2.1:令p_k(x):=1
        V=1;
        for i=1:n
        %步骤2.2:令i=1,对于i≤n,执行步骤2.2.1~2.2.2
            %步骤2.2.1:若i≠n,则p_k(x):=p_k(x)*(x-x_i)/(x_k-x_i)
            %步骤2.2.2:令i:=i+1
            if k~=i
                V = conv(V,poly(X(i)))/(X(k)-X(i));
            end
        end
        p(k,:)=poly2sym(V);%利用向量V创建多项式
    end
    p=collect(p);
    p=vpa(p,4);
    L=vpa(Y*p,4);
    b=polyval(sym2poly(L),a);
    
    %备注:
    %1、
    %(1)p = poly(r)(其中 r 是矢量)返回多项式的系数,其中多项式的根是 r 的元素。
    %(2)p = poly(A)(其中 A 是 n×n 矩阵)返回矩阵 det(λI – A) 的特征多项式的 n+1 个系数
    %(3)w = conv(u,v) 返回矢量 u 和 v 的卷积。如果 u 和 v 是多项式系数的矢量,对其卷积与将这两个多项式相乘等效。
    %2、collect(s)函数命令使用findsym函数规定的默认变量代替collect(s,v)函数中的v;而该命令用于将符号矩阵S中所有同类项合并,并以v为符号变量输出
    %3、vpa全称为variable-precision arithmetic,即算数精度。一般来说,vpa专门用来计算符号变量和函数的值。
    %4、polyval(p,x)函数返回多项式p在x处的函数值,其中输入变量p=[p0 p1 p2...pn]是一个长度为n+1的横向量。

    7、最小二乘法(只给出拟合函数为一次函数的程序)

    function f=LeastSquare_linearfunc(X,Y,w)
    %程序功能:根据已知n个点以及频数ω_i,求解最小二乘拟合曲线
    
    %步骤1:给出n个节点(x_i,y_i)以及对应的频数w_i(算例程序给出)
    %步骤2:令矩阵A为2*2的零矩阵,B为2维列零向量,令i=1,对i≤n作步骤2.1~2.2
    A=zeros(2,2); B=zeros(2,1); n=length(X);
    %%下面算法的解释:
    %令拟合线性函数曲线为φ(x)=c1+c2*x,此时φ0(x)=1,φ1(x)=x,令法方程组为Ac=[a11,a12;a21,a22][c1;c2]=b=[b1;b2],
    %则a_11=(φ0,φ0)=Σ{i=1,n}ω_iφ0(x_i)φ0(x_i)=Σ{i=1,n}ω_i
    %  a_12=(φ0,φ1)=Σ{i=1,n}ω_iφ0(x_i)φ1(x_i)=Σ{i=1,n}ω_i*x_i=(φ1,φ0)=a_21
    %  a_22=(φ1,φ1)=Σ{i=1,n}ω_iφ1(x_i)φ1(x_i)=Σ{i=1,n}ω_i*x_i^2
    %  b_1=(f,φ0)=Σ{i=1,n}ω_i*f(x_i)*φ0(x_i)=Σ{i=1,n}ω_i*y_i
    %  b_2=(f,φ1)=Σ{i=1,n}ω_i*f(x_i)*φ1(x_i)=Σ{i=1,n}ω_i*y_i*x_
    for i=1:n
        %步骤2.1:算出A和B各个元素一次累加的值;%步骤2.2 令i:=i+1
        A(1,1)=A(1,1)+w(i); A(1,2)=A(1,2)+w(i)*X(i);A(2,1)=A(1,2);A(2,2)=A(2,2)+w(i)*X(i)*X(i);
        B(1,1)=B(1,1)+w(i)*Y(i);B(2,1)=B(2,1)+w(i)*Y(i)*X(i);
    end
    c=inv(A)*B;
    syms x;
    f=c(1)+c(2)*x;
    f=vpa(f,4);%设置算数精度显示4位有效数字

    8、不动点迭代法及其改进

    %Fixed_point_Iteration_forNonlinearEquation.m
    function [k,x]=Fixed_point_Iteration_forNonlinearEquation(phi,x0,eps,N)
    %功能:用不动点迭代法解非线性方程φ(x)=x
    %步骤1:给出初试近似值x0,容限ε,最大迭代次数N,令k=0
    %步骤2:当k≤N时,执行步骤2.1~2.4
        %步骤2.1:令x=φ(x0)
        %步骤2.2:若|x-x0|<ε,则输出x,终止
        %步骤2.3:令k:=k+1
        %步骤2.4:令x0:=x
    fprintf('k    x\n');%fprintf函数:将数据写入文本文件
    for k=1:N
        x=phi(x0);%phi为编程人员自定义的函数,由算例程序给出
        fprintf('%3d,  %10.9f\n',k,x) 
        %10.9f 指定输出中每行的第2个值为浮点数,字段宽度为10位数,包括小数点后的9位数
    
        if abs(x-x0)<eps
            return
        else
            x0=x;
            if k==N
                warning('算法超过最大迭代次数!');
            end
        end
    end
    ----------------------------------------------------------------------------------
    %Steffensen_Iteration.m
    %功能:用Steffensen迭代法(不动点迭代的Aitkin加速公式改进方法)
    function [k,x]=Steffenson_Iteration(phi,x0,eps,N)
    fprintf('k    x\n');
    for k=1:N
        y=phi(x0);
        z=phi(y);
        x=x0-(y-x0)^2/(z-2*y+x0);
        fprintf('%3d,    %10.9f\n',k,x);
        if abs(x-x0)<eps
            return
        else
            x0=x;
            if k==N
                warning('算法超过最大迭代次数!');
            end
        end
    end

    9、牛顿迭代法

    %EquaNewton.m
    function [k,x,f_value] = EquaNewton(f,Df,x0,eps,N)
    %功能:用Newton(牛顿-拉夫逊)迭代法求解方程f(x)=0
    fprintf('k   x   f\n');
    f_value=f(x0);
    for k=1:N
        x=x0-f_value/Df(x0);%Df存储f(x)的导函数
        f_value=f(x);
        fprintf( '%3d, %12.11f, %12.11f\n',k,x,f_value);
        if abs(x-x0)<eps
            return
        else
            x0=x;
            if k==N
                warning('算法超出最大迭代次数!')
            end
        end
    end

    10、常微分方程数值解法之改进的欧拉公式

    %ImprovedEuler.m
    
    %一阶常微分方程数值解法之改进的欧拉公式:
    %步骤1:输入求解区间[a,b],步长h,初值u0和函数f(x,u)
    %步骤2:用改进的欧拉公式循环计算
        %步骤2.1:采用Euler公式提供预测值:u_(k+1)_sup(0)=u_k+hf(x_k,u_k);
        %步骤2.2:采用梯形公式计算:u_(k+1)=u_k+h/2[f(x_k,u_k)+f(x_(k+1))+u_(k+1)_sup(0)]
    %步骤3:输出结果
    
    function s=ImprovedEuler_9_1(fun,a,b,h,u0)
    %[a,b]为求解区间,h为步长,s为返回向量,u0为初值
        syms x u; %定义符号变量
        n=(b-a)/h; s=zeros(1,n+1); s(1)=u0;
        for k1=1:n
            fk=double(subs(fun,{x,u},{a+(k1-1)*h,s(k1)})); %fk=f(x_k,u_k)
            fk1= double(subs(fun,{x,u},{a+k1*h,s(k1)+h*fk})); %fk1=f(x_(k+1),u_k+hf(x_k,u_k))
            s(k1+1)=s(k1)+h/2*(fk+fk1);
        end
    
    %注:
    %1、subs函数作用于第一个参数中的指定函数fun,将第三个参数(标量或向量)一一对应赋值给第二个参数中的符号变量(组)。此处即相当于每步迭代后对当前节点x_k和算得的u_k+1覆盖更新
    %2、算法步骤中,下划线后面的数字代表迭代次数下标,sup(0)为上标以示区分,代表每次迭代过程中消除隐式变量u_k+1的中间变量

     

    展开全文
  • 市场交易者通过技术指标分析来确定资产价格未来走势。这些指标使得交易者可以更容易确认当前市场环境模式以及买卖信号。指标类型也是形形色色,而每一种也都被日内交易者、短期交易者以及长线投资者所...
  • 这里列出8种常见的经典排序,基本涵盖了所有的排序算法。1.直接插入排序我们经常会到这样一类排序问题:把新的数据插入到已经排好的数据列中。将第一个数和第二个数排序,然后构成一个有序序列将第三个数插入进去,...
  • 当我们用qt编写通信功能的时候,由于qt数据类型进行了封装,常见的有QString、QByteArray、QChar等,而C/C++C常用的标准类型为int 、char、char *和String类(在c++ #include <string>中),所以就涉及 到...
  • 隧道地质超前预报在指导隧道安全施工中起着重要作用,探地雷达法作为常用的隧道超前预报方法,具有探测效率高、施工干扰小优势,但在成果精确解释和探测深度方面存在不足。运用gprmax正演模拟软件,探讨了正演基本...
  • SQL中的常用函数

    2020-10-19 12:10:43
    目录01 单行函数1.1 单行函数的特点1.2常见的单行函数1.2.1字符型函数1.2.2字符型控制函数1.3数字函数1.4日期函数 01 单行函数 1.1 单行函数的特点 1.操作数据对象 2.接受参数返回一个结果 3.只一行进行交换 4.每...
  • 最后一次抛砖引玉了,至此finereport所有的常见函数就分享完了,期待能大家有些许帮助。 ABS ABS(number):返回指定数字绝对值。绝对值是指没有正负符号的数值。 Number:需要求出绝对值任意实数。 示例: ...
  • 常见的标准化方法

    2019-06-27 09:05:02
    在某些比较和评价指标处理中经常会用到,去除数据单位限制,将其转化为无量纲数值,便于不同单位或量级指标能够进行比较和加权。 2 常用的标准化方法 2.1:规范化方法 也叫离差标准化,是原始数据线性...
  • 常见的简答(三)

    2020-06-20 22:31:21
    QueryString 传递一个或多个安全性要求不高或是结构简单的数值。但是对于传递数组或对象话,就不能用这个方法了 session(viewstate) 简单,但易丢失 作用于用户个人,过量存储会导致服务器内存资源耗尽。 ...
  • 在前文机器学习中常见的损失函数中,介绍了回归和分类等问题中常用的损失函数。通过设计合适、易求解的损失函数,可以帮助我们确定问题的解决目标,进而使用解析或者数值方法进行求解。 在将训练的若干组模型进行...
  • 1、Map [DataStream->DataStream] (1)说明 调用用户定义的MapFunctionDataStream[T]数据进行处理,形成新的Data-Stream[T]...该算子主要应用处理输入一个元素产生一个或者多个元素的计算场景, 比较常见的是在
  • 互联网行业经过这些年发展,内部体系趋向于成熟,在数分领域也逐渐形成了一些常用的名词,在此一些关于用户行为名词进行介绍。本文主要名词和解释来自于神策数据体系。 1、指标 指标就是具体的数值。比如...
  • java常用工具类使用

    热门讨论 2012-03-19 20:11:37
    在Java开发类库中,提供了很多工具类,我们即将学习最常见的工具类,比如日期的操作,集合的操作等。具体更多的工具类,请参考JavaDoc文档。 2. java.util.Date类 Date类包装了毫秒值,毫秒值表示自1970年1月1...
  • 过滤器是通过管道符号(|)进行使用,例如:{{ name|length }},将返回name长度。过滤器相当于是一个函数,把...现一些常用的过滤器进行讲解: 过滤器 描述 abs(value) 返回一个数值的绝对值。 例如:.
  • 最近有项目需要金额进行归一化处理...对于包含阿拉伯数字的,基本上都是万以上的量级,常见的说法只有“xx万”,“xx百万”,乃至到“xx亿”。“xx百”,“xx千”这种并不符合常用说法。所以处理起来比较简单,只需要
  • -n:地址以数字方式显式,否则显式为主机名,也就是说-n选项不做主机名解析。 -nn:除了-n之外,还把端口显示为数值。 -w:指定监听数据包写入文件。 常用输出项: -XX:以16进制和ASCII方式输出包头部数据...
  • 用于数据分析特征可能有多种形式,需要将其合理转化成模型能够处理形式,特别是数值的特征,特征编码就是在做这样工作。 常见特征种类 二值数据:只有两种取值变量(不一定是0/1,但是可以映射到{0,1}\...
  • 作者写本文时的面部活动大家好,这篇的题目是早就列入计划的。本期不写机器学习,而是写统计学中一个最广泛的应用---假设检验。...假设检验是一种常见的基于样本的“统计证据”来总体进行推断的方法。这...
  • 字符串是一种常见的数据结构,字符串的处理又可以十分灵活,所以在实际开发,尤其是非数值处理中,字符串的应用非常广泛。虽然很多字符串操作都封装在了函数库里,应用程序可以直接通过调用库函数来实现字符串处理...
  • 常用的集合类是 List 和 Map。 List 具体实现包括 ArrayList 和 Vector,它们是可变大小列表,比较适合构建、存储和操作任何类型对象元素列表。 List 适用于按数值索引访问元素情形。 Map 提供了一个更...
  • 回归模型是机器学习中很重要的一类模型,不同于常见的分类模型,回归模型的性能评价指标跟分类模型也相差很大,这里记录一下基于sklearn库计算回归模型中常用的四大评价指标主要包括:explained_variance_score、...
  • OpenCV常用函数

    2019-10-07 03:48:26
    这里opencv里面的一些比较常见的函数做了一个归纳,有C接口的,也有C++接口的;更多函数可以查询最新的OpenCV文档 1.cvNormalize功能:根据某种范数或者数值范围归一化数组.void cvNormalize( const CvArr* src, ...
  • 介绍: XFS3031CNP 是一款高性价比的中文语音合成芯片。芯片可以通过UART 接口接收待合成的文本,把文本合成为语音输出。 特性: ...芯片具有智能的文本分析算法,对常见的数值、电话号码、时间日期...
  • 常见集合类

    2020-04-04 22:19:19
    常用的集合类是 List 和 Map。 List 具体实现包括 ArrayList 和 Vector,它们是可变大小列表,比较适合构建、存储和操作任何类型对象元素列表。 List 适用于按数值索引访问元素情形。 Map 提供了一个更...
  • 在Excel工作表中,最常用的还是一些技巧,如果能够熟练掌握,对于工作效率的提高绝对不是一点点哦,结合工作实际,小编工作中常见的问题进行了总结,一共有8类,你一定也遇到过……一、Excel工作表常见问题:输入...

空空如也

空空如也

1 2 3 4 5 ... 12
收藏数 236
精华内容 94
关键字:

常见的常用对数值