Matlab中的矩阵

时间:2015-09-15 10:31:31

标签: matlab matrix

我正在运行一个调用函数的脚本,在函数中它从矩阵中获取一个值。 Matlab似乎认为价值仍然是一个矩阵,并且要求一个。当它的平方。我应该从矩阵中获取单个值。任何帮助将不胜感激!

输出

使用^时出错 输入必须是标量和方阵。 要计算elementwise POWER,请改用POWER(。^)。

ls_error中的错误(第11行)     partialSum =(vi - yi)^ 2;

这是我正在运行的脚本

Exp1H1 = 35.6;
Exp1H2 = 24.7;
Exp2H1 = 46.8;
Exp2H2 = 37.8;
Exp3H1 = 45.7;
Exp3H2 = 36.4;
Exp4H1 = 47.7;
Exp4H2 = 39.2;

Radius = 3.75;
L = 10;

ArrayOfHeightDiff = [(Exp1H1-Exp1H2),(Exp2H1-Exp2H2),(Exp3H1-Exp3H2),       (Exp4H1-Exp4H2)];
dhdl = ArrayOfHeightDiff./L
ArrayOfDarcys = [0.29,0.25,0.26,0.23];
v_meas = ((ArrayOfDarcys.*1000)./60)./(pi*Radius^2)

K = [-0.3 : 0.1 : 0.5];

for ii = 1 : 1 : length(K)
    ExportSum = ls_error(dhdl, v_meas, K)
    ExportSum(1,ii) = ExportSum
end

这是功能

function [ExportSum] = ls_error(dhdl, v_meas, K)

total = 0;           
L = length(dhdl);   

for ii = 1 : 1 : L
    dhdl1 = dhdl(1,ii);
    vi = v_meas(1,ii);        

    yi = 1*K* dhdl1;    
    partialSum = (vi - yi)^2;   
    total = total + partialSum;     
end

ExportSum = total;
end

2 个答案:

答案 0 :(得分:2)

在以下代码中,您创建一个1xN向量K,并将其传递给ls_error:

K = [-0.3 : 0.1 : 0.5];

for ii = 1 : 1 : length(K)
    ExportSum = ls_error(dhdl, v_meas, K)
    ExportSum(1,ii) = ExportSum
end

然后使用此向量K并将其乘以两个标量,这将生成1xN向量:

yi = 1*K* dhdl1;    
partialSum = (vi - yi)^2;   

然后partialSum计算会给你错误,因为你无法在矢量上执行标量平方。

从您的代码中,我认为您打算做的是:

for ii = 1 : 1 : length(K)
    ExportSum = ls_error(dhdl, v_meas, K(ii))
    ExportSum(1,ii) = ExportSum
end

除了传递整个向量K之外,您只想传递ii元素,以便在您返回的ExportSum计算中使用。

进一步说明,一旦这个bug得到解决,可能值得查看 vectorising 你的Matlab函数(即故意将K的整个向量传递给它并计算所有的ExportSum一次使用向量算法而不是循环内部,这将极大地加速您的代码。它可能很复杂,但可能会大大缩短执行时间。

答案 1 :(得分:1)

在调用脚本中,您将K定义为向量。因此,函数yi也是一个向量。因此(vi - yi)^2中的错误。