matlab矩阵替代for,用矩阵运算代替FOR循环
在数据量很大的情况下,用矩阵运算可代替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循环相关推荐
- python 矩阵运算 for循环_如何用 Python 科学计算中的矩阵替代循环
展开全部 因为在Mathematica中使用循环确实是低效的.32313133353236313431303231363533e78988e69d8331333361313961..... 深层次的原 ...
- matlab矩阵运算带变量,MATLAB矩阵及其数值运算
matlab矩阵及其数值运算 变量和数据操作 变量与赋值 1.变量命名 在MATLAB6.5中,变量名是以字母开头,后接字母.数字或下划线的字符序列,最多63个字符.在MATLAB中,变量名区分字母的 ...
- matlab基本矩阵运算,MATLAB矩阵及其运算
<MATLAB矩阵及其运算>由会员分享,可在线阅读,更多相关<MATLAB矩阵及其运算(10页珍藏版)>请在人人文库网上搜索. 1.Matlab矩阵及其运算目录矩阵创建1矩阵的 ...
- Matlab 矩阵元素选取方法
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 1.简单切片 2.根据条件选取 3.根据下标选取对应元素 1)简介 2)二维选取 3)多维选取 总结 前言 提示:这里 ...
- matlab矩阵行列向量化,matlab矩阵向量化
MATLAB自问世以来,就是以数 值计算称雄.MATLAB进行数值计算的基本单位是复数数组(或称阵列),这使 的MATLAB高度"向量化".由于它不需定义数组的维数,并给出矩阵.. ...
- 范德蒙德矩阵在MATLAB中怎么表示,Python 之 Python与MATLAB 矩阵操作总结
Python 之 Python与MATLAB 矩阵操作小结 一.线形代数理论基础 线形代数(linear algebra)是数学的一个分支,研究矩阵理论.向量空间.线性变换和有限维线形方程组等内容. ...
- matlab矩阵 代表什么,matlab中矩阵AB是什么意思
Q1:matlab矩阵中的'代表什么意思 A(1)是指矩阵中的第一个元素. matlab中矩阵的排列是按照从上往下,从左往右的: 比如说,一列数,给转化为矩阵,排列如下: >> a=1:1 ...
- matlab 矩阵与数比较,MATLAB 对矩阵中的数据进行大小比较
用matlab对矩阵进行高斯消元 %求解例题2.1%高斯法求解线性方程组Ax=b%A为输入矩阵系数,b为方程组右端系数%方程组的解保存在x变量中%先输入方程系数A=[1 2 3;2 7 5;1& ...
- MatLab矩阵的创建、寻访和运算
目录 前言 1.新建标量.向量和矩阵 2.矩阵的快速创建 递增/递减型向量的创建 1)生成线性等距的行向量的快捷命令 2)生成线性等距的行向量的函数 3)生成对数等距的行向量的函数 可以生成向量和矩阵 ...
最新文章
- Ubuntu14.04 x64 zabbix 3.0 安装
- 链表有环是什么意思_互联网大厂offer收割之单向链表的概念及面试题大全
- java http服务端例子_简单的用 Java Socket 编写的 HTTP 服务器应用
- php基础教程文档,PHP5基础教程
- linux 轻量化图形界面,YOXIOS 入门教程--基于Linux的 轻量化GUI图形系统和硬件平台(41页)-原创力文档...
- 图解算法学习笔记(九):动态规划
- JQuery中trim函数的具体实现代码
- hive shell 导入数据
- 大型网站技术架构(八)--网站的安全架构(转)
- wndows make images
- 第一讲:使用html5——canvas绘制奥运五环
- mysql sql参数化查询_mybatis的sql参数化查询
- 初识循环神经网络(RNN)
- 老司机心得之时间管理入坑
- 实验1 matlab图像处理初步,1.实验一 MatLab数字图像处理初步
- Python爬虫 requests使用post请求分析并登录Chinaunix
- 局部立体匹配算法介绍及代码实现
- 高仿凤凰新闻的加载效果
- reverse()的使用
- linux安装部署Hive详细教程
热门文章
- matlab 得到当前时间,[原创]Matlab 获取当前时间信息
- 【技术贴】解决U盘无法复制:磁盘被写保护,请去掉写保护或使用另一张磁盘。...
- 【阿里、腾讯、头条】等12家企业【C++方向】30场面试经验
- metasploit解决windows靶机乱码问题
- NSQ单节点和集群搭建
- jquery点击事件失效原因和解决办法
- java hessian2_hessian2序列化bug
- 钢铁打工人的自我修养,成为一名合格的打工人,自己的工资自己算。(2020年度个人所得税算法)
- DDD :领域层设计规范
- 一个退休程序员,用高中几何方法,让百年数学难题逼近极限