找回密码
 注册
Simdroid-非首页
查看: 123|回复: 3

[基础概念] If对应某一条件,有多个表达式,怎么表示?

[复制链接]
发表于 2012-11-21 19:42:35 | 显示全部楼层 |阅读模式 来自 上海
比如当a[i]=0时,有三个表达式成立:
b[j,All]=0,并且b[All, j]=0并且b[j,j]=1

这样行吗?
If[a[i]==0, { b[j,All]=0,b[All, j]=0,b[j,j]=1}]
 楼主| 发表于 2012-11-21 20:15:41 | 显示全部楼层 来自 上海
Simdroid开发平台
再比如矩阵a,让它的3行,3列的元素为0,而其对角的元素为1
如下
a=Partition[Range[25],5];
Do[
If[i==3,Do[If[i!=j,a[[i,j]]=0],{j,1,5}]],
If[i==3,Do[If[i!=j,a[[j,i]]=0],{j,1,5}]],
{i,1,5}]
a

可是行不通
回复 不支持

使用道具 举报

发表于 2012-11-24 12:24:15 | 显示全部楼层 来自 上海
GuX = {1, 22, 43, 64,
  85}; GuY = {43};(*二维平面问题,GuX为x方向固定的节点标号,GuY为y方向固定的节点标号,GK为m*m的总刚度矩阵*)
For[k = 1, k <= Length[GuX], k++,
For[j = 1, j <= m, j++, GK[[2*GuX[[k]] - 1, j]] = 0;
  GK[[j, 2*GuX[[k]] - 1]] = 0;];
GK[[2*GuX[[k]] - 1, 2*GuX[[k]] - 1]] = 1];
For[k = 1, k <= Length[GuY], k++,
  For[j = 1, j <= m, j++, GK[[2*GuY[[k]], j]] = 0;
   GK[[j, 2*GuY[[k]]]] = 0;]; GK[[2*GuY[[k]], 2*GuY[[k]]]] = 1];

评分

1

查看全部评分

回复 不支持

使用道具 举报

发表于 2012-11-24 12:58:36 | 显示全部楼层 来自 上海
当然,这样就更简便了
GuX = {1, 22, 43, 64,
  85}; GuY = {43};(*二维平面问题,GuX为x方向固定的节点标号,GuY为y方向固定的节点标号,GK为m*m的总刚度矩阵*)
For[k = 1, k <= Length[GuX], k++, GK[[2*GuX[[k]] - 1, All]] = 0;
GK[[All, 2*GuX[[k]] - 1]] = 0;
GK[[2*GuX[[k]] - 1, 2*GuX[[k]] - 1]] = 1];
For[k = 1, k <= Length[GuY], k++, GK[[2*GuY[[k]], All]] = 0;
  GK[[All, 2*GuY[[k]]]] = 0; GK[[2*GuY[[k]], 2*GuY[[k]]]] = 1];
或者采用乘大数法
For[k = 1, k <= Length[GuX], k++,
  GK[[2*GuX[[k]] - 1, 2*GuX[[k]] - 1]] = 10^20];
For[k = 1, k <= Length[GuY], k++,
  GK[[2*GuY[[k]], 2*GuY[[k]]]] = 10^20];
回复 不支持

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

Archiver|小黑屋|联系我们|仿真互动网 ( 京ICP备15048925号-7 )

GMT+8, 2024-4-19 05:46 , Processed in 0.034471 second(s), 15 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表