Function, dot, help me for solution
조회 수: 1 (최근 30일)
이전 댓글 표시
% I couldnt find my mistake
v=19*10^-3;
N=314;
R=25*10^-3;
L=50*10^-3;
C=1*10^-4;
e=0.1:0.1:0.9;
W=@(e) v*N*R*L*(L/C)^2*(e./4).*((16*e.^2+pi^2*(1-e.^2))^0.5/(1-e.^2).^2);
%W depends on e
sm=@(W) v*N*L*R/(4*W.*(L/C)^2);
%sm depends on W
plot(e,sm(W))
댓글 수: 5
Walter Roberson
2022년 8월 2일
W = @(e) v*N*R*L*(L/C)^2*(e./4).*((16*e.^2+pi^2*(1-e.^2))^0.5./(1-e.^2).^2);
채택된 답변
Benjamin Kraus
2022년 8월 2일
This line has the error:
sm=@(W) v*N*L*R/(4*W.*(L/C)^2);
Specifically: W is an anonymous function, so you can't do 4*W. That is what is generating the error message.
You need to evaluate your function W using some value of e before you can multiply it by 4. Alternatively, don't even create an anonymous function, and instead create W using the value of e from the previous line:
v = 19*10^-3;
N = 314;
R = 25*10^-3;
L = 50*10^-3;
C = 1*10^-4;
e = 0.1:0.1:0.9;
W = v.*N.*R.*L.*(L./C).^2.*(e./4).*((16.*e.^2+pi.^2.*(1-e.^2)).^0.5./(1-e.^2).^2);
sm = v.*N.*L.*R./(4.*W.*(L./C).^2);
plot(e,sm);
댓글 수: 2
Benjamin Kraus
2022년 8월 2일
If you have three different values for L, you can either create three instance of W and three instances of sm (i.e. W1, W2, etc.), or you can define W and sm as anonymous functions that take L as an input parameter, as @John D'Errico suggested in their answer.
Alternatively, you can leverage implicit expansion by defining L as a column vector and e as a row vector (or vice versa), as described in this blog post, but that's a bit of an advanced manuever.
추가 답변 (1개)
John D'Errico
2022년 8월 2일
편집: John D'Errico
2022년 8월 2일
Your problem has NOTHING to do with dots. This is a common mistake we see made here.
Suppose you have a pair of function handles, and you want to "add" the functions together? For example, suppose we try this:
F1 = @(x) x.^2;
F2 = @(x) x+1;
One might hope that the sum of those two function handles would be just a new function handle. I might try to write it as F3 = F1 + F2. If I did however, MATLAB would throw an error, just as you found. Instead, you need to create a new function handle, by adding the results of each of the two.
F3 = @(x) F1(x) + F2(x);
As you can see, we can use it as we would expect to happen.
F3(5)
Had I just tried to add or multiply the two function handles together, we would an error as you saw:
F1 * F2
As I said, you CANNOT add, multiply, subtract or divide function handles. Arithmetic operations do not apply to function handles. You need to do it as I showed above.
참고 항목
카테고리
Help Center 및 File Exchange에서 File Operations에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!