利用“梯度”函数的MATLAB索引越界误差

利用“梯度”函数的MATLAB索引越界误差,matlab,math,format,gradient,Matlab,Math,Format,Gradient,在一维问题中,我有3个数组 A, B, C = arrays (1-100) 一维网格,网格点之间的距离=a 我需要用Matlab代码编写下一个数学表达式: E = A^(-1/3) * ( D/Dx (B * ((DC/Dx)^(1/3)) ) 我写的是: DCDx = gradient(C, a); e1 = B * ( DCDx ^ (1/3) ); e2 = gradient(e1 , a); E = A^(-1/3) * e2; 编辑: fo

在一维问题中,我有3个数组

A, B, C = arrays (1-100)
一维网格,网格点之间的距离=a

我需要用Matlab代码编写下一个数学表达式:

E = A^(-1/3) * ( D/Dx (B * ((DC/Dx)^(1/3)) )
我写的是:

DCDx   =  gradient(C, a);
e1     =  B * ( DCDx ^ (1/3) );
e2     =  gradient(e1 , a);
E      =  A^(-1/3) * e2;
编辑:

for i:length(B)
    DCDx   =  gradient(C, a);
    e1     =  B.* ( Root(DCDx) );
    e2     =  gradient(e1 , a);
    E      =  ( Root(A) )^(-1).* e2;
end

where Root, is my function

function X = Root(X)
X = nthroot(X,3)

unfortunately still is not working. 
error = "Matrix dimensions must agree."

any idea?

此代码是否按照您的意愿工作?我不明白你用这个循环干什么

DCDx = gradient(C, a);
e1 = B .* nthroot(DCDx , 3);
e2 = gradient(e1 , a);
E = e2 ./ nthroot(A , 3);
我使用以下向量来测试代码:

A=rand(100,1);
B=rand(100,1);
C=rand(100,1);
a=.1;

当您的意思是
*
时,这很可能是使用
*
时出现的问题。新错误“矩阵维度必须一致。”(e1=B.*(DCDx^(1/3));)感谢您对。*的帮助,但我仍然收到一个错误。即使C是一个数组(1-100),100行-一列,DCDx也不是。你知道如何克服这个问题吗?试着使用元素级电源,
DCDx.^(1/3)
。谢谢,但我做不到。我在上面解释我想计算E数组。A、 B,C是数组,100行,1列。我不知道for循环的使用是否正确。我试着使用E(I)、e1(I)、e2(I),但我不能引起梯度函数。我用3个随机100x1矩阵测试了这段代码,分别是
A
B
C
,得到了
E
作为100x1矩阵。我的答案有什么问题或错误?e1=B.*nthroot(DCDx,3);“使用==>乘以矩阵维数的错误必须一致。”这很奇怪,我无法重现错误。我将修改我的答案,包括我用来测试它的向量,也许你会发现一些错误。我认为我代码中的错误是C的计算。我现在正在检查。可能格式不对。