❶ 建筑电气图纸中TSM21L-160-140A/4P/200mA是什么
应该额定电流140A的塑壳断路器,200ma应该分断能力,4p四极就是指L1,L2,L3,N。
❷ 如何遍历获得div里面所有a标签,并为每一个div添加自增的id和对应的事件。
代码如下:
$(document).ready(function(){
var i=0; // divid就是某个div的id,each是遍历这个div下的所有a标签
$(".item a").each(function(){
$(this).click(function(){ // 设置每个a标签的onclick事件,在这里你想干吗都可以
var city = this.innerHTML;
var citynum = this.id;
$.ajax(
{ url:getRootPath()+'/help!changearea.action',
data:{ "city":city, "citynum":citynum },
type:'post', dataType:'json',
success:function(data){
alert("更新成功!");
} }); }); }); });
(2)TSMA的计算方法扩展阅读
所有主流浏览器都支持 <div> 标签。
<div> 可定义文档中的分区或节(division/section)。
<div> 标签可以把文档分割为独立的、不同的部分。它可以用作严格的组织工具,并且不使用任何格式与其关联。
如果用 id 或 class 来标记 <div>,那么该标签的作用会变得更加有效。
用法
<div> 是一个块级元素。这意味着它的内容自动地开始一个新行。实际上,换行是 <div> 固有的唯一格式表现。可以通过 <div> 的 class 或 id 应用额外的样式。
不必为每一个 <div> 都加上类或 id,虽然这样做也有一定的好处。
可以对同一个 <div> 元素应用 class 或 id 属性,但是更常见的情况是只应用其中一种。这两者的主要差异是,class 用于元素组(类似的元素,或者可以理解为某一类元素),而 id 用于标识单独的唯一的元素。
❸ matlab数据分组和筛选的问题
多看看书,matlab操作比较简单,都是调用函数。
求矩阵的大小:[m,n]=size(a),a为图片数据,m为行数,n为列数
图片数据很大的话一般可以截取其中一部分来显示,截取也由多种方法,最简单的就是:
假设图片大小为1024*1024,则m=1024行,n=1024列,取图片左上角512*512的部分,即为
b=a(1:512,1:512)即可,取别的部分,直接根据行列来操作即可。
1:512就是向量1
2
3
4
5
6
7
8......512
❹ 稀疏矩阵的运算
import java.util.*;
//稀疏矩阵算法。
//稀疏矩阵算法是为了在大型矩阵中非零元素少时,减少存贮空间,并提高矩阵运算速度的。
//但本例中的矩阵只是为了演示算法,都比较小,时间和空间效率提升可以忽略。
public class SparseMatrix{
public static void main(String[] args){
TripleSMatrix tsm=new TripleSMatrix(7,4);
//tsm.printTriple();
tsm.printMatrix();
TripleSMatrix tsm2=new TripleSMatrix(7,4);
System.out.println("矩阵a:");
tsm.printMatrix();
System.out.println("矩阵b:");
tsm2.printMatrix();
int[][] matrixSum=addSMatrix(tsm,tsm2);
System.out.println("矩阵a+矩阵b:");
for(int i=0;i <matrixSum.length;i++){
for(int j=0;j <matrixSum[i].length;j++){
System.out.print(" "+matrixSum[i][j]);
}
System.out.println("");
}
}
public static int[][] addSMatrix(TripleSMatrix t1,TripleSMatrix t2){ //计算两个三元组表示的矩阵之和,返回结束数组
if(t1.rows!=t2.rows||t1.columns!=t2.columns){
System.out.println("这两个矩阵不能相加");
return null;
}
int[][] c=new int[t1.rows][t2.columns];
int i=1,j=1;
while(i <=t1.nonzeroElements||j <=t2.nonzeroElements){
if(t1.triple[i][0] <t2.triple[j][0]&&i <=t1.nonzeroElements){
c[t1.triple[i][0]-1][t1.triple[i][1]-1]=t1.triple[i][2];
i++;
}else if(t2.triple[j][0] <t1.triple[i][0]&&j <=t2.nonzeroElements){
c[t2.triple[j][0]-1][t2.triple[j][1]-1]=t2.triple[j][2];
j++;
}else{
if(t1.triple[i][1] <t2.triple[j][1]&&i <=t1.nonzeroElements){
c[t1.triple[i][0]-1][t1.triple[i][1]-1]=t1.triple[i][2];
i++;
}else if(t1.triple[i][1]>t2.triple[j][1]&&j <=t2.nonzeroElements){
c[t2.triple[j][0]-1][t2.triple[j][1]-1]=t2.triple[j][2];
j++;
}else{
c[t1.triple[i][0]-1][t1.triple[i][1]-1]=t1.triple[i][2]+t2.triple[j][2];
i++;j++;
}
}
}
return c;
}
}
//下面的类定义不一定是最好的,比如其中的属性大多是包访问权限,可以改进。
class TripleSMatrix{ //定义了一个三元组的类。
int[][] triple=new int[2001][3]; //三元组数组,假设稀疏矩阵的值都是整数。最多可以有2000个非零元素。第零行没有用。
int rows,columns,nonzeroElements; //稀疏矩阵的行列数和非零元素个数。
TripleSMatrix(int rows,int columns){ //构造方法,rows是稀疏矩阵的行数,columns是稀疏矩阵的列数。
Scanner input=new Scanner(System.in);
System.out.println("请输入稀疏矩阵三元组");
System.out.println("以行 列 值的形式输入,如:1 2 4表示第1行第2列元素的值为4,当输入的行为999时结束:");
int count=1;
int i=0,j,v; //i行j列,值v
while(i!=999&&input.hasNext()){
i=input.nextInt();
j=input.nextInt();
v=input.nextInt();
if(i>rows||i <1||j>columns||j <1){
System.out.println("刚才的行,列值错,将被忽略");
continue;
}
triple[count][0]=i;
triple[count][1]=j;
triple[count][2]=v;
count++;
}
this.rows=rows;
this.columns=columns;
this.nonzeroElements=count-1;
sortTriple(triple,1,count); //对输入的三元组排序。
}
static void sortTriple(int[][] triple,int first,int end){ //对三元组排序方法,按行排,行一样按列排。
Arrays.sort(triple,first,end,new Comparator <int[]>(){
public int compare(int[] t1,int[] t2){
if(t1[0]>t2[0]) return 1;
if(t1[0] <t2[0]) return -1;
if(t1[0]==t2[0]) return t1[1]-t2[1];
return 0; //没有用的一个语句,但没有它编译通不过。
}
});
}
public void printMatrix(){ //打印出当前三元组表示的稀疏矩阵。
int row=1,column=1; //row当前要打印的行,column当前要打印的列。
for(int t=1;t <=nonzeroElements;t++){
while(triple[t][0]>row){ //三元组中的行比当前行大
if(column!=1){ //前面打印的行没有打印完,继续打印完
for(;column <=columns;column++) System.out.print(" "+0);
column=1; //新的一行列从1开始。
}else{ //当前行全为0
for(int i=1;i <=columns;i++){
System.out.print(" "+0);
}
}
System.out.println(""); //换行
row++; //下一行
}
for(;column <triple[t][1];column++){ //当前打印的列小于三元组中的列,前面要补零。
System.out.print(" "+0);
}
System.out.print(" ".substring(0,6-(String.valueOf(triple[t][2])).length())+triple[t][2]); //打印三元组对应的元素。
column++;
}
if(column!=1){ //前面打印的行没有打印完,继续打印完
for(;column <=columns;column++) System.out.print(" "+0);
System.out.println("");
column=1;
row++ ;
}
for(;row <=rows;row++){ //三元组中没有对应的值了,矩阵后面的元素全为0
for(column=1;column <=columns;column++){
System.out.print(" "+0);
}
System.out.println("");
}
}
public void printTriple(){ //打印三元组
for(int i=1;i <=nonzeroElements;i++){
for(int j=0;j <3;j++){
System.out.print(triple[i][j]+" ");
}
System.out.println("");
}
}
}
❺ 电气设计图纸中tsm21-100/3p什么意思
tsm21:漏电断路器
100:100A
3P:三相
❻ 测井资料确定岩石力学参数
(1)横波时差的获取
测井资料计算岩石力学参数,其关键就是提取横波参数,如果有全波测井则可以分离出横波时差。有偶极声波测井资料时,其直接输出横波时差曲线。如果仅有常规测井资料,要进行横波时差的预测。
由全波列测井资料提取横波
全波列测井资料记录了丰富的岩石物理信息,包括纵波、横波、斯通利波等。在全波列记录上,各种波都混叠在一起,但不同的波在振幅、频率、到达时间(源于传播速度的差异)或相位上存在着明显的差别,这为从全波测井数据中识别和提取横波(或各种子波)提供了可能。长源距声波记录的也是地层的全波信息,但其在疏软地层中无法获取地层横波信息,因为在这些地层中横波与井中泥浆波一起传播。因此使用时要注意这种差别。
使用全波资料提取纵波(P波)和横波(S波)通常采用瞬时频谱法(Frei,1993),其基本原理如下:
将波形(信号)X(t)表示为:
X(t)=a(t)·cosφ(t) (2-3)
式中:a(t)——时间信号的瞬时振幅;φ(t)——t时刻的相位。
以X(t)为实部构建一个解析函数Z(t),则Z(t)的虚部为:
Y(t)=a(t)·sinφ(t) (2-4)
实、虚部和为:
Z(t)=X(t)+iY(t) (2-5)
信号的包络和瞬时相位可表示为:
a(t)=[X2(t)+Y2(t)]/2 (2-6)
而:
φ(t)=arctan[Y(t)/X(t)] (2-7)
信号的瞬时频率可表示为:
ω(t)=dφ(t)/dt (2-8)
以上几个式子中,X(t)为波形记录,是已知的,在复平面上,X(t)与Y(t)是正交的,可以利用希尔伯特正交变换来求。对一个函数进行希尔伯变换等价于用它同πt的倒数进行褶积:
Y(t)=-X(t)/πt (2-9)
如果有新的能量波至出现在波列中,瞬时相位和瞬时振幅就要发生变化,由此,可确定横波和纵波的初至波,从而得到横波参数。
正交偶极阵列声波测井
正交偶极阵列声波测井可以直接测定横波和纵波。偶极横波成像测井仪是最新一代的偶极阵列声波测井,它是把偶极技术与最新发展的单极技术结合在一起的测井技术方法,可以完全取代普通声波测井仪和长源距声波测井仪。
由于偶极阵列声波测井仪采用了偶极声源,其产生的剪切挠曲波具有频散特性,低频时其传播速度与横波相同,因此,可以从剪切挠曲波得到横波。
偶极阵列声波测井有三个发射探头和32个(八组)接收探头组成。发射单极声源和两个偶极声源(X、Y方向)呈相互垂直的环状,共有96个波形。现场测井时将其波形进行识别获得纵波、横波、斯通利波时差。图2-1是川丰563井实测资料,图中DTSM为横波时差。
图2-1 川丰563井正交偶极阵列声波测井
(据西南石油测井公司资料,2006)
常规测井资料计算横波
普通的声波测井资料获得是纵波时差,要得到用于岩石力学参数计算的横波时差,通常采用统计关系和经验公式计算。
A.统计关系法
首先从偶极横波测井及全波列测井所获取了地层横波时差信息,将其与常规测井参数之间进行了相关关系研究,建立了二者之间的统计学关系,再进行未知井的预测。针对研究区的情况,分别对于沙溪庙组、须家河组两个主力的天然气产层建立了统计方程(图2-2)。利用声波和密度测井资料建立的沙溪庙组储层的横波预测模型为:
图2-2 沙溪庙组、须家河组特殊测井与常规测井计算的横波时差相关关系图
(据西南石油局测井公司资料,2006)
Δts=1.522×Δtp+35.158×ρb-76.961 r=0.9405 (2-10)
须家河组储层的横波预测模型为:
Δts=1.1212×Δtp+14.625×ρb+0.796×φCNL-18.058 r=0.9127(2-11)式中:φCNL——地层中子孔隙度,小数;Δtp、Δts——纵、横波时差,m/ft;ρb——岩石体积密度,g/cm3。
B.经验公式法
利用常规纵波时差求解的横波时差经验公式为(陈新等,1989):
油气藏现今地应力场评价方法及应用
上式主要用于求取地层中砂岩层段的横波时差值,对于泥岩层段,由于其密度与埋深的关系与砂岩不同,一般利用泥岩的Δts/Δtp值与岩石体积密度关系确定(Elton Frost,1986)。根据泥(页)岩密度变化可以列出泥岩的Δts/Δtp与密度ρsh的关系式如下:
Δts/Δtp=A-0.8(ρsh-2.2)/(2.65-2.2) (2-13)
式中:ρsh——泥岩的体积密度,g/cm3。
油气藏现今地应力场评价方法及应用
研究工作中主要依据以上两种方法进行横波参数的预测。
(2)岩石弹性力学参数计算
利用测井资料计算地层的弹性力学参数主要包括:泊松比、杨氏模量、剪切模量、体积模量值。
泊松比值
用纵、横波时差值计算岩石泊松比公式为:
油气藏现今地应力场评价方法及应用
杨氏模量(或弹性模量)
油气藏现今地应力场评价方法及应用
剪切模量(切变模量、刚度模量)
油气藏现今地应力场评价方法及应用
体积模量
油气藏现今地应力场评价方法及应用
拉梅系数
油气藏现今地应力场评价方法及应用
(3)岩石强度参数的计算
测井资料确定地层的岩石强度是目前为止研究得较少的方面。
目前为止,岩石抗张强度,主要通过实验实测的值通过建立与岩石密度(或岩石孔隙度)的统计分析关系来预测。
抗压强度,除可用实验室建立的经验关系预测外,斯伦贝谢公司(1995)提出了如下经验关系:
σp=[0.0045(1-Vsh)+0.008Vsh]·E·7.031×10-3(2-19)
式中:Vsh——泥质含量,小数;σp——抗压强度,MPa;E——杨氏模量。
Nathan Stien(1978)提出了利用测井资料确定地层抗剪强度的方法,通过对莫尔-库仑准则的破裂包络线分析,结合单轴抗压强度实验结果,提出如下评价公式:
油气藏现今地应力场评价方法及应用
式中:Eτ——测井计算的剪切模量,MPa;τ0——抗剪强度,MPa;σp——单轴抗压强度,MPa;tanβ——莫尔圆上剪切模量直线斜率,砂岩层取0.00046×106;φ——岩石内摩擦角,(°)。
❼ 浪涌保护器的原理和构造
电涌保护器(Surge protection Device)是电子设备雷电防护中不可缺少的一种装置,过去常称为“避雷器”或“过电压保护器”英文简写为SPD。电涌保护器的作用是把窜入电力线、信号传输线的瞬时过电压限制在设备或系统所能承受的电压范围内,或将强大的雷电流泄流入地,保护被保护的设备或系统不受冲击而损坏。 电涌保护器的类型和结构按不同的用途有所不同,但它至少应包含一个非线性电压限制元件。用于电涌保护器的基本元器件有:放电间隙、充气放电管、压敏电阻、抑制二极管和扼流线圈等。
另一类为箝位保护器,即保护器件在击穿后,其两端电压维持在击穿电压上不再上升,以箝位的方式起到保护作用。常用的箝位保护器是氧化锌压敏电阻 MOV ,瞬态电压抑制器(TVS)等。 保护器分过电压保护元件和过电流保护元件。我们通常所称的“避雷器”和随着国外防雷器件引入的“浪涌抑制器”、“过电压限制器”、放电管、齐纳二极管等都属于电压限制元件。它们的工作原理差不多,但它们之间的通流容量、动作速度、残压等有很大差别。而正温度系数PTC、电感、电阻、保险丝则属于过电流保护元件。 二极管型防护器件包括开关二极管、齐纳二极管、瞬态二极管等。它们的保护性能大致相同,在承受冲击能力和限制电压等级方面稍有不同。正常情况下,管子呈高阻,当外加电压达到其门限值时,电流迅速增加。它是响应速度非常快的保护元件,限幅电压低,管子两端压降基本不受冲击电压和冲击电流的影响,保护精密设备中半导体电路非它莫属。近年来正在发展的瞬态二极管,在通流能力方面有了较大的突破,可用在第二级甚至第一级保护。 二极管型防护器件是利用硅PN结正向压降(VF)和反向雪崩击穿电压(VZ)的特性制成的,如瞬变电压抑制二极管(TVS)。二极管型防护器件有两种形式:一是齐纳型单向雪崩击穿,二是双向的硅压敏电阻。TVS器件在规定的反向应用条件下,承受到高能量的瞬时过压脉冲时,其工作阻抗能立即降至很低以允许大电流通过,并将电压箝制在预定水平,从而有效地保护电子产品中的精密元器件免受损坏。双向TVS可在正反两个方向吸收瞬时大脉冲功率,并把电压箝制在预定水平,双向TVS适用于交流电路。TVS的最大优点是箝位系数小,所谓箝位系数就是指TVS上流过的电流在最大时的端电压与流过的电流为最小时的端电压的比值,箝位系数越小,抑制瞬变电压的效果越好。TVS器件的其它优点是体积小、响应速度快(小于1ns)、可靠性高、每次经受瞬变电压后其性能不会下降等。缺点是电容大、耐电流量小。现在,国外TVS器件已经采用气密性附壳封装,外形为DO-41,而一般的民用器件则采用有引线或无引线的塑封形式,典型的有美国General Instrument公司生产400W、600W、1500W无引线扁平塑封,其400W的工作电压为5.5~162V,型号为TSMA6.8~TSMA200,外形为SMA/D0214AC;600W的工作电压为5.5~162V,型号为TSMB6.8~TSMB200,外形为SMB/D0214AA;1500W工作电压5.5~162V,型号为TSMC6.8~TSMC200,外形为SMC/D0214AB。该公司也生产无引线圆柱形产品,型号为TGL41-6.8~TGL41-200,外形为MELF GL41。该公司还生产5000W的TVS,其工作电压为5.0~110V,型号为5KP5.0~5KP110,外形为P600。TVS的另一发展方向是开发低电压产品,目前正在开发的产品电压范围为2.8~3.8V,以满足低压微处理器和IC的需要。 3 硅瞬变吸收二极管
硅瞬变吸收二极管的工作有点象普通的稳压管,是箝位型的干扰吸收器件,其应用是与被保护设备并联使用。硅瞬变电压吸收二极管具有极快的响应速度(亚纳秒级)、相当高的浪涌吸收能力和极多的电压档次。能保护设备或电路免受静电、电感性负载切换时产生的瞬变电压,以及感应雷所产生的过电压。 TVS管有单方向(单个二极管)和双方向(两个背对背连接的二极管)两种,它们的主要参数是击穿电压、漏电流和电容。使用中,TVS管的击穿电压要比被保护电路工作电压高10%左右,以防止因线路工作电压接近TVS击穿电压,使TVS漏电流影响电路正常工作;也避免因环境温度变化导致的TVS管击穿电压落入线路正常工作电压的范围。TVS管有多种封装形式,如,轴向引线产品可用在电源馈线上,双列直插的和表面贴装的适合于在印刷板上作为逻辑电路、I/O总线及数据总线的保护。 3.1 TVS的特性 TVS的电路符号和普通的稳压管相同。其电压-电流特性曲线如图1所示。其正向特性与普通二极管相同,反向特性为典型的PN结雪崩器件。图2是TVS的电流-时间和电压-时间曲线。在浪涌电压的作用下,TVS两极间的电压由额定反向关断电压VWM上升到击穿电压VBR,而被击穿。随着击穿电流的出现,流过TVS的电流将达到峰值脉冲电流IPP,同时在其两端的电压被箝位到预定的最大箝位电压VC以下。其后,随着脉冲电流按指数衰减,TVS两极间的电压也不断下降,最后恢复到初态,这就是TVS抑制可能出现的浪涌脉冲功率,保护电子元器件的过程。当TVS两极受到反向高能量冲击时,它能以10~12S级的速度,将其两极间的阻抗由高变低,吸收高达数千瓦的浪涌功率,使两极间的电位箝位于预定值,有效地保护电子设备中的元器件免受浪涌脉冲的损害。TVS具有响应时间快、瞬态功率大、漏电流低、击穿电压偏差小、箝位电压容易控制、体积小等优点,目前已广泛应用于家用电器、电子仪表、通讯设备、电源、计算机系统等各个领域。 3.2 TVS的主要参数 (1)最大反向漏电流ID和额定反向关断电压VWM。VWM是TVS最大连续工作的直流或脉冲电压,当这个反向电压加于TVS的两极间时它处于反向关断状态,流过它的电流应小于或等于其最大反向漏电流ID; (2)最小击穿电压VBR和击穿电流IR。VBR是TVS最小的击穿电压。在25℃时,低于这个电压TVS是不会发生雪崩的。当TVS流过规定的1mA电流(IR)时,加于TVS两极的电压为其最小击穿电压VBR。按TVS的VBR与标准值的离散程度,可把VBR分为5%和10%两种。对于5%的VBR来说,VWM=0.85VBR;对于10%的VBR来说,VWM=0.81VBR; (3)最大箝位电压VC和最大峰值脉冲电流IPP。当持续时间为20mS的脉冲峰值电流IPP流过TVS时,在其两端出现的最大峰值电压为VC。VC、
IPP反映了TVS的浪涌抑制能力。VC与VBR之比称为箝位因子,一般在1.2~1.4之间; (4)电容量C。电容量C是由TVS雪崩结截面决定的,是在特定的1MHz频率下测得的。C的大小与TVS的电流承受能力成正比,C太大将使信号衰减。因此,C是数据接口电路选用TVS的重要参数; (5)最大峰值脉冲功耗PM。PM是TVS能承受的最大峰值脉冲功率耗散值。在给定的最大箝位电压下,功耗PM越大,其浪涌电流的承受能力越大;在给定的功耗PM下,箝位电压VC越低,其浪涌电流的承受能力越大。另外,峰值脉冲功耗还与脉冲波形、持续时间和环境温度有关。而且,TVS所能承受的瞬态脉冲是不重复的,器件规定的脉冲重复频率(持续时间与间歇时间之比)为0.01%。如果电路内出现重复性脉冲,应考虑脉冲功率的累积,有可能损坏TVS; (6)箝位时间TC。TC是从零到最小击穿电压VBR的时间。对单极性TVS小于1×10-12S;对双极性TVS小于10×10-12S。 3.3 TVS的分类 TVS器件按极性可分为单极性和双极性两种;按用途可分为通用型和专用型;按封装和内部结构可分为:轴向引线二极管、双列直插TVS阵列、贴片式和大功率模块等。轴向引线的产品峰值功率可以达到400W、500W、600W、1500W和5000W。其中大功率的产品主要用在电源馈线上,低功率产品主要用在高密度安装的场合。对于高密度安装的场合还可以选择双列直插和表面贴装的封装形式。 3.4 TVS的选用 (1)确定被保护电路的最大直流或连续工作电压,电路的额定标准电压和最大可承受电压; (2)TVS的额定反向关断电压VWM应大于或等于被保护电路的最大工作电压。若选用的VWM太低,器件可能进入雪崩或因反向漏电流太大影响电路的正常工作; (3)TVS的最大反向箝位电压VC应小于被保护电路的损坏电压 (4)在规定的脉冲持续时间内,TVS的最大峰值脉冲功率PM必须大于被保护电路可能出现的峰值脉冲功率。在确定了最大箝位电压后,其峰值脉冲电流应大于瞬态浪涌电流。一般,TVS的最大峰值脉冲功率是以10/1000mS的非重复脉冲给出的,而实际的脉冲宽度是由脉冲源决定的,当脉冲宽度不同时,其峰值功率也不同。如某600WTVS,对1000mS脉宽最大吸收功率为600W,但是对50mS脉宽吸收功率就可达到2100W,而对10mS的脉宽最大吸收功率就只有200W了。而且吸收功率还和脉冲波形有关,如
果是半个正弦波形式的脉冲,吸收功率就要减到75%;若是方波形式的脉冲,吸收功率就要减到66%; (5)平均稳态功率的匹配对于需要承受有规律的、短暂的脉冲群冲击的TVS,如应用在继电器、功率开关或电机控制等场合,有必要引入平均稳态功率的概念。例如,在一功率开关电路中会产生120Hz,宽度为4mS,峰值电流为25A的脉冲群。选用的TVS可以将单个脉冲的电压箝位到11.2V。此中平均稳态功率的计算为:脉冲时间间隔等于频率的倒数1/120=0.0083S,峰值吸收功率是箝位电压与脉冲电流的乘积11.2V×25A=280W,平均功率则为峰值功率与脉冲宽度对脉冲间隔比值的乘积,即280×(0.000004S/0.0083S)=0.134W。也就是说,选用的TVS平均稳态功率必须大于0.134W; (6)对于数据接口电路的保护,还必须注意选取具有合适电容C的TVS器件; (7)根据用途选用TVS的极性及封装结构。交流电路选用双极性TVS较为合理,多线保护选用TVS阵列更为有利。
❽ 平面向量的运算公式
当向量A的终点于向量B的始点相接时,以A的始点为始点,B的终点为终点所构成的向量C,叫做向量B与向量B的和向量,以为C=A+B.此为向量的加法
❾ C++稀疏矩阵的加法运算,如果元素为零的则不进行存储!
#include "stdio.h"
#include<iostream>
using namespace std;
#define m 6
#define n 8
#define max 50
void creatematrix(int A[m][n],int B[50])
{
int i,j,k=0;
while(B[k]!=-1)
{
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
if (A[i][j]!=0)
{
B[k]=i;
k++;
B[k]=j;
k++;
B[k]=A[i][j];
k++;
}
}
}
B[k]=-1;
}
}
void matrixadd(int A[max],int B[max],int C[max])
{
int i=0,j=0,k=0;
while (B[j]!=-1&&A[i]!=-1)
{
if (A[i]==B[j])
{
if (A[i+1]==B[j+1])
{
C[k]=A[i];
C[k+1]=A[i+1];
C[k+2]=A[i+2]+B[j+2];
k=k+3;
i=i+3;
j=j+3;
}
else if (A[i+1]<B[j+1])
{
C[k]=A[i];
C[k+1]=A[i+1];
C[k+2]=A[i+2];
k=k+3;
i=i+3;
}
else
{
C[k]=B[j];
C[k+1]=B[j+1];
C[k+2]=B[j+2];
k=k+3;
j=j+3;
}
}
void main( )
{
int E[m][n],F[m][n],A[max],B[max],C[max];
int i,j,k;
cout<<"请输入稀疏矩阵E:"<<endl;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cin>>E[i][j];
}
}
cout<<"请输入稀疏矩阵F:"<<endl;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
cin>>F[i][j];
}
}
creatematrix(E,A);
creatematrix(F,B);
matrixadd(A,B,C);
i=0;j=0;k=0;
cout<<"A数组内容如下:"<<endl;
while(A[i]!=-1)
{
cout<<A[i]<<" "<<A[i+1]<<" "<<A[i+2]<<endl;
i=i+3;
}
cout<<"B数组内容如下:\n";
while(B[j]!=-1)
{
cout<<B[j]<<" "<<B[j+1]<<" "<<B[j+2]<<endl;
j=j+3;
}
cout<<"C数组内容如下:\n";
while(C[k]!=-1)
{
cout<<C[k]<<" "<<C[k+1]<<" "<<C[k+2]<<endl;
k=k+3;
}
}