在数据量很大的情况下,用矩阵运算可代替FOR循环,使运算速度大大加快。

我想问的是,如果一个FOR循环中,有很多if、continue等条件语句或循环语句,还能变成矩阵运算吗?

我有个程序需要循环几百万次,速度非常慢,请大家赐教!谢谢。

例如下面的程序,

for i=1:cyc-1

if (Smax(i)>=Smaxol(i));

Smaxol(i+1)=Smax(i);

ol=i;

else

Smaxol(i+1)=Smax(ol);

end

Yre=sqrt((1.0/cos(PI*re/w)));

alpha0=KIc/(sigmau*sqrt(PI*re)*(1.0+Yre/sqrt(2.0)));

if alpha0>sqrt(2.0);

sigmav=sigmau*PI/2.0/acos(1.0/(alpha0^2.0-1.0));

else

error('PLEASE TO CHECK THE VALUE OF ALHPA0!');

break;

end

R(i)=Smin(i)/Smax(i);

Y=sqrt((1.0/cos(PI*a(i)/w)));

Yol=sqrt((1.0/cos(PI*a(ol)/w)));

Kmax(i)=sqrt(PI*re*(1.0/cos(PI*Smax(i)/2.0/sigmav)+1.0))*(1.0+Y*sqrt(a(i)/2.0/re))*Smax(i);

Kmaxol(i)=sqrt(PI*re*(1.0/cos(PI*Smaxol(i+1)/2.0/sigmav)+1.0))*(1.0+Yol*sqrt(a(ol)/2.0/re))*Smaxol(i+1);

deltaK(i)=(1-R(i))*Kmax(i);

alpha_1=1.0/(1.0-2.0*mu)+(1.0-1.0/(1.0-2.0*mu))/(1.0+0.8861*(t/(Kmax(i)/sigmay)^2.0)^3.2251)^0.75952;

AA0=(0.825-0.34*alpha_1+0.05*alpha_1^2.0)*(cos(PI*Smax(i)/2.0/sigmaf))^(1.0/alpha_1);

AA1=(0.415-0.071*alpha_1)*Smax(i)/sigmaf;

AA3=2.0*AA0+AA1-1.0;

AA2=1.0-AA0-AA1-AA3;

if 0<=R(i) && R(i)<1.0;

fop=max(R(i),AA0+AA1*R(i)+AA2*R(i)^2.0+AA3*R(i)^3.0);

else

fop=AA0+AA1*R(i);

end

if R(i)>=-2.0 && R(i)<0.0;

feff(i)=(0.52-0.1*R(i))/(1.0-R(i));

if mat==1.0;

fth(i)=(1.0-R(i))^0.84;

elseif  mat==2.0;

fth(i)=(1.0-R(i))^0.5;

end

end

if R(i)>=0.0 && R(i)<0.5;

feff(i)=0.52+0.42*R(i)+0.06*R(i)^2.0;

if mat==1.0;

fth(i)=(1-R(i))^0.7;

elseif mat==2.0 ;

fth(i)=(1-R(i))^0.3;

end

end

if R(i)>=0.5 && R(i)<1.0;

feff(i)=0.52+0.42*R(i)+0.06*R(i)^2.0;

if  mat==1.0;

fth(i)=(1.05-1.4*R(i)+0.6*R(i)^2.0)^0.7;

elseif  mat==2.0;

fth(i)=(1.05-1.4*R(i)+0.6*R(i)^2.0)^0.3;

end

end

deltaKeffth(i)=feff(i)*fth(i)*deltaKth0;

deltaKu=Y*sqrt(PI*a(i))*(Smin(i)-Smin(i+1));

alpha1=(1.0-1.65*mu)^2.0/5.0-1.0/(20.0*n0)*(1.0-1.65*mu)^(2.0/n0)+(1.0/PI-1.0/(2.2*n0)*(1.0/PI)^(1.0/n0)-((1.0-1.65*mu)^2.0/5.0-1.0/(20.0*n0)*((1.0-1.65*mu)^2.0)^(1.0/n0)))/(1.0+(t/(Kmax(i)/sigmay)^2.0)/(1.0+1.0/n0))^(1.6+1.0/n0);

alpha2=(1.0-1.65*mu)^2.0/5.0-1.0/(20.0*n0)*(1.0-1.65*mu)^(2.0/n0)+(1.0/PI-1.0/(2.2*n0)*(1.0/PI)^(1.0/n0)-((1.0-1.65*mu)^2.0/5.0-1.0/(20.0*n0)*((1.0-1.65*mu)^2.0)^(1.0/n0)))/(1.0+(t/(Kmaxol(i)/sigmay)^2.0)/(1.0+1.0/n0))^(1.6+1.0/n0);

ry(i)=alpha1*(Kmax(i)/sigmay)^2.0;

rol(i)=alpha2*(Kmaxol(i)/sigmay)^2.0;

deltar=alpha1*(deltaKu/sigmay)^2.0;

lamda=(1.0-1.65*mu)^2.0/5.0-1.0/(20.0*n0)*(1.0-1.65*mu)^(2.0/n0)+(1.0/PI-1.0/(2.2*n0)*(1.0/PI)^(1.0/n0)-((1.0-1.65*mu)^2.0/5.0-1.0/(20.0*n0)*((1.0-1.65*mu)^2.0)^(1.0/n0)))/(1.0+(t/(Kmax(i)/sigmay)^2.0)/(1.0+1.0/n0))^(1.6+1.0/n0);

Kc=(((1.0-2.0*mu)^2.0-sqrt(1.0-mu^2.0))*PI*lamda/((1.0-2.0*mu)^2.0-1.0)/(1.0-2.0*mu)^2.0+(sqrt(1.0-mu^2.0)-1.0)/((1.0-2.0*mu)^2.0-1.0))*KIc;

if a(i)+ry(i)

mf=((a(ol)+rol(i)-ry(i)-deltar)/a(i))^c;

deltaKeff(i)=Kmax(i)*(1-mf*fop);

else

mf=1.0;

deltaKeff(i)=Kmax(i)*(1-mf*fop);

Smaxol(i+1)=Smax(i);

ol=i;

end

if deltaKeff(i)>deltaKeffth(i);

if Kmax(i)

da(i)=AA*(deltaKeff(i)-deltaKeffth(i))^mm/(1.0-(Kmax(i)/Kc)^nn);

a(i+1)=a(i)+da(i);

N(i)=i;

else

Nf=N(i-1);

af=a(i);

result=[Nf;af;Kmax(i)];

save result.dat result -ascii;

break;

end

else

da(i)=0;

a(i+1)=a(i)+da(i);

continue;

end

end

matlab矩阵替代for,用矩阵运算代替FOR循环相关推荐

  1. python 矩阵运算 for循环_如何用 Python 科学计算中的矩阵替代循环

    展开全部 因为在Mathematica中使用循环确实是低效的.32313133353236313431303231363533e78988e69d8331333361313961..... 深层次的原 ...

  2. matlab矩阵运算带变量,MATLAB矩阵及其数值运算

    matlab矩阵及其数值运算 变量和数据操作 变量与赋值 1.变量命名 在MATLAB6.5中,变量名是以字母开头,后接字母.数字或下划线的字符序列,最多63个字符.在MATLAB中,变量名区分字母的 ...

  3. matlab基本矩阵运算,MATLAB矩阵及其运算

    <MATLAB矩阵及其运算>由会员分享,可在线阅读,更多相关<MATLAB矩阵及其运算(10页珍藏版)>请在人人文库网上搜索. 1.Matlab矩阵及其运算目录矩阵创建1矩阵的 ...

  4. Matlab 矩阵元素选取方法

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 1.简单切片 2.根据条件选取 3.根据下标选取对应元素 1)简介 2)二维选取 3)多维选取 总结 前言 提示:这里 ...

  5. matlab矩阵行列向量化,matlab矩阵向量化

    MATLAB自问世以来,就是以数 值计算称雄.MATLAB进行数值计算的基本单位是复数数组(或称阵列),这使 的MATLAB高度"向量化".由于它不需定义数组的维数,并给出矩阵.. ...

  6. 范德蒙德矩阵在MATLAB中怎么表示,Python 之 Python与MATLAB 矩阵操作总结

    Python 之 Python与MATLAB 矩阵操作小结 一.线形代数理论基础 线形代数(linear algebra)是数学的一个分支,研究矩阵理论.向量空间.线性变换和有限维线形方程组等内容. ...

  7. matlab矩阵 代表什么,matlab中矩阵AB是什么意思

    Q1:matlab矩阵中的'代表什么意思 A(1)是指矩阵中的第一个元素. matlab中矩阵的排列是按照从上往下,从左往右的: 比如说,一列数,给转化为矩阵,排列如下: >> a=1:1 ...

  8. matlab 矩阵与数比较,MATLAB 对矩阵中的数据进行大小比较

    用matlab对矩阵进行高斯消元 %求解例题2.1%高斯法求解线性方程组Ax=b%A为输入矩阵系数,b为方程组右端系数%方程组的解保存在x变量中%先输入方程系数A=[1 2 3;2 7 5;1& ...

  9. MatLab矩阵的创建、寻访和运算

    目录 前言 1.新建标量.向量和矩阵 2.矩阵的快速创建 递增/递减型向量的创建 1)生成线性等距的行向量的快捷命令 2)生成线性等距的行向量的函数 3)生成对数等距的行向量的函数 可以生成向量和矩阵 ...

最新文章

  1. Ubuntu14.04 x64 zabbix 3.0 安装
  2. 链表有环是什么意思_互联网大厂offer收割之单向链表的概念及面试题大全
  3. java http服务端例子_简单的用 Java Socket 编写的 HTTP 服务器应用
  4. php基础教程文档,PHP5基础教程
  5. linux 轻量化图形界面,YOXIOS 入门教程--基于Linux的 轻量化GUI图形系统和硬件平台(41页)-原创力文档...
  6. 图解算法学习笔记(九):动态规划
  7. JQuery中trim函数的具体实现代码
  8. hive shell 导入数据
  9. 大型网站技术架构(八)--网站的安全架构(转)
  10. wndows make images
  11. 第一讲:使用html5——canvas绘制奥运五环
  12. mysql sql参数化查询_mybatis的sql参数化查询
  13. 初识循环神经网络(RNN)
  14. 老司机心得之时间管理入坑
  15. 实验1 matlab图像处理初步,1.实验一 MatLab数字图像处理初步
  16. Python爬虫 requests使用post请求分析并登录Chinaunix
  17. 局部立体匹配算法介绍及代码实现
  18. 高仿凤凰新闻的加载效果
  19. reverse()的使用
  20. linux安装部署Hive详细教程

热门文章

  1. matlab 得到当前时间,[原创]Matlab 获取当前时间信息
  2. 【技术贴】解决U盘无法复制:磁盘被写保护,请去掉写保护或使用另一张磁盘。...
  3. 【阿里、腾讯、头条】等12家企业【C++方向】30场面试经验
  4. metasploit解决windows靶机乱码问题
  5. NSQ单节点和集群搭建
  6. jquery点击事件失效原因和解决办法
  7. java hessian2_hessian2序列化bug
  8. 钢铁打工人的自我修养,成为一名合格的打工人,自己的工资自己算。(2020年度个人所得税算法)
  9. DDD :领域层设计规范
  10. 一个退休程序员,用高中几何方法,让百年数学难题逼近极限