8、数值分析与matlab

1、今天要拷matlab代码了,而且是很恶心的算法,估计也没几个人能看得懂,就连我自己都看不懂。

  我也不知道这样做的意义何在,可能只是证明我在这世上曾经学过那么那么难的东西吧

  首先是一个matlab版的快速排序,同学们应该都看得懂吧。

  

function f=quicksort(x,left,right)
if left<right
    [i,x]=Division(x,left,right);
    x=quicksort(x,left,i-1);
    x=quicksort(x,i+1,right);
end
f=x;
function [i,x]=Division(x,left,right)
base=x(left,2);
while left<right
    while left<right&x(right,2)>=base
        right=right-1;
    end
    c=x(left,2);d=x(right,2);
    c1=x(left,1);d1=x(right,1);
    c2=x(left,3);d2=x(right,3);
    c3=x(left,4);d3=x(right,4);
    c5=x(left,5);d5=x(right,5);
    x(left,2)=d;x(right,2)=c;
    x(left,1)=d1;x(right,1)=c1;
    x(left,3)=d2;x(right,3)=c2;
    x(left,4)=d3;x(right,4)=c3;
    x(left,5)=d5;x(right,5)=c5;
%     x(left,1)=x(right,1);
    while left<right&x(left,2)<=base
        left=left+1;
    end
    c=x(left,2);d=x(right,2);
    c1=x(left,1);d1=x(right,1);
    c2=x(left,3);d2=x(right,3);
    c3=x(left,4);d3=x(right,4);
    c5=x(left,5);d5=x(right,5);
    x(left,2)=d;x(right,2)=c;
    x(left,1)=d1;x(right,1)=c1;
    x(left,3)=d2;x(right,3)=c2;
    x(left,4)=d3;x(right,4)=c3;
    x(left,5)=d5;x(right,5)=c5;
%     x(right,1)=x(left,1);
end
i=left;

  以上大概的意思就是根据向量中第二列的值,将向量的其他列进行快速排序

2、下边这个应该是二分法求函数零点的程序吧

function [xstar,index,it]=bisect(fun,a,b,ep)
if nargin<4 ep=1e-5;end
fa=feval(fun,a);
fb=feval(fun,b);
if fa*fb>0
    xstar=[fa,fb];index=0;it=0;
    return
end
k=0;
while abs(b-a)/2>ep
    x=(a+b)/2;fx=feval(fun,x);
    if fx*fa<0
        b=x;fb=fx;
    else
        a=x;fa=fx;
    end
    k=k+1;
end
xstar=(a+b)/2;index=1;it=k;

3、逆天的chi2plot,也就是传说中的正态概率图,属于数据分析部分

function chi2plot(X)
dd=[];
p=[];
[M,N]=size(X);
MEAN=mean(X);
SS_1=inv(cov(X));
for byk=1:M;
    DD=(X(byk,:)-MEAN)*SS_1*(X(byk,:)-MEAN)‘;
    dd=[dd,DD];
    pp=(byk-0.5)/M;
    p=[p,pp];
end
dd=sort(dd)‘
xx=chi2inv(p,N)‘
plot(xx,dd,‘+‘),lsline
xlabel(‘chi2quantitle‘)
ylabel(‘Sample generalized diatance‘)
title(‘chi2plot‘)

4、改进的欧拉公式

function [x,y]=Euler_correct(fun,a,b,n,y0)
%改进的Euler公式,其中
%fun为一阶微分方程的函数
%a,b为求解区间的左右端点
%n为等分区间;
%y0为初始条件
x=zeros(1,n+1);y=zeros(1,n+1);
h=(b-a)/n;
x(1)=a;y(1)=y0;
for k=1:n
    x(k+1)=x(k)+h;
    y0=y(k)+h*feval(fun,x(k),y(k));
    y(k+1)=y(k)+h/2*(feval(fun,x(k),y(k))+feval(fun,x(k+1),y0));
end

  

时间: 2024-08-07 16:47:54

8、数值分析与matlab的相关文章

教了个数值分析

本学期我教了个数值分析和matlab课程,当然matlab很久没有碰过了,这次是临时重学了一遍.至于数值分析,我是一点也不怕的,因为矩阵论部分内容刚刚教过.当然,如果不深入讲解它的理论,知识告诉你怎么去用它,我想这些就绰绰有余了. 重点: 1.范数 2.线性方程组求解的迭代法 3.LU分解,乔列斯基分解,三对角方程组 4.Lagrang插值和Newton插值,样条插值. 5.数值积分的计算  以前印象深刻的是广义皮亚诺定理 6.非线性方程求解的迭代法 7.常微分方程的数值解法 大概就这些吧 原文

【数值分析】误差的分析与减少及Matlab解线性方程的四种方法

1.误差的来源 模型误差:数学模型与实际问题之间的误差 观测误差:测量数据与实际数据的误差 方法误差:数学模型的精确解与数值方法得到的数值解之间的误差:例如 舍入误差:对数据进行四舍五入后产生的误差 2.减少误差的几种方法 现在,我们一般用计算机解决计算问题,使用最多的是Matlab软件.对实际问题进行数学建模时,可能存在模型误差,对数学模型进行数值求解时,我们使用的方法可能产生方法误差,我们输入计算机的数据一般是有测量误差的,计算机在运算过程的每一步又会产生舍入误差(十进制转化为二进制时可能产

9、继续matlab数值分析

今天搁公司里搞了一天的shit代码,大概就是客户要把以前的三级联动改成五级联动,并且是多选的联动,其实昨天就已经做好的,只是今天想用bootstrap-multiselect来改进一下,以前的是照着我们组的小位哥哥改的,话说小位哥哥真厉害,不用框架内部的事件能完成,二级多选的联动,也是挺狠的. 1.matlab拉格朗日插值 function yi=Lagrange(x,y,xi) %x为向量,全部的插值节点 %y为向量,插值节点处的函数值 %xi为标量或向量,被估计函数的自变量: %yi为xi处

MATLAB数值分析实验

1.用Newton迭代法求方程   的第一个正根. newton.m: function x1=newton(x0,eps) format long format compact x1=x0-dao(x0); while abs(x1-x0)>eps x0=x1; x1=x0-dao(x0); end dao.m: function y=dao(x) y=tan(x)-exp(x); y1=tan(x)^2 - exp(x) + 1; y=y/y1; 结果: >> x1=newton(1

MATLAB新手教程

MATLAB新手教程   1.MATLAB的基本知识 1-1.基本运算与函数    在MATLAB下进行基本数学运算,仅仅需将运算式直接打入提示号(>>)之後,并按入Enter键就可以.比如: >> (5*2+1.3-0.8)*10/25 ans =4.2000 MATLAB会将运算结果直接存入一变数ans,代表MATLAB运算後的答案(Answer)并显示其数值於萤幕上. 小提示: ">>"是MATLAB的提示符号(Prompt),但在PC中文视窗

在.NET中应用MATLAB算法

在科学研究和工程应用中,往往要进行大量的数学计算,其中包括矩阵运算.这些运算一般来说难以用手工精确和快捷地进行,而要借助计算机编制相应的程序做近似计算.目前流行用Basic.Fortran和c语言编制计算程序, 既需要对有关算法有深刻的了解,还需要熟练地掌握所用语言的语法及编程技巧.对多数科学工作者而言,同时具备这两方面技能有一定困难.通常,编制程序也是繁杂的,不仅消耗人力与物力,而且影响工作进程和效率.为克服上述困难,美国Mathwork公司于1967年推出了"Matrix Laborator

Levenberg-Marquardt 的 MATLAB 代码

参考资料: 1,<精通MATLAB最优化计算(第2版)>作者:龚纯 等 的 第9章 9.3 小节 L-M 法 2,<数值分析> 作者:Timothy Sauer 的 第4章 4.4节 非线性最小二乘的 例子 第一本书里头虽然有代码,然而有错误,修正了错误之处 % opti_LM_test1 % 测试了 MATLAB最优化 书中的 L-M 的例子,结果是正确的 clear all;clc;close all; syms t; f = ... [t^2+t-1; 2*t^2-3]; S

【原创】开源Math.NET基础数学类库使用(六)数值分析之线性方程直接求解

开源Math.NET基础数学类库使用系列文章总目录: 1.开源.NET基础数学计算组件Math.NET(一)综合介绍  2.开源.NET基础数学计算组件Math.NET(二)矩阵向量计算  3.开源.NET基础数学计算组件Math.NET(三)C#解析Matlab的mat格式 4.开源.NET基础数学类库使用Math.NET(四)C#解析Matrix Marke数据格式 5.开源.NET基础数学类库使用Math.NET(五)C#解析Delimited Formats数据格式 6.开源.NET基础

【原创】开源Math.NET基础数学类库使用(三)C#解析Matlab的mat格式

开源Math.NET系列文章目录: 1.开源.NET基础数学计算组件Math.NET(一)综合介绍  2.开源.NET基础数学计算组件Math.NET(二)矩阵向量计算  3.开源.NET基础数学计算组件Math.NET(三)C#解析Matlab的mat格式 4.开源.NET基础数学类库使用Math.NET(四)C#解析Matrix Marke数据格式 5.开源.NET基础数学类库使用Math.NET(五)C#解析Delimited Formats数据格式 6.开源.NET基础数学类库使用Mat