Question about diff function

1 Ansicht (letzte 30 Tage)
Francisco
Francisco am 9 Dez. 2014
Bearbeitet: Star Strider am 9 Dez. 2014
I have defined a function as follows
function A = A(V, h)
A = V/h + 2*sqrt(V*pi*h)
end
In another function, I try to call it:
h = h - A (V, h) / diff (A (V, h), h);
But I get the error
Error using / Matrix dimensions must agree.
I am at a loss. Can someone give me a hand?
  1 Kommentar
Matt J
Matt J am 9 Dez. 2014
It is dangerous to use "A" as both a variable name and the name of your function.

Melden Sie sich an, um zu kommentieren.

Antworten (3)

Star Strider
Star Strider am 9 Dez. 2014
To take a numerical derivative most accurately, use the gradient function.
  2 Kommentare
Francisco
Francisco am 9 Dez. 2014
I was looking for an analytic derivative.
Star Strider
Star Strider am 9 Dez. 2014
Bearbeitet: Star Strider am 9 Dez. 2014
That requires the Symbolic Math Toolbox.
EDIT —
If you are satisfied with an approximation, you can do a numeric version of the definition of the derivative as an anonymous funciton:
dfdx = @(f,x) (f(x+1E-8)-f(x))./1E-8; % Conventional Derivative
A = @(V,h) V./h + 2*sqrt(V*pi*h);
V = 3;
h = linspace(0.1,10);
dAdh = dfdx(@(h) A(V,h), h);
figure(1)
plot(h, A(V,h), '-b')
hold on
plot(h, dAdh, '-r')
hold off
legend('A(V,h)', 'dA(V,h)/dh')
You may want to experiment with the 1E-8 value (this is the value that most often ‘works’ for me). At the very least, it will provide you with something to experiment with.

Melden Sie sich an, um zu kommentieren.


Roger Stafford
Roger Stafford am 9 Dez. 2014
h = h - (V/h+2*sqrt(V*pi*h))/(-V/h^2+V*pi/sqrt(V*pi*h));
(Maybe I am old-fashioned, but with elementary functions like this, it's easier to use calculus than to have to mess around with the 'diff' function in my opinion.)

Azzi Abdelmalek
Azzi Abdelmalek am 9 Dez. 2014
a=[ 2 4 8]
b=diff(a)
b= [4-2 8-4]
a is 1x3 and b is 1x2
  2 Kommentare
Francisco
Francisco am 9 Dez. 2014
I thought diff was http://www.mathworks.com/help/symbolic/diff.html, as in, I was trying to differentiate A. How can I achieve this, then?
Azzi Abdelmalek
Azzi Abdelmalek am 9 Dez. 2014
B=A(V,h)
C=diff (A (V, h), h);
h = h - B(h+1:end)/C ;

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Programming finden Sie in Help Center und File Exchange

Tags

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by