Unknown Error at MATRIX 1
1 view (last 30 days)
Show older comments
I am trying to find the amplitude "A" and the two phase shifts phi1 and phi2. I keep getting an error on the same line as MATRIX_1, but I keep getting this error: Invalid expression. Check for missing multiplication operator, missing or unbalanced delimiters, or other syntax error. To construct matrices, use brackets instead of parentheses.
I have been trying to look for a solution to this error, but I have been doing this for an hour. Help?
function [A, phil1, phil2] = compute_exp_wave_params(omega, f);
w1 = omega(1);
w2 = omega(2);
t = 1:100;
MATRIX_1 = [1cos (w1 * 1), sin(w1 * 1), cos(w2 * 1), -sin(w2 * 1);
1cos (w1 * 2), sin(w1 * 2), cos(w2 * 2), -sin(w2 * 2);
1cos (w1 * 3), sin(w1 * 3), cos(w2 * 3), -sin(w2 * 3);
1cos (w1 * 4), sin(w1 * 4), cos(w2 * 4), -sin(w2 * 4);
1cos (w1 * 5), sin(w1 * 5), cos(w2 * 5), -sin(w2 * 5)];
MATRIX_2 = inv(MATRIX_1);
MATRIX_3 = [f(1), f(2), f(3), f(4), f(5)];
MATRIX_4 = (MATRIX_2) * (MATRIX_3);
phi1 = asin(MATRIX_4(2));
phi2 = acos(MATRIX_4(4));
A = exp(MATRIX_4(1))
omega = [2, 1]; %Code to call my function
f = [
3.6065
0.3667
1.4256
5.8902
2.4701
5.7549
6.7604
0.5410
0.7121
5.4867
3.0614
3.7443
9.4376
1.0680
0.4235
3.8090
4.2015
2.6949
9.4275
2.3896
0.3477
2.0766
5.4891
2.3897
7.1422
4.9902
0.4210
1.0192
5.9064
2.6747
4.6899
8.2396
0.7240
0.5404
4.7919
3.5370
3.1433
9.8207
1.5520
0.3686
2.9341
4.8379
2.4729
8.5089
3.4427
0.3623
1.4912
5.8619
2.4523
5.9108
6.5501
0.5228
0.7412
5.5589
3.0073
3.8406
9.3348
1.0178
0.4339
3.9286
4.1183
2.7361
9.5149
2.2723
0.3481
2.1673
5.4218
2.3908
7.3098
4.7918
0.4114
1.0652
5.9252
2.6401
4.8201
8.0581
0.6942
0.5590
4.8976
3.4668
3.2116
9.8104
1.4752
0.3738
3.0463
4.7536
2.4940
8.6533
3.2843
0.3585
1.5596
5.8280
2.4368
6.0694
6.3391
0.5058
0.7721
5.6254
2.9555
3.9408];
[A, phi1, phi2] = compute_exp_wave_params(omega, f)
2 Comments
Walter Roberson
on 20 Oct 2022
1cos
what is 1cos? Function and variable names cannot start with a number in MATLAB
Answers (1)
Walter Roberson
on 20 Oct 2022
Edited: Walter Roberson
on 20 Oct 2022
The parsing rules are different inside [] or {} than outside those.
Inside those the parser is always looking to see if the spacing could reasonably support the interpretation that adjacent elements are distinct elements of a list. Consider for example
[1 2]
[1 -1]
[x y]
[1 (x+y)/2]
in each of those cases it is obvious that you are defining separate list elements.
But now consider
[x (x+y)/2]
is that a two element list? Is that x indexed at (x+y)/2? Is that a function x that accepts 0 or one argument being invoked first with no arguments, the result added to y, divide by 2, and pass the result to x? Yes there really are functions that accept such a thing, such as true((true+3)/2) would invoke true with no parameters, get scalar true, convert to double 1, add 3 to get 4, divide by 2 to get 2, and then invoke true(2) to return a 2x2 logical array.
So in MATLAB the rules inside [] and {} are
p+q or p+ q or p + q is addition, a single element
p +q is p and unary plus operator on q, a pair of elements
p-q or p- q or p - q is subtraction
p -q is p and unary minus operator on q, a pair of elements
pOPq or pOP q or p OP q or p OPq for all other operators is OP(p, q), a single element
p(q) and p( q) is p invoked on or indexed at q, not multiplication
p (q) is two separate elements, not function invocation or indexing or multiplication
So...
[cos (w1 * 2)]
is a two element vector, the first invoking cos with no parameters.
This is different than if you are outside of [] {}.
3 Comments
See Also
Categories
Find more on Logical in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!