Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
倍频程误差:水平尺寸不匹配-矩阵元素matlab_Matlab_Matrix_Octave_Elementwise Operations - Fatal编程技术网

倍频程误差:水平尺寸不匹配-矩阵元素matlab

倍频程误差:水平尺寸不匹配-矩阵元素matlab,matlab,matrix,octave,elementwise-operations,Matlab,Matrix,Octave,Elementwise Operations,当我运行此代码时,我得到: k = linspace(0,0.5)' h = 6.58212 * 10^-16 m_0 = 9.109383 * 10^-31 E_c = ( h^2 * k.^2 ) / ( 10^-5 * m_0 ) A = [E_c, 1, 2; 3, 4, 5; 6, 7, 8] 我想计算特征值。但这首先需要有一个不会崩溃的矩阵。我意识到E_c是一个100x1的向量,我试图将它插入3x3矩阵a的第一个槽中,这个槽的大小是1x1。我是否需要使用elementwise来执

当我运行此代码时,我得到:

k = linspace(0,0.5)'
h = 6.58212 * 10^-16

m_0 = 9.109383 * 10^-31
E_c = ( h^2 * k.^2 ) / ( 10^-5 * m_0 )
A = [E_c, 1, 2; 3, 4, 5; 6, 7, 8]
我想计算特征值。但这首先需要有一个不会崩溃的矩阵。我意识到E_c是一个100x1的向量,我试图将它插入3x3矩阵a的第一个槽中,这个槽的大小是1x1。我是否需要使用elementwise来执行此操作


我们想找到其中一个矩阵元素是函数的特征值

这里有一些可能性,我添加了tic/toc来测量执行时间

k=linspace(0,0.5)”;
h=6.58212*10^-16;
m_0=9.109383*10^-31;
E_c=(h^2*k.^2)/(10^-5*m_0);
%%方法1
%%arrayfun,无显式循环,显式计算
抽搐
ev1=arrayfun(@(x)eig([x12;345;678]),E_c','unif',false);
ev1=cell2mat(ev1);
toc
%%方法2
%%arrayfun,无显式循环,函数句柄
抽搐
funEigA=@(x)eig([x12;345;678]);
ev2=arrayfun(funEigA,E_c',unif',false);
ev2=cell2mat(ev2);
toc
%%方法3
%%显式循环,具有矩阵预分配、显式计算、循环中无函数句柄
抽搐
ev3=零(长度(funEigA(0)),长度(E_c));%评估funEigA以确定特征值的数量。在这种情况下,这是3,因为它是一个3x3矩阵。
对于ik=1:长度(E_c)
ev3(:,ik)=eig([E_c(ik)12;3 4 5;6 7 8]);
终止
toc
%%方法4
%%通过预分配矩阵、显式循环和函数句柄调用
抽搐
ev4=零(长度(funEigA(0)),长度(E_c));
对于ik=1:长度(E_c)
ev4(:,ik)=funEigA(E_c(ik));
终止
toc
%%方法5
%%没有预分配、显式循环、函数句柄调用
抽搐
ev5=[];
对于val=E_c,“%k”必须是列向量
ev5(:,end+1)=富内加(val);
终止
toc
如果您对每种方法的性能感兴趣,以下是我的输出(联想T450,Core i7,3.2 GHz):

或者,运行1000次后:

就我个人而言,我喜欢方法1和方法2,因为它简单明了。但事实上,它们速度较慢,对于大k或大矩阵,使用单元阵列的性能可能比使用预先分配矩阵的性能差得多


如果要多次测量执行速度,请确保事先使用
清除所有
,否则结果可能会被缓存。

k
是一个
100x1
向量,因此
E_c
也是一个
100x1
向量,然后您尝试将该
100x1
向量插入
3x3
矩阵
a
的第一个插槽中,该插槽的大小为
1x1
。你的方程式中应该有什么?乔尔,你真的应该加上你的预期结果。在这种情况下,您只是向我们抛出一些代码:“不工作,有什么想法吗?”。代码的工作方式与您编写的完全相同,因此您认为代码会做什么与它实际做什么之间存在差异。我希望你能看到,告诉我们你对这个片段的期望是很重要的?@StaticBeagle,我更新了一些信息“我们想找到矩阵元素之一是函数的特征值。”--你是说你想找到矩阵的特征值,看到这些特征值随着矩阵值的改变而改变了吗?您需要为此循环,每次执行不同的
k值。或者你可以象征性地这么做,也许?我的意思是你可以写出3x3矩阵特征值的表达式,然后写一个循环。这是一个简单的方法。我知道对循环有强烈的厌恶,但我不认为100次迭代会杀死你
error: horizontal dimensions mismatch (100x1 vs 1x1)
error: called from
    physics at line 42 column 3
Elapsed time is 0.010564 seconds.
Elapsed time is 0.007659 seconds.
Elapsed time is 0.008660 seconds.
Elapsed time is 0.008498 seconds.
Elapsed time is 0.009461 seconds.