matlab中二阶偏导数,MATLAB中带有两个变量的函数的一阶和二阶偏导数

我试图在MATLAB中实现不同的数值方法,而不使用内置函数,如渐变或del2。到目前为止这是我的代码:

clear all

close all

x = [-1:0.1:1];

y = [-2:0.1:2];

vel = @(x,y) x+exp(-((x-x(1)).^2+(y-y(1)).^2));

nx = length(x);

ny = length(y);

derivx = zeros(nx-1,ny-1)

% The partial derivative with respect to x

for ii = 1:nx-1

for jj = 1:ny-1

derivx(ii,jj) = (vel(ii+1,jj) - vel(ii,jj))./(x(jj+1,ii)-x(jj,ii));

end

end

% The partial with respect to y

derivy = zeros(ny-1,nx-1)

for ii = 1:ny-1

for jj = 1:nx-1

derivy(ii,jj) = (vel(ii+1,jj) - vel(ii,jj))./(y(jj+1,ii)-y(jj,ii));

end

end

此代码不适用于超出矩阵索引的错误消息。

Index in position 1 exceeds array bounds (must not exceed 1).

Error in untitled6 (line 13)

derivx(ii,jj) = (vel(ii+1,jj) - vel(ii,jj))./(x(jj+1,ii)-x(jj,ii));

我将如何继续计算重复到x和y(不是混合)的二阶部分?

解决办法:问题在于:(x(jj+1,ii)-x(jj,ii)。x是一个向量,但你把它当作矩阵对待。但是,我认为您的代码中存在更深层次的问题。首先,你对待的方式vel很不寻常。你已经写过函数x和y,在哪里x,y可能是向量(或矩阵),但你只能用标量来称呼它。如果我不得不猜测,我会认为你想写作vel:

x = [-1:0.1:1];

y = [-2:0.1:2]'; % Note the transpose here

vel = x+exp(-((x-x(1)).^2+(y-y(1)).^2));

这将构造vel为2D矩阵,其中每个元素(a,b)是vel在x=a和处评估的值y=b。一旦你完成了这个,你实际上可以取消双重嵌套的for循环(在MATLAB 中几乎不是一个好主意):

derivx = (vel(2:end,1:end-1) - vel(1:end-1,1:end-1)./(x(2:end)-x(1:end-1));

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值