8、数值分析与matlab
2017-10-13 11:08
302 查看
1、今天要拷matlab代码了,而且是很恶心的算法,估计也没几个人能看得懂,就连我自己都看不懂。
我也不知道这样做的意义何在,可能只是证明我在这世上曾经学过那么那么难的东西吧
首先是一个matlab版的快速排序,同学们应该都看得懂吧。
以上大概的意思就是根据向量中第二列的值,将向量的其他列进行快速排序
2、下边这个应该是二分法求函数零点的程序吧
3、逆天的chi2plot,也就是传说中的正态概率图,属于数据分析部分
4、改进的欧拉公式
我也不知道这样做的意义何在,可能只是证明我在这世上曾经学过那么那么难的东西吧
首先是一个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
相关文章推荐
- 数值分析第七章非线性方程MATLAB程序
- 【MATLAB】数值分析与统计
- 9、继续matlab数值分析
- 【书单】matlab 科学计算、数值分析以及数学物理问题
- C++与matlab混合编程基于主成份分析算法的数值分析(一)
- 线性方程数值分析中高斯迭代matlab实现
- 数值分析 反幂法求矩阵按模最小特征值 MATLAB实现
- 数值分析基础工具使用Matlab绘制双曲线
- 数值分析基础工具使用Matlab绘制双曲线
- C++与matlab混合编程基于主成份分析算法的数值分析(二)
- 数值分析Matlab二维正态(高斯)分布以及协方差矩阵
- 数值分析Matlab绘制三维数据曲面图
- 数值分析Matlab二维正态(高斯)分布以及协方差矩阵
- 数值分析 追赶法求解三对角线性方程组 MATLAB实现
- MATLAB数值计算与数据分析(2)
- C++与matlab混合编程基于主成份分析算法的数值分析
- 8、数值分析与matlab
- 数值分析Matlab三维数据网格图
- 数值分析及matlab
- MATLAB数值分析之牛顿插值