Unknown Error at MATRIX 1
1 次查看(过去 30 天)
显示 更早的评论
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 个评论
Walter Roberson
2022-10-20
1cos
what is 1cos? Function and variable names cannot start with a number in MATLAB
回答(1 个)
Walter Roberson
2022-10-20
编辑:Walter Roberson
2022-10-20
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 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Logical 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!