Function won't accept vector

6 Ansichten (letzte 30 Tage)
Rachel Dawn
Rachel Dawn am 23 Feb. 2018
Kommentiert: Rachel Dawn am 23 Feb. 2018
function result = g(x)
result= (2*x*exp(cos(6*x))*exp(-x)) + 15
" Error using * Inner matrix dimensions must agree."
I tried inputting g([0 1 2]), but I get this error. Can someone help me understand why? I would like the function to accept scalars and vectors.
I know there's such a thing as ".*", but when I created this function: (13/400)*(x.^3 - 30.876*x.^2 + 32.454*x + 99.89), it accepted [0 1 2] just fine.

Antworten (2)

KSSV
KSSV am 23 Feb. 2018
Bearbeitet: KSSV am 23 Feb. 2018
g = @(x) (2*x.*exp(cos(6*x)).*exp(-x)) + 15 ;
result = g([0 1 2])
When you input a vector, you need to do element by element multiplication. This is done by using .*. Please read about matlab element by element operations. https://in.mathworks.com/help/fixedpoint/ref/times.html
  3 Kommentare
James Tursa
James Tursa am 23 Feb. 2018
@Rachel: scalar*array gives the same result as scalar.*array, so in this particular case the * and the .* do the same thing. So in your 2nd function:
(13/400)*(x.^3 - 30.876*x.^2 + 32.454*x + 99.89)
The only multiply operations that you have involve a scalar (the (13/400) and the 30.876 and the 32.454 are all scalars). Hence there was no need in this particular case to use the .* operator.
In your 1st function, x and exp(cos(6*x)) and exp(-x) are all vectors that you are multiplying by each other so you must use the .* operator to get the element-wise multiplication that you want.
Rachel Dawn
Rachel Dawn am 23 Feb. 2018
Thank you, James!

Melden Sie sich an, um zu kommentieren.


Shrirang
Shrirang am 23 Feb. 2018
I just tried it..Your function behaves perfectly fine with ".*" operator Here is an example.
function result = Test(x)
result= (2 .* x .* exp(cos(6 .* x)) .* exp(- x)) + 15;
and answer was ==> 15.0000 16.9219 16.2588
May be there was typo mistake in your trial In your second example you have properly handled the dot operator before ^ so there was no error.
Let me know if it works for you.
  1 Kommentar
Rachel Dawn
Rachel Dawn am 23 Feb. 2018
Hello. Thank you for your response. I would like to know why is it that in my 2nd function, I use ".^" and in the first function I use ".*" ? Why does my 2nd function accept vectors without the use of ".*"?

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Matrix Indexing finden Sie in Help Center und File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by