![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/195903/image.png)
gradient of a gradient giving drastically different answer than the del2 operator
6 次查看(过去 30 天)
显示 更早的评论
I took a derivative of a derivative using the gradient method. I then applied the del2 operator to take the second derivative directly. For some reason, the second derivative calculated by taking gradient twice does not at all match that of the del2 operator. The gradient of a gradient method seems to be correct, and the del2 operator just shows a continuously decreasing function (which is wrong). Could anyone take a look at my code and figure out what I am doing wrong with the del2 operator? I also have attached ex.txt so that you can directly compute everything that I am seeing. I also attached the figure that is produced. You can see that the graph on the left (gradient of a gradient) is very different than the del2 method (right graph)
filename = 'ex.txt';
delimiterIn = ' ';
headerlinesIn = 5;
% Import the data file for post-processing
matrix = importdata(filename,delimiterIn,headerlinesIn);
A = matrix.data;
A = A(:,1:3);
%Define the number of distinct isotherms
temp_ids = sum(A(:) == 0.2);
%Define the number of density points sampled
density_ids = length(A)/temp_ids;
%Grab density matrix
density = A((1:density_ids),1);
%Grab temperature matrix
pressure = A(:,3);
%Reshape temperature matrix so it has one column for each temperature
%(isotherm), rather than just a single long column
pressure = reshape(pressure,[density_ids,temp_ids]);
%Differentiate
%dPdD = gradient(pressure(:,1)) / gradient(density);
[~,dPdD] = gradient(pressure, mean(diff(density)));
[~,ddPddD_grad] = gradient(dPdD, mean(diff(density)));
ddPddD_del2 = 4 *del2(pressure, mean(diff(density)));
subplot(1,2,1)
plot(density, ddPddD_grad)
grid on;
xlim([0.4 0.8])
xlabel('\rho (g/cm^3)');
ylabel('\partial^2p/\partial\rho^2')
subplot(1,2,2)
plot(density, ddPddD_del2)
grid on;
xlim([0.4 0.8])
xlabel('\rho (g/cm^3)');
ylabel('\partial^2p/\partial\rho^2')
temperature = 100:5:300;
density_spacing = density(2,1) - density(1,1);
0 个评论
采纳的回答
Miriam
2018-11-20
With your gradient method you are only taking the derivative along the y dimension, wheras the del2 operator approximates Laplace's differential operator:
![](https://www.mathworks.com/matlabcentral/answers/uploaded_files/195903/image.png)
6 个评论
更多回答(0 个)
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Debugging and Analysis 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!